Skip to content

Commit 772658a

Browse files
author
luxufan
committed
[InstCombine][NFC] Precommit test case of PR61137
1 parent 35c2aac commit 772658a

File tree

1 file changed

+150
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+150
-0
lines changed

llvm/test/Transforms/InstCombine/phi.ll

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,3 +1500,153 @@ latch:
15001500
exit:
15011501
ret void
15021502
}
1503+
1504+
define i32 @add_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1505+
; CHECK-LABEL: @add_two_phi_node_can_fold(
1506+
; CHECK-NEXT: entry:
1507+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1508+
; CHECK: if.then:
1509+
; CHECK-NEXT: br label [[IF_END]]
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]]
1514+
; CHECK-NEXT: ret i32 [[ADD]]
1515+
;
1516+
entry:
1517+
br i1 %c, label %if.then, label %if.end
1518+
1519+
if.then:
1520+
br label %if.end
1521+
1522+
if.end:
1523+
%x = phi i32 [ 0, %if.then ], [ %j, %entry ]
1524+
%y = phi i32 [ %i, %if.then ], [ 0, %entry ]
1525+
%add = add i32 %y, %x
1526+
ret i32 %add
1527+
}
1528+
1529+
define i32 @add_two_phi_node_cannt_fold(i1 %c, i32 %i, i32 %j) {
1530+
; CHECK-LABEL: @add_two_phi_node_cannt_fold(
1531+
; CHECK-NEXT: entry:
1532+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1533+
; CHECK: if.then:
1534+
; CHECK-NEXT: br label [[IF_END]]
1535+
; CHECK: if.end:
1536+
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1537+
; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ 1, [[ENTRY]] ]
1538+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[Y]], [[X]]
1539+
; CHECK-NEXT: ret i32 [[ADD]]
1540+
;
1541+
entry:
1542+
br i1 %c, label %if.then, label %if.end
1543+
1544+
if.then:
1545+
br label %if.end
1546+
1547+
if.end:
1548+
%x = phi i32 [ 0, %if.then ], [ %j, %entry ]
1549+
%y = phi i32 [ %i, %if.then ], [ 1, %entry ]
1550+
%add = add i32 %y, %x
1551+
ret i32 %add
1552+
}
1553+
1554+
define i32 @or_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1555+
; CHECK-LABEL: @or_two_phi_node_can_fold(
1556+
; CHECK-NEXT: entry:
1557+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1558+
; CHECK: if.then:
1559+
; CHECK-NEXT: br label [[IF_END]]
1560+
; 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]]
1564+
; CHECK-NEXT: ret i32 [[ADD]]
1565+
;
1566+
entry:
1567+
br i1 %c, label %if.then, label %if.end
1568+
1569+
if.then:
1570+
br label %if.end
1571+
1572+
if.end:
1573+
%x = phi i32 [ 0, %if.then ], [ %j, %entry ]
1574+
%y = phi i32 [ %i, %if.then ], [ 0, %entry ]
1575+
%add = or i32 %y, %x
1576+
ret i32 %add
1577+
}
1578+
1579+
define i32 @and_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1580+
; CHECK-LABEL: @and_two_phi_node_can_fold(
1581+
; CHECK-NEXT: entry:
1582+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1583+
; CHECK: if.then:
1584+
; CHECK-NEXT: br label [[IF_END]]
1585+
; 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]]
1589+
; CHECK-NEXT: ret i32 [[ADD]]
1590+
;
1591+
entry:
1592+
br i1 %c, label %if.then, label %if.end
1593+
1594+
if.then:
1595+
br label %if.end
1596+
1597+
if.end:
1598+
%x = phi i32 [ -1, %if.then ], [ %j, %entry ]
1599+
%y = phi i32 [ %i, %if.then ], [ -1, %entry ]
1600+
%add = and i32 %y, %x
1601+
ret i32 %add
1602+
}
1603+
1604+
define i32 @mul_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1605+
; CHECK-LABEL: @mul_two_phi_node_can_fold(
1606+
; CHECK-NEXT: entry:
1607+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1608+
; CHECK: if.then:
1609+
; CHECK-NEXT: br label [[IF_END]]
1610+
; 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]]
1614+
; CHECK-NEXT: ret i32 [[ADD]]
1615+
;
1616+
entry:
1617+
br i1 %c, label %if.then, label %if.end
1618+
1619+
if.then:
1620+
br label %if.end
1621+
1622+
if.end:
1623+
%x = phi i32 [ 1, %if.then ], [ %j, %entry ]
1624+
%y = phi i32 [ %i, %if.then ], [ 1, %entry ]
1625+
%add = mul i32 %y, %x
1626+
ret i32 %add
1627+
}
1628+
1629+
define i32 @xor_two_phi_node_can_fold(i1 %c, i32 %i, i32 %j) {
1630+
; CHECK-LABEL: @xor_two_phi_node_can_fold(
1631+
; CHECK-NEXT: entry:
1632+
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1633+
; CHECK: if.then:
1634+
; CHECK-NEXT: br label [[IF_END]]
1635+
; CHECK: if.end:
1636+
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[IF_THEN]] ], [ [[J:%.*]], [[ENTRY:%.*]] ]
1637+
; CHECK-NEXT: [[Y:%.*]] = phi i32 [ [[I:%.*]], [[IF_THEN]] ], [ 0, [[ENTRY]] ]
1638+
; CHECK-NEXT: [[ADD:%.*]] = xor i32 [[Y]], [[X]]
1639+
; CHECK-NEXT: ret i32 [[ADD]]
1640+
;
1641+
entry:
1642+
br i1 %c, label %if.then, label %if.end
1643+
1644+
if.then:
1645+
br label %if.end
1646+
1647+
if.end:
1648+
%x = phi i32 [ 0, %if.then ], [ %j, %entry ]
1649+
%y = phi i32 [ %i, %if.then ], [ 0, %entry ]
1650+
%add = xor i32 %y, %x
1651+
ret i32 %add
1652+
}

0 commit comments

Comments
 (0)