@@ -1595,6 +1595,59 @@ exit:
1595
1595
ret i32 0
1596
1596
}
1597
1597
1598
+ define i32 @ptr_induction_ult_3_step_6 (ptr %a , ptr %b ) {
1599
+ ; CHECK-LABEL: 'ptr_induction_ult_3_step_6'
1600
+ ; CHECK-NEXT: Classifying expressions for: @ptr_induction_ult_3_step_6
1601
+ ; CHECK-NEXT: %ptr.iv = phi ptr [ %ptr.iv.next, %loop ], [ %a, %entry ]
1602
+ ; CHECK-NEXT: --> {%a,+,6}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
1603
+ ; CHECK-NEXT: %ptr.iv.next = getelementptr i8, ptr %ptr.iv, i64 6
1604
+ ; CHECK-NEXT: --> {(6 + %a),+,6}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
1605
+ ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_ult_3_step_6
1606
+ ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
1607
+ ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
1608
+ ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
1609
+ ;
1610
+ entry:
1611
+ %cmp.6 = icmp ult ptr %a , %b
1612
+ br i1 %cmp.6 , label %loop , label %exit
1613
+
1614
+ loop:
1615
+ %ptr.iv = phi ptr [ %ptr.iv.next , %loop ], [ %a , %entry ]
1616
+ %ptr.iv.next = getelementptr i8 , ptr %ptr.iv , i64 6
1617
+ %exitcond = icmp eq ptr %ptr.iv , %b
1618
+ br i1 %exitcond , label %exit , label %loop
1619
+
1620
+ exit:
1621
+ ret i32 0
1622
+ }
1623
+
1624
+ define i32 @ptr_induction_ult_3_step_7 (ptr %a , ptr %b ) {
1625
+ ; CHECK-LABEL: 'ptr_induction_ult_3_step_7'
1626
+ ; CHECK-NEXT: Classifying expressions for: @ptr_induction_ult_3_step_7
1627
+ ; CHECK-NEXT: %ptr.iv = phi ptr [ %ptr.iv.next, %loop ], [ %a, %entry ]
1628
+ ; CHECK-NEXT: --> {%a,+,7}<%loop> U: full-set S: full-set Exits: ((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64) + %a) LoopDispositions: { %loop: Computable }
1629
+ ; CHECK-NEXT: %ptr.iv.next = getelementptr i8, ptr %ptr.iv, i64 7
1630
+ ; CHECK-NEXT: --> {(7 + %a),+,7}<%loop> U: full-set S: full-set Exits: (7 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64) + %a) LoopDispositions: { %loop: Computable }
1631
+ ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_ult_3_step_7
1632
+ ; CHECK-NEXT: Loop %loop: backedge-taken count is ((7905747460161236407 * (ptrtoint ptr %b to i64)) + (-7905747460161236407 * (ptrtoint ptr %a to i64)))
1633
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -1
1634
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((7905747460161236407 * (ptrtoint ptr %b to i64)) + (-7905747460161236407 * (ptrtoint ptr %a to i64)))
1635
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
1636
+ ;
1637
+ entry:
1638
+ %cmp.6 = icmp ult ptr %a , %b
1639
+ br i1 %cmp.6 , label %loop , label %exit
1640
+
1641
+ loop:
1642
+ %ptr.iv = phi ptr [ %ptr.iv.next , %loop ], [ %a , %entry ]
1643
+ %ptr.iv.next = getelementptr i8 , ptr %ptr.iv , i64 7
1644
+ %exitcond = icmp eq ptr %ptr.iv , %b
1645
+ br i1 %exitcond , label %exit , label %loop
1646
+
1647
+ exit:
1648
+ ret i32 0
1649
+ }
1650
+
1598
1651
define void @ptr_induction_eq_1 (ptr %a , ptr %b ) {
1599
1652
; CHECK-LABEL: 'ptr_induction_eq_1'
1600
1653
; CHECK-NEXT: Classifying expressions for: @ptr_induction_eq_1
0 commit comments