@@ -1604,4 +1604,102 @@ if.end:
1604
1604
ret void
1605
1605
}
1606
1606
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
+
1607
1705
!12 = !{i32 1 }
0 commit comments