@@ -1519,6 +1519,14 @@ define void @test_trunc_bittest(i8 %a) {
1519
1519
; CHECK-NEXT: call void @check1(i1 [[CMP1]])
1520
1520
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[A]], 0
1521
1521
; 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]])
1522
1530
; CHECK-NEXT: ret void
1523
1531
; CHECK: if.false:
1524
1532
; CHECK-NEXT: ret void
@@ -1531,6 +1539,14 @@ if.true:
1531
1539
call void @check1 (i1 %cmp1 )
1532
1540
%cmp2 = icmp eq i8 %a , 0
1533
1541
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 )
1534
1550
ret void
1535
1551
1536
1552
if.false:
@@ -1547,6 +1563,14 @@ define void @test_trunc_not_bittest(i8 %a) {
1547
1563
; CHECK-NEXT: call void @check1(i1 [[CMP1]])
1548
1564
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[A]], -1
1549
1565
; 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]])
1550
1574
; CHECK-NEXT: ret void
1551
1575
; CHECK: if.false:
1552
1576
; CHECK-NEXT: ret void
@@ -1560,54 +1584,86 @@ if.true:
1560
1584
call void @check1 (i1 %cmp1 )
1561
1585
%cmp2 = icmp eq i8 %a , -1
1562
1586
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 )
1563
1595
ret void
1564
1596
1565
1597
if.false:
1566
1598
ret void
1567
1599
}
1568
1600
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:%.*]]
1573
1605
; 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]])
1576
1614
; CHECK-NEXT: ret void
1577
1615
; CHECK: if.false:
1578
1616
; CHECK-NEXT: ret void
1579
1617
;
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
1582
1620
1583
1621
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 )
1586
1630
ret void
1587
1631
1588
1632
if.false:
1589
1633
ret void
1590
1634
}
1591
1635
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
1598
1639
; 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]])
1600
1650
; CHECK-NEXT: ret void
1601
1651
; CHECK: if.false:
1602
1652
; CHECK-NEXT: ret void
1603
1653
;
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
1606
1657
1607
1658
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 )
1611
1667
ret void
1612
1668
1613
1669
if.false:
0 commit comments