@@ -1604,4 +1604,102 @@ if.end:
16041604 ret void
16051605}
16061606
1607+ define void @loop_use_in_different_bb (i32 %n ) {
1608+ ; CHECK-LABEL: @loop_use_in_different_bb(
1609+ ; CHECK-NEXT: entry:
1610+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[N:%.*]], 1
1611+ ; CHECK-NEXT: br label [[FOR_COND:%.*]]
1612+ ; CHECK: for.cond:
1613+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY:%.*]] ]
1614+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[IV]], [[ADD]]
1615+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[RETURN:%.*]], label [[FOR_BODY]]
1616+ ; CHECK: for.body:
1617+ ; CHECK-NEXT: [[INC]] = add i32 [[IV]], 1
1618+ ; CHECK-NEXT: br label [[FOR_COND]]
1619+ ; CHECK: return:
1620+ ; CHECK-NEXT: ret void
1621+ ;
1622+ entry:
1623+ %add = add i32 %n , 1
1624+ br label %for.cond
1625+
1626+ for.cond:
1627+ %iv = phi i32 [ 0 , %entry ], [ %inc , %for.body ]
1628+ %exitcond = icmp eq i32 %iv , %add
1629+ br i1 %exitcond , label %return , label %for.body
1630+
1631+ for.body:
1632+ %inc = add i32 %iv , 1
1633+ br label %for.cond
1634+
1635+ return:
1636+ ret void
1637+ }
1638+
1639+ define void @loop_use_in_different_bb_phi (i32 %n ) {
1640+ ; CHECK-LABEL: @loop_use_in_different_bb_phi(
1641+ ; CHECK-NEXT: entry:
1642+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[N:%.*]], 1
1643+ ; CHECK-NEXT: br label [[FOR_COND:%.*]]
1644+ ; CHECK: for.cond:
1645+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY:%.*]] ]
1646+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[IV]], 42
1647+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[RETURN:%.*]], label [[FOR_BODY]]
1648+ ; CHECK: for.body:
1649+ ; CHECK-NEXT: [[DUMMY:%.*]] = phi i32 [ [[ADD]], [[FOR_COND]] ]
1650+ ; CHECK-NEXT: [[INC]] = add i32 [[IV]], 1
1651+ ; CHECK-NEXT: br label [[FOR_COND]]
1652+ ; CHECK: return:
1653+ ; CHECK-NEXT: ret void
1654+ ;
1655+ entry:
1656+ %add = add i32 %n , 1
1657+ br label %for.cond
1658+
1659+ for.cond:
1660+ %iv = phi i32 [ 0 , %entry ], [ %inc , %for.body ]
1661+ %exitcond = icmp eq i32 %iv , 42
1662+ br i1 %exitcond , label %return , label %for.body
1663+
1664+ for.body:
1665+ %dummy = phi i32 [ %add , %for.cond ]
1666+ %inc = add i32 %iv , 1
1667+ br label %for.cond
1668+
1669+ return:
1670+ ret void
1671+ }
1672+
1673+ define void @loop_use_in_wrong_phi_operand (i32 %n ) {
1674+ ; CHECK-LABEL: @loop_use_in_wrong_phi_operand(
1675+ ; CHECK-NEXT: entry:
1676+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[N:%.*]], 1
1677+ ; CHECK-NEXT: br label [[FOR_COND:%.*]]
1678+ ; CHECK: for.cond:
1679+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[ADD]], [[FOR_BODY:%.*]] ]
1680+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[IV]], 42
1681+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[RETURN:%.*]], label [[FOR_BODY]]
1682+ ; CHECK: for.body:
1683+ ; CHECK-NEXT: [[INC:%.*]] = add i32 [[IV]], 1
1684+ ; CHECK-NEXT: br label [[FOR_COND]]
1685+ ; CHECK: return:
1686+ ; CHECK-NEXT: ret void
1687+ ;
1688+ entry:
1689+ %add = add i32 %n , 1
1690+ br label %for.cond
1691+
1692+ for.cond:
1693+ %iv = phi i32 [ 0 , %entry ], [ %add , %for.body ]
1694+ %exitcond = icmp eq i32 %iv , 42
1695+ br i1 %exitcond , label %return , label %for.body
1696+
1697+ for.body:
1698+ %inc = add i32 %iv , 1
1699+ br label %for.cond
1700+
1701+ return:
1702+ ret void
1703+ }
1704+
16071705!12 = !{i32 1 }
0 commit comments