@@ -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
15361552if.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
15651597if.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
15831621if.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
15881632if.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
16071658if.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
16131669if.false:
0 commit comments