Skip to content

Commit f50efe9

Browse files
committed
[LVI] Pre commit test for #124480 (NFC)
1 parent 95c0c78 commit f50efe9

File tree

2 files changed

+104
-22
lines changed

2 files changed

+104
-22
lines changed

llvm/test/Transforms/CorrelatedValuePropagation/cond-at-use.ll

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,32 @@ define i16 @and_elide(i16 noundef %x) {
555555
ret i16 %sel
556556
}
557557

558+
define i16 @and_elide_trunc_cond(i16 noundef %x) {
559+
; CHECK-LABEL: @and_elide_trunc_cond(
560+
; CHECK-NEXT: [[AND:%.*]] = and i16 [[X:%.*]], 1
561+
; CHECK-NEXT: [[CMP:%.*]] = trunc nuw i16 [[X]] to i1
562+
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i16 [[AND]], i16 24
563+
; CHECK-NEXT: ret i16 [[SEL]]
564+
;
565+
%and = and i16 %x, 1
566+
%cmp = trunc nuw i16 %x to i1
567+
%sel = select i1 %cmp, i16 %and, i16 24
568+
ret i16 %sel
569+
}
570+
571+
define <2 x i8> @and_elide_trunc_cond_vec(<2 x i8> noundef %x) {
572+
; CHECK-LABEL: @and_elide_trunc_cond_vec(
573+
; CHECK-NEXT: [[AND:%.*]] = and <2 x i8> [[X:%.*]], splat (i8 1)
574+
; CHECK-NEXT: [[CMP:%.*]] = trunc nuw <2 x i8> [[X]] to <2 x i1>
575+
; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[AND]], <2 x i8> splat (i8 24)
576+
; CHECK-NEXT: ret <2 x i8> [[SEL]]
577+
;
578+
%and = and <2 x i8> %x, splat (i8 1)
579+
%cmp = trunc nuw <2 x i8> %x to <2 x i1>
580+
%sel = select <2 x i1> %cmp, <2 x i8> %and, <2 x i8> splat (i8 24)
581+
ret <2 x i8> %sel
582+
}
583+
558584
define i16 @cond_value_may_not_well_defined(i16 %x) {
559585
; CHECK-LABEL: @cond_value_may_not_well_defined(
560586
; CHECK-NEXT: [[AND:%.*]] = and i16 [[X:%.*]], 7

llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll

Lines changed: 78 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,14 @@ define void @test_trunc_bittest(i8 %a) {
15191519
; CHECK-NEXT: call void @check1(i1 [[CMP1]])
15201520
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[A]], 0
15211521
; CHECK-NEXT: call void @check1(i1 [[CMP2]])
1522+
; CHECK-NEXT: [[CMP3:%.*]] = icmp ne i8 [[A]], 1
1523+
; CHECK-NEXT: call void @check1(i1 [[CMP3]])
1524+
; CHECK-NEXT: [[CMP4:%.*]] = icmp eq i8 [[A]], 1
1525+
; CHECK-NEXT: call void @check1(i1 [[CMP4]])
1526+
; CHECK-NEXT: [[CMP5:%.*]] = icmp ne i8 [[A]], -1
1527+
; CHECK-NEXT: call void @check1(i1 [[CMP5]])
1528+
; CHECK-NEXT: [[CMP6:%.*]] = icmp eq i8 [[A]], -1
1529+
; CHECK-NEXT: call void @check1(i1 [[CMP6]])
15221530
; CHECK-NEXT: ret void
15231531
; CHECK: if.false:
15241532
; CHECK-NEXT: ret void
@@ -1531,6 +1539,14 @@ if.true:
15311539
call void @check1(i1 %cmp1)
15321540
%cmp2 = icmp eq i8 %a, 0
15331541
call void @check1(i1 %cmp2)
1542+
%cmp3 = icmp ne i8 %a, 1
1543+
call void @check1(i1 %cmp3)
1544+
%cmp4 = icmp eq i8 %a, 1
1545+
call void @check1(i1 %cmp4)
1546+
%cmp5 = icmp ne i8 %a, -1
1547+
call void @check1(i1 %cmp5)
1548+
%cmp6 = icmp eq i8 %a, -1
1549+
call void @check1(i1 %cmp6)
15341550
ret void
15351551

15361552
if.false:
@@ -1547,6 +1563,14 @@ define void @test_trunc_not_bittest(i8 %a) {
15471563
; CHECK-NEXT: call void @check1(i1 [[CMP1]])
15481564
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[A]], -1
15491565
; CHECK-NEXT: call void @check1(i1 [[CMP2]])
1566+
; CHECK-NEXT: [[CMP3:%.*]] = icmp ne i8 [[A]], 0
1567+
; CHECK-NEXT: call void @check1(i1 [[CMP3]])
1568+
; CHECK-NEXT: [[CMP4:%.*]] = icmp eq i8 [[A]], 0
1569+
; CHECK-NEXT: call void @check1(i1 [[CMP4]])
1570+
; CHECK-NEXT: [[CMP5:%.*]] = icmp ne i8 [[A]], -2
1571+
; CHECK-NEXT: call void @check1(i1 [[CMP5]])
1572+
; CHECK-NEXT: [[CMP6:%.*]] = icmp eq i8 [[A]], -2
1573+
; CHECK-NEXT: call void @check1(i1 [[CMP6]])
15501574
; CHECK-NEXT: ret void
15511575
; CHECK: if.false:
15521576
; CHECK-NEXT: ret void
@@ -1560,54 +1584,86 @@ if.true:
15601584
call void @check1(i1 %cmp1)
15611585
%cmp2 = icmp eq i8 %a, -1
15621586
call void @check1(i1 %cmp2)
1587+
%cmp3 = icmp ne i8 %a, 0
1588+
call void @check1(i1 %cmp3)
1589+
%cmp4 = icmp eq i8 %a, 0
1590+
call void @check1(i1 %cmp4)
1591+
%cmp5 = icmp ne i8 %a, -2
1592+
call void @check1(i1 %cmp5)
1593+
%cmp6 = icmp eq i8 %a, -2
1594+
call void @check1(i1 %cmp6)
15631595
ret void
15641596

15651597
if.false:
15661598
ret void
15671599
}
15681600

1569-
define void @test_icmp_trunc(i8 %a) {
1570-
; CHECK-LABEL: @test_icmp_trunc(
1571-
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 [[A:%.*]], 0
1572-
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
1601+
define void @test_trunc_nuw_bittest(i8 %a) {
1602+
; CHECK-LABEL: @test_trunc_nuw_bittest(
1603+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[A:%.*]] to i1
1604+
; CHECK-NEXT: br i1 [[TRUNC]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
15731605
; CHECK: if.true:
1574-
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[A]] to i1
1575-
; CHECK-NEXT: call void @check1(i1 [[TRUNC]])
1606+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 [[A]], 0
1607+
; CHECK-NEXT: call void @check1(i1 [[CMP1]])
1608+
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[A]], 0
1609+
; CHECK-NEXT: call void @check1(i1 [[CMP2]])
1610+
; CHECK-NEXT: [[CMP3:%.*]] = icmp ne i8 [[A]], 1
1611+
; CHECK-NEXT: call void @check1(i1 [[CMP3]])
1612+
; CHECK-NEXT: [[CMP4:%.*]] = icmp eq i8 [[A]], 1
1613+
; CHECK-NEXT: call void @check1(i1 [[CMP4]])
15761614
; CHECK-NEXT: ret void
15771615
; CHECK: if.false:
15781616
; CHECK-NEXT: ret void
15791617
;
1580-
%cmp1 = icmp ne i8 %a, 0
1581-
br i1 %cmp1, label %if.true, label %if.false
1618+
%trunc = trunc nuw i8 %a to i1
1619+
br i1 %trunc, label %if.true, label %if.false
15821620

15831621
if.true:
1584-
%trunc = trunc i8 %a to i1
1585-
call void @check1(i1 %trunc)
1622+
%cmp1 = icmp ne i8 %a, 0
1623+
call void @check1(i1 %cmp1)
1624+
%cmp2 = icmp eq i8 %a, 0
1625+
call void @check1(i1 %cmp2)
1626+
%cmp3 = icmp ne i8 %a, 1
1627+
call void @check1(i1 %cmp3)
1628+
%cmp4 = icmp eq i8 %a, 1
1629+
call void @check1(i1 %cmp4)
15861630
ret void
15871631

15881632
if.false:
15891633
ret void
15901634
}
15911635

1592-
define void @test_icmp_trunc_not(i8 %a) {
1593-
; CHECK-LABEL: @test_icmp_trunc_not(
1594-
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], -1
1595-
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
1596-
; CHECK: if.true:
1597-
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[A]] to i1
1636+
define void @test_trunc_nuw_not_bittest(i8 %a) {
1637+
; CHECK-LABEL: @test_trunc_nuw_not_bittest(
1638+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[A:%.*]] to i1
15981639
; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[TRUNC]], true
1599-
; CHECK-NEXT: call void @check1(i1 [[TRUNC]])
1640+
; CHECK-NEXT: br i1 [[NOT]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
1641+
; CHECK: if.true:
1642+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 [[A]], 0
1643+
; CHECK-NEXT: call void @check1(i1 [[CMP1]])
1644+
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[A]], 0
1645+
; CHECK-NEXT: call void @check1(i1 [[CMP2]])
1646+
; CHECK-NEXT: [[CMP3:%.*]] = icmp ne i8 [[A]], 1
1647+
; CHECK-NEXT: call void @check1(i1 [[CMP3]])
1648+
; CHECK-NEXT: [[CMP4:%.*]] = icmp eq i8 [[A]], 1
1649+
; CHECK-NEXT: call void @check1(i1 [[CMP4]])
16001650
; CHECK-NEXT: ret void
16011651
; CHECK: if.false:
16021652
; CHECK-NEXT: ret void
16031653
;
1604-
%cmp1 = icmp eq i8 %a, -1
1605-
br i1 %cmp1, label %if.true, label %if.false
1654+
%trunc = trunc nuw i8 %a to i1
1655+
%not = xor i1 %trunc, true
1656+
br i1 %not, label %if.true, label %if.false
16061657

16071658
if.true:
1608-
%trunc = trunc i8 %a to i1
1609-
%not = xor i1 %trunc, true
1610-
call void @check1(i1 %trunc)
1659+
%cmp1 = icmp ne i8 %a, 0
1660+
call void @check1(i1 %cmp1)
1661+
%cmp2 = icmp eq i8 %a, 0
1662+
call void @check1(i1 %cmp2)
1663+
%cmp3 = icmp ne i8 %a, 1
1664+
call void @check1(i1 %cmp3)
1665+
%cmp4 = icmp eq i8 %a, 1
1666+
call void @check1(i1 %cmp4)
16111667
ret void
16121668

16131669
if.false:

0 commit comments

Comments
 (0)