@@ -1568,86 +1568,6 @@ exit:
15681568 ret i32 0
15691569}
15701570
1571-
1572- define i32 @ptr_induction_ult_2 (ptr %a , ptr %b ) {
1573- ; CHECK-LABEL: 'ptr_induction_ult_2'
1574- ; CHECK-NEXT: Classifying expressions for: @ptr_induction_ult_2
1575- ; CHECK-NEXT: %ptr.iv = phi ptr [ %ptr.iv.next, %loop ], [ %a, %entry ]
1576- ; CHECK-NEXT: --> {%a,+,4}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
1577- ; CHECK-NEXT: %ptr.iv.next = getelementptr i32, ptr %ptr.iv, i64 1
1578- ; CHECK-NEXT: --> {(4 + %a),+,4}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
1579- ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_ult_2
1580- ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
1581- ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
1582- ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
1583- ;
1584- entry:
1585- %cmp.6 = icmp ult ptr %a , %b
1586- br i1 %cmp.6 , label %loop , label %exit
1587-
1588- loop:
1589- %ptr.iv = phi ptr [ %ptr.iv.next , %loop ], [ %a , %entry ]
1590- %ptr.iv.next = getelementptr i32 , ptr %ptr.iv , i64 1
1591- %exitcond = icmp eq ptr %ptr.iv , %b
1592- br i1 %exitcond , label %exit , label %loop
1593-
1594- exit:
1595- ret i32 0
1596- }
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-
16511571define void @ptr_induction_eq_1 (ptr %a , ptr %b ) {
16521572; CHECK-LABEL: 'ptr_induction_eq_1'
16531573; CHECK-NEXT: Classifying expressions for: @ptr_induction_eq_1
@@ -1705,47 +1625,6 @@ exit:
17051625 ret void
17061626}
17071627
1708- ; TODO: It feels like we should be able to calculate the symbolic max
1709- ; exit count for the loop.inc block here, in the same way as
1710- ; ptr_induction_eq_1. The problem seems to be in howFarToZero when the
1711- ; ControlsOnlyExit is set to false.
1712- define void @ptr_induction_early_exit_eq_1 (ptr %a , ptr %b , ptr %c ) {
1713- ; CHECK-LABEL: 'ptr_induction_early_exit_eq_1'
1714- ; CHECK-NEXT: Classifying expressions for: @ptr_induction_early_exit_eq_1
1715- ; CHECK-NEXT: %ptr.iv = phi ptr [ %ptr.iv.next, %loop.inc ], [ %a, %entry ]
1716- ; CHECK-NEXT: --> {%a,+,8}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
1717- ; CHECK-NEXT: %ld1 = load ptr, ptr %ptr.iv, align 8
1718- ; CHECK-NEXT: --> %ld1 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }
1719- ; CHECK-NEXT: %ptr.iv.next = getelementptr inbounds i8, ptr %ptr.iv, i64 8
1720- ; CHECK-NEXT: --> {(8 + %a),+,8}<nw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }
1721- ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_early_exit_eq_1
1722- ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
1723- ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE***
1724- ; CHECK-NEXT: exit count for loop.inc: ***COULDNOTCOMPUTE***
1725- ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
1726- ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
1727- ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
1728- ; CHECK-NEXT: symbolic max exit count for loop.inc: ***COULDNOTCOMPUTE***
1729- ;
1730- entry:
1731- %cmp = icmp eq ptr %a , %b
1732- br i1 %cmp , label %exit , label %loop
1733-
1734- loop:
1735- %ptr.iv = phi ptr [ %ptr.iv.next , %loop.inc ], [ %a , %entry ]
1736- %ld1 = load ptr , ptr %ptr.iv , align 8
1737- %earlyexitcond = icmp eq ptr %ld1 , %c
1738- br i1 %earlyexitcond , label %exit , label %loop.inc
1739-
1740- loop.inc:
1741- %ptr.iv.next = getelementptr inbounds i8 , ptr %ptr.iv , i64 8
1742- %exitcond = icmp eq ptr %ptr.iv.next , %b
1743- br i1 %exitcond , label %exit , label %loop
1744-
1745- exit:
1746- ret void
1747- }
1748-
17491628define void @ptr_induction_early_exit_eq_2 (ptr %a , i64 %n , ptr %c ) {
17501629; CHECK-LABEL: 'ptr_induction_early_exit_eq_2'
17511630; CHECK-NEXT: Classifying expressions for: @ptr_induction_early_exit_eq_2
@@ -1786,7 +1665,6 @@ exit:
17861665 ret void
17871666}
17881667
1789-
17901668define void @gep_addrec_nw (ptr %a ) {
17911669; CHECK-LABEL: 'gep_addrec_nw'
17921670; CHECK-NEXT: Classifying expressions for: @gep_addrec_nw
0 commit comments