@@ -1067,7 +1067,9 @@ define i1 @sge_or_max_commute(i8 %x, i8 %y) {
1067
1067
define i1 @sge_or_max_commute_logical (i8 %x , i8 %y ) {
1068
1068
; CHECK-LABEL: @sge_or_max_commute_logical(
1069
1069
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
1070
- ; CHECK-NEXT: ret i1 [[CMP]]
1070
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 127
1071
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1072
+ ; CHECK-NEXT: ret i1 [[R]]
1071
1073
;
1072
1074
%cmp = icmp sge i8 %x , %y
1073
1075
%cmpeq = icmp eq i8 %x , 127
@@ -1111,7 +1113,9 @@ define i1 @sge_swap_or_max_commute(i8 %x, i8 %y) {
1111
1113
define i1 @sge_swap_or_max_commute_logical (i8 %x , i8 %y ) {
1112
1114
; CHECK-LABEL: @sge_swap_or_max_commute_logical(
1113
1115
; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
1114
- ; CHECK-NEXT: ret i1 [[CMP]]
1116
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 127
1117
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1118
+ ; CHECK-NEXT: ret i1 [[R]]
1115
1119
;
1116
1120
%cmp = icmp sle i8 %y , %x
1117
1121
%cmpeq = icmp eq i8 %x , 127
@@ -1155,7 +1159,9 @@ define i1 @uge_or_max_commute(i8 %x, i8 %y) {
1155
1159
define i1 @uge_or_max_commute_logical (i8 %x , i8 %y ) {
1156
1160
; CHECK-LABEL: @uge_or_max_commute_logical(
1157
1161
; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
1158
- ; CHECK-NEXT: ret i1 [[CMP]]
1162
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -1
1163
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1164
+ ; CHECK-NEXT: ret i1 [[R]]
1159
1165
;
1160
1166
%cmp = icmp uge i8 %x , %y
1161
1167
%cmpeq = icmp eq i8 %x , 255
@@ -1199,7 +1205,9 @@ define i1 @uge_swap_or_max_commute(i8 %x, i8 %y) {
1199
1205
define i1 @uge_swap_or_max_commute_logical (i8 %x , i8 %y ) {
1200
1206
; CHECK-LABEL: @uge_swap_or_max_commute_logical(
1201
1207
; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
1202
- ; CHECK-NEXT: ret i1 [[CMP]]
1208
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -1
1209
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1210
+ ; CHECK-NEXT: ret i1 [[R]]
1203
1211
;
1204
1212
%cmp = icmp ule i8 %y , %x
1205
1213
%cmpeq = icmp eq i8 %x , 255
@@ -1249,7 +1257,9 @@ define i1 @sle_or_min_commute(i8 %x, i8 %y) {
1249
1257
define i1 @sle_or_min_commute_logical (i8 %x , i8 %y ) {
1250
1258
; CHECK-LABEL: @sle_or_min_commute_logical(
1251
1259
; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
1252
- ; CHECK-NEXT: ret i1 [[CMP]]
1260
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -128
1261
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1262
+ ; CHECK-NEXT: ret i1 [[R]]
1253
1263
;
1254
1264
%cmp = icmp sle i8 %x , %y
1255
1265
%cmpeq = icmp eq i8 %x , 128
@@ -1293,7 +1303,9 @@ define i1 @sle_swap_or_min_commute(i8 %x, i8 %y) {
1293
1303
define i1 @sle_swap_or_min_commute_logical (i8 %x , i8 %y ) {
1294
1304
; CHECK-LABEL: @sle_swap_or_min_commute_logical(
1295
1305
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
1296
- ; CHECK-NEXT: ret i1 [[CMP]]
1306
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -128
1307
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1308
+ ; CHECK-NEXT: ret i1 [[R]]
1297
1309
;
1298
1310
%cmp = icmp sge i8 %y , %x
1299
1311
%cmpeq = icmp eq i8 %x , 128
@@ -1337,7 +1349,9 @@ define i1 @ule_or_min_commute(i8 %x, i8 %y) {
1337
1349
define i1 @ule_or_min_commute_logical (i8 %x , i8 %y ) {
1338
1350
; CHECK-LABEL: @ule_or_min_commute_logical(
1339
1351
; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
1340
- ; CHECK-NEXT: ret i1 [[CMP]]
1352
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 0
1353
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1354
+ ; CHECK-NEXT: ret i1 [[R]]
1341
1355
;
1342
1356
%cmp = icmp ule i8 %x , %y
1343
1357
%cmpeq = icmp eq i8 %x , 0
@@ -1381,7 +1395,9 @@ define i1 @ule_swap_or_min_commute(i8 %x, i8 %y) {
1381
1395
define i1 @ule_swap_or_min_commute_logical (i8 %x , i8 %y ) {
1382
1396
; CHECK-LABEL: @ule_swap_or_min_commute_logical(
1383
1397
; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
1384
- ; CHECK-NEXT: ret i1 [[CMP]]
1398
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 0
1399
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1400
+ ; CHECK-NEXT: ret i1 [[R]]
1385
1401
;
1386
1402
%cmp = icmp uge i8 %y , %x
1387
1403
%cmpeq = icmp eq i8 %x , 0
@@ -1431,7 +1447,9 @@ define i1 @slt_and_not_max_commute(i8 %x, i8 %y) {
1431
1447
define i1 @slt_and_not_max_commute_logical (i8 %x , i8 %y ) {
1432
1448
; CHECK-LABEL: @slt_and_not_max_commute_logical(
1433
1449
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
1434
- ; CHECK-NEXT: ret i1 [[CMP]]
1450
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 127
1451
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1452
+ ; CHECK-NEXT: ret i1 [[R]]
1435
1453
;
1436
1454
%cmp = icmp slt i8 %x , %y
1437
1455
%cmpeq = icmp ne i8 %x , 127
@@ -1475,7 +1493,9 @@ define i1 @slt_swap_and_not_max_commute(i8 %x, i8 %y) {
1475
1493
define i1 @slt_swap_and_not_max_commute_logical (i8 %x , i8 %y ) {
1476
1494
; CHECK-LABEL: @slt_swap_and_not_max_commute_logical(
1477
1495
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
1478
- ; CHECK-NEXT: ret i1 [[CMP]]
1496
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 127
1497
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1498
+ ; CHECK-NEXT: ret i1 [[R]]
1479
1499
;
1480
1500
%cmp = icmp sgt i8 %y , %x
1481
1501
%cmpeq = icmp ne i8 %x , 127
@@ -1519,7 +1539,9 @@ define i1 @ult_and_not_max_commute(i8 %x, i8 %y) {
1519
1539
define i1 @ult_and_not_max_commute_logical (i8 %x , i8 %y ) {
1520
1540
; CHECK-LABEL: @ult_and_not_max_commute_logical(
1521
1541
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
1522
- ; CHECK-NEXT: ret i1 [[CMP]]
1542
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -1
1543
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1544
+ ; CHECK-NEXT: ret i1 [[R]]
1523
1545
;
1524
1546
%cmp = icmp ult i8 %x , %y
1525
1547
%cmpeq = icmp ne i8 %x , 255
@@ -1563,7 +1585,9 @@ define i1 @ult_swap_and_not_max_commute(i8 %x, i8 %y) {
1563
1585
define i1 @ult_swap_and_not_max_commute_logical (i8 %x , i8 %y ) {
1564
1586
; CHECK-LABEL: @ult_swap_and_not_max_commute_logical(
1565
1587
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
1566
- ; CHECK-NEXT: ret i1 [[CMP]]
1588
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -1
1589
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1590
+ ; CHECK-NEXT: ret i1 [[R]]
1567
1591
;
1568
1592
%cmp = icmp ugt i8 %y , %x
1569
1593
%cmpeq = icmp ne i8 %x , 255
@@ -1613,7 +1637,9 @@ define i1 @sgt_and_not_min_commute(i8 %x, i8 %y) {
1613
1637
define i1 @sgt_and_not_min_commute_logical (i8 %x , i8 %y ) {
1614
1638
; CHECK-LABEL: @sgt_and_not_min_commute_logical(
1615
1639
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
1616
- ; CHECK-NEXT: ret i1 [[CMP]]
1640
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -128
1641
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1642
+ ; CHECK-NEXT: ret i1 [[R]]
1617
1643
;
1618
1644
%cmp = icmp sgt i8 %x , %y
1619
1645
%cmpeq = icmp ne i8 %x , 128
@@ -1657,7 +1683,9 @@ define i1 @sgt_swap_and_not_min_commute(i8 %x, i8 %y) {
1657
1683
define i1 @sgt_swap_and_not_min_commute_logical (i8 %x , i8 %y ) {
1658
1684
; CHECK-LABEL: @sgt_swap_and_not_min_commute_logical(
1659
1685
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
1660
- ; CHECK-NEXT: ret i1 [[CMP]]
1686
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -128
1687
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1688
+ ; CHECK-NEXT: ret i1 [[R]]
1661
1689
;
1662
1690
%cmp = icmp slt i8 %y , %x
1663
1691
%cmpeq = icmp ne i8 %x , 128
@@ -1701,7 +1729,9 @@ define i1 @ugt_and_not_min_commute(i8 %x, i8 %y) {
1701
1729
define i1 @ugt_and_not_min_commute_logical (i8 %x , i8 %y ) {
1702
1730
; CHECK-LABEL: @ugt_and_not_min_commute_logical(
1703
1731
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
1704
- ; CHECK-NEXT: ret i1 [[CMP]]
1732
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 0
1733
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1734
+ ; CHECK-NEXT: ret i1 [[R]]
1705
1735
;
1706
1736
%cmp = icmp ugt i8 %x , %y
1707
1737
%cmpeq = icmp ne i8 %x , 0
@@ -1745,7 +1775,9 @@ define i1 @ugt_swap_and_not_min_commute(i8 %x, i8 %y) {
1745
1775
define i1 @ugt_swap_and_not_min_commute_logical (i8 %x , i8 %y ) {
1746
1776
; CHECK-LABEL: @ugt_swap_and_not_min_commute_logical(
1747
1777
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
1748
- ; CHECK-NEXT: ret i1 [[CMP]]
1778
+ ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 0
1779
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1780
+ ; CHECK-NEXT: ret i1 [[R]]
1749
1781
;
1750
1782
%cmp = icmp ult i8 %y , %x
1751
1783
%cmpeq = icmp ne i8 %x , 0
0 commit comments