@@ -1508,9 +1508,7 @@ define i32 @add_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1508
1508
; CHECK: if.then:
1509
1509
; CHECK-NEXT: br label [[IF_END]]
1510
1510
; CHECK: if.end:
1511
- ; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1512
- ; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ 0, [[ENTRY]] ]
1513
- ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[Y]], [[X]]
1511
+ ; CHECK-NEXT: [[ADD:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1514
1512
; CHECK-NEXT: ret i32 [[ADD]]
1515
1513
;
1516
1514
entry:
@@ -1558,9 +1556,7 @@ define i32 @or_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1558
1556
; CHECK: if.then:
1559
1557
; CHECK-NEXT: br label [[IF_END]]
1560
1558
; CHECK: if.end:
1561
- ; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1562
- ; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ 0, [[ENTRY]] ]
1563
- ; CHECK-NEXT: [[ADD:%.*]] = or i32 [[Y]], [[X]]
1559
+ ; CHECK-NEXT: [[ADD:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1564
1560
; CHECK-NEXT: ret i32 [[ADD]]
1565
1561
;
1566
1562
entry:
@@ -1583,9 +1579,7 @@ define i32 @and_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1583
1579
; CHECK: if.then:
1584
1580
; CHECK-NEXT: br label [[IF_END]]
1585
1581
; CHECK: if.end:
1586
- ; CHECK-NEXT: [[X:%.*]] = phi i32 [ -1, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1587
- ; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ -1, [[ENTRY]] ]
1588
- ; CHECK-NEXT: [[ADD:%.*]] = and i32 [[Y]], [[X]]
1582
+ ; CHECK-NEXT: [[ADD:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1589
1583
; CHECK-NEXT: ret i32 [[ADD]]
1590
1584
;
1591
1585
entry:
@@ -1608,9 +1602,7 @@ define i32 @mul_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1608
1602
; CHECK: if.then:
1609
1603
; CHECK-NEXT: br label [[IF_END]]
1610
1604
; CHECK: if.end:
1611
- ; CHECK-NEXT: [[X:%.*]] = phi i32 [ 1, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1612
- ; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ 1, [[ENTRY]] ]
1613
- ; CHECK-NEXT: [[ADD:%.*]] = mul i32 [[Y]], [[X]]
1605
+ ; CHECK-NEXT: [[ADD:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1614
1606
; CHECK-NEXT: ret i32 [[ADD]]
1615
1607
;
1616
1608
entry:
@@ -1633,9 +1625,32 @@ define i32 @xor_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1633
1625
; CHECK: if.then:
1634
1626
; CHECK-NEXT: br label [[IF_END]]
1635
1627
; CHECK: if.end:
1628
+ ; CHECK-NEXT: [[ADD:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1629
+ ; CHECK-NEXT: ret i32 [[ADD]]
1630
+ ;
1631
+ entry:
1632
+ br i1 %c , label %if.then , label %if.end
1633
+
1634
+ if.then:
1635
+ br label %if.end
1636
+
1637
+ if.end:
1638
+ %x = phi i32 [ 0 , %if.then ], [ %j , %entry ]
1639
+ %y = phi i32 [ %i , %if.then ], [ 0 , %entry ]
1640
+ %add = xor i32 %y , %x
1641
+ ret i32 %add
1642
+ }
1643
+
1644
+ define i32 @sub_two_phi_node_cant_fold (i1 %c , i32 %i , i32 %j ) {
1645
+ ; CHECK-LABEL: @sub_two_phi_node_cant_fold(
1646
+ ; CHECK-NEXT: entry:
1647
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1648
+ ; CHECK: if.then:
1649
+ ; CHECK-NEXT: br label [[IF_END]]
1650
+ ; CHECK: if.end:
1636
1651
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1637
1652
; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ 0, [[ENTRY]] ]
1638
- ; CHECK-NEXT: [[ADD:%.*]] = xor i32 [[Y]], [[X]]
1653
+ ; CHECK-NEXT: [[ADD:%.*]] = sub i32 [[Y]], [[X]]
1639
1654
; CHECK-NEXT: ret i32 [[ADD]]
1640
1655
;
1641
1656
entry:
@@ -1647,6 +1662,6 @@ if.then:
1647
1662
if.end:
1648
1663
%x = phi i32 [ 0 , %if.then ], [ %j , %entry ]
1649
1664
%y = phi i32 [ %i , %if.then ], [ 0 , %entry ]
1650
- %add = xor i32 %y , %x
1665
+ %add = sub i32 %y , %x
1651
1666
ret i32 %add
1652
1667
}
0 commit comments