Skip to content

Commit 05bb50e

Browse files
committed
[InstCombine][NFC] Precommit tests
1 parent d7c6728 commit 05bb50e

File tree

2 files changed

+287
-0
lines changed

2 files changed

+287
-0
lines changed

llvm/test/Transforms/InstCombine/and-or-icmps.ll

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3038,3 +3038,71 @@ define i32 @icmp_slt_0_or_icmp_add_1_sge_100_i32_fail(i32 %x) {
30383038
%D = or i32 %C, %B
30393039
ret i32 %D
30403040
}
3041+
3042+
define i1 @logical_and_icmps1(i32 %a, i1 %other_cond) {
3043+
; CHECK-LABEL: @logical_and_icmps1(
3044+
; CHECK-NEXT: entry:
3045+
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[A:%.*]], -1
3046+
; CHECK-NEXT: [[RET1:%.*]] = select i1 [[RET:%.*]], i1 [[CMP2]], i1 false
3047+
; CHECK-NEXT: [[CMP3:%.*]] = icmp slt i32 [[A]], 10086
3048+
; CHECK-NEXT: [[RET2:%.*]] = select i1 [[RET1]], i1 [[CMP3]], i1 false
3049+
; CHECK-NEXT: ret i1 [[RET2]]
3050+
;
3051+
entry:
3052+
%cmp1 = icmp sgt i32 %a, -1
3053+
%logical_and = select i1 %other_cond, i1 %cmp1, i1 false
3054+
%cmp2 = icmp slt i32 %a, 10086
3055+
%ret = select i1 %logical_and, i1 %cmp2, i1 false
3056+
ret i1 %ret
3057+
}
3058+
3059+
define i1 @logical_and_icmps2(i32 %a, i1 %other_cond) {
3060+
; CHECK-LABEL: @logical_and_icmps2(
3061+
; CHECK-NEXT: entry:
3062+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[A:%.*]], -1
3063+
; CHECK-NEXT: [[LOGICAL_AND:%.*]] = select i1 [[OTHER_COND:%.*]], i1 [[CMP1]], i1 false
3064+
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[A]], 10086
3065+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[LOGICAL_AND]], i1 [[CMP2]], i1 false
3066+
; CHECK-NEXT: ret i1 [[RET]]
3067+
;
3068+
entry:
3069+
%cmp1 = icmp slt i32 %a, -1
3070+
%logical_and = select i1 %other_cond, i1 %cmp1, i1 false
3071+
%cmp2 = icmp eq i32 %a, 10086
3072+
%ret = select i1 %logical_and, i1 %cmp2, i1 false
3073+
ret i1 %ret
3074+
}
3075+
3076+
define <4 x i1> @logical_and_icmps_vec1(<4 x i32> %a, <4 x i1> %other_cond) {
3077+
; CHECK-LABEL: @logical_and_icmps_vec1(
3078+
; CHECK-NEXT: entry:
3079+
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt <4 x i32> [[A:%.*]], <i32 -1, i32 -1, i32 -1, i32 -1>
3080+
; CHECK-NEXT: [[RET1:%.*]] = select <4 x i1> [[RET:%.*]], <4 x i1> [[CMP2]], <4 x i1> zeroinitializer
3081+
; CHECK-NEXT: [[CMP3:%.*]] = icmp slt <4 x i32> [[A]], <i32 10086, i32 10086, i32 10086, i32 10086>
3082+
; CHECK-NEXT: [[RET2:%.*]] = select <4 x i1> [[RET1]], <4 x i1> [[CMP3]], <4 x i1> zeroinitializer
3083+
; CHECK-NEXT: ret <4 x i1> [[RET2]]
3084+
;
3085+
entry:
3086+
%cmp1 = icmp sgt <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1 >
3087+
%logical_and = select <4 x i1> %other_cond, <4 x i1> %cmp1, <4 x i1> zeroinitializer
3088+
%cmp2 = icmp slt <4 x i32> %a, <i32 10086, i32 10086, i32 10086, i32 10086 >
3089+
%ret = select <4 x i1> %logical_and, <4 x i1> %cmp2, <4 x i1> zeroinitializer
3090+
ret <4 x i1> %ret
3091+
}
3092+
3093+
define i1 @logical_and_icmps_fail1(i32 %a, i32 %b, i1 %other_cond) {
3094+
; CHECK-LABEL: @logical_and_icmps_fail1(
3095+
; CHECK-NEXT: entry:
3096+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[A:%.*]], -1
3097+
; CHECK-NEXT: [[LOGICAL_AND:%.*]] = select i1 [[OTHER_COND:%.*]], i1 [[CMP1]], i1 false
3098+
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[A]], [[B:%.*]]
3099+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[LOGICAL_AND]], i1 [[CMP2]], i1 false
3100+
; CHECK-NEXT: ret i1 [[RET]]
3101+
;
3102+
entry:
3103+
%cmp1 = icmp sgt i32 %a, -1
3104+
%logical_and = select i1 %other_cond, i1 %cmp1, i1 false
3105+
%cmp2 = icmp slt i32 %a, %b
3106+
%ret = select i1 %logical_and, i1 %cmp2, i1 false
3107+
ret i1 %ret
3108+
}

llvm/test/Transforms/InstCombine/logical-select.ll

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,3 +1303,222 @@ define i1 @logical_or_and_with_common_not_op_variant5(i1 %a) {
13031303
%or = select i1 %a, i1 true, i1 %and
13041304
ret i1 %or
13051305
}
1306+
1307+
define i1 @reduce_logical_and1(i1 %a, i32 %b, i32 %c) {
1308+
; CHECK-LABEL: @reduce_logical_and1(
1309+
; CHECK-NEXT: bb:
1310+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1311+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1312+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 [[CMP1]], i1 false
1313+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[CMP]], i1 false
1314+
; CHECK-NEXT: ret i1 [[AND2]]
1315+
;
1316+
bb:
1317+
%cmp = icmp slt i32 %b, 6
1318+
%cmp1 = icmp sgt i32 %c, %b
1319+
%and1 = select i1 %a, i1 %cmp1, i1 false
1320+
%and2 = select i1 %and1, i1 %cmp, i1 false
1321+
ret i1 %and2
1322+
}
1323+
1324+
define i1 @reduce_logical_and2(i1 %a, i1 %b, i1 %c) {
1325+
; CHECK-LABEL: @reduce_logical_and2(
1326+
; CHECK-NEXT: bb:
1327+
; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[C:%.*]], [[B:%.*]]
1328+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1:%.*]], i1 [[CMP]], i1 false
1329+
; CHECK-NEXT: [[AND3:%.*]] = select i1 [[AND2]], i1 [[B]], i1 false
1330+
; CHECK-NEXT: ret i1 [[AND3]]
1331+
;
1332+
bb:
1333+
%or = xor i1 %c, %b
1334+
%and1 = select i1 %a, i1 %or, i1 false
1335+
%and2 = select i1 %and1, i1 %b, i1 false
1336+
ret i1 %and2
1337+
}
1338+
1339+
define i1 @reduce_logical_and3(i1 %a, i32 %b, i32 noundef %c) {
1340+
; CHECK-LABEL: @reduce_logical_and3(
1341+
; CHECK-NEXT: bb:
1342+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1343+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1344+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 [[CMP]], i1 false
1345+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[CMP1]], i1 false
1346+
; CHECK-NEXT: ret i1 [[AND2]]
1347+
;
1348+
bb:
1349+
%cmp = icmp slt i32 %b, 6
1350+
%cmp1 = icmp sgt i32 %c, %b
1351+
%and1 = select i1 %a, i1 %cmp, i1 false
1352+
%and2 = select i1 %and1, i1 %cmp1, i1 false
1353+
ret i1 %and2
1354+
}
1355+
1356+
define i1 @reduce_logical_or1(i1 %a, i32 %b, i32 %c) {
1357+
; CHECK-LABEL: @reduce_logical_or1(
1358+
; CHECK-NEXT: bb:
1359+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1360+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1361+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[CMP1]]
1362+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 [[CMP]]
1363+
; CHECK-NEXT: ret i1 [[AND2]]
1364+
;
1365+
bb:
1366+
%cmp = icmp slt i32 %b, 6
1367+
%cmp1 = icmp sgt i32 %c, %b
1368+
%and1 = select i1 %a, i1 true, i1 %cmp1
1369+
%and2 = select i1 %and1, i1 true, i1 %cmp
1370+
ret i1 %and2
1371+
}
1372+
1373+
define i1 @reduce_logical_or2(i1 %a, i1 %b, i1 %c) {
1374+
; CHECK-LABEL: @reduce_logical_or2(
1375+
; CHECK-NEXT: bb:
1376+
; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[C:%.*]], [[B:%.*]]
1377+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1:%.*]], i1 true, i1 [[CMP]]
1378+
; CHECK-NEXT: [[AND3:%.*]] = select i1 [[AND2]], i1 true, i1 [[B]]
1379+
; CHECK-NEXT: ret i1 [[AND3]]
1380+
;
1381+
bb:
1382+
%or = xor i1 %c, %b
1383+
%and1 = select i1 %a, i1 true, i1 %or
1384+
%and2 = select i1 %and1, i1 true, i1 %b
1385+
ret i1 %and2
1386+
}
1387+
1388+
define i1 @reduce_logical_or3(i1 %a, i32 %b, i32 noundef %c) {
1389+
; CHECK-LABEL: @reduce_logical_or3(
1390+
; CHECK-NEXT: bb:
1391+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1392+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1393+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[CMP]]
1394+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 [[CMP1]]
1395+
; CHECK-NEXT: ret i1 [[AND2]]
1396+
;
1397+
bb:
1398+
%cmp = icmp slt i32 %b, 6
1399+
%cmp1 = icmp sgt i32 %c, %b
1400+
%and1 = select i1 %a, i1 true, i1 %cmp
1401+
%and2 = select i1 %and1, i1 true, i1 %cmp1
1402+
ret i1 %and2
1403+
}
1404+
1405+
define i1 @reduce_logical_and_fail1(i1 %a, i32 %b, i32 %c) {
1406+
; CHECK-LABEL: @reduce_logical_and_fail1(
1407+
; CHECK-NEXT: bb:
1408+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1409+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1410+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 [[CMP]], i1 false
1411+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[CMP1]], i1 false
1412+
; CHECK-NEXT: ret i1 [[AND2]]
1413+
;
1414+
bb:
1415+
%cmp = icmp slt i32 %b, 6
1416+
%cmp1 = icmp sgt i32 %c, %b
1417+
%and1 = select i1 %a, i1 %cmp, i1 false
1418+
%and2 = select i1 %and1, i1 %cmp1, i1 false
1419+
ret i1 %and2
1420+
}
1421+
1422+
define i1 @reduce_logical_and_fail2(i1 %a, i32 %b, i32 %c) {
1423+
; CHECK-LABEL: @reduce_logical_and_fail2(
1424+
; CHECK-NEXT: bb:
1425+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1426+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], 7
1427+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 [[CMP]], i1 false
1428+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[CMP1]], i1 false
1429+
; CHECK-NEXT: ret i1 [[AND2]]
1430+
;
1431+
bb:
1432+
%cmp = icmp slt i32 %b, 6
1433+
%cmp1 = icmp sgt i32 %c, 7
1434+
%and1 = select i1 %a, i1 %cmp, i1 false
1435+
%and2 = select i1 %and1, i1 %cmp1, i1 false
1436+
ret i1 %and2
1437+
}
1438+
1439+
define i1 @reduce_logical_or_fail1(i1 %a, i32 %b, i32 %c) {
1440+
; CHECK-LABEL: @reduce_logical_or_fail1(
1441+
; CHECK-NEXT: bb:
1442+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1443+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1444+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[CMP]]
1445+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 [[CMP1]]
1446+
; CHECK-NEXT: ret i1 [[AND2]]
1447+
;
1448+
bb:
1449+
%cmp = icmp slt i32 %b, 6
1450+
%cmp1 = icmp sgt i32 %c, %b
1451+
%and1 = select i1 %a, i1 true, i1 %cmp
1452+
%and2 = select i1 %and1, i1 true, i1 %cmp1
1453+
ret i1 %and2
1454+
}
1455+
1456+
define i1 @reduce_logical_or_fail2(i1 %a, i32 %b, i32 %c) {
1457+
; CHECK-LABEL: @reduce_logical_or_fail2(
1458+
; CHECK-NEXT: bb:
1459+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1460+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], 7
1461+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[CMP]]
1462+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 [[CMP1]]
1463+
; CHECK-NEXT: ret i1 [[AND2]]
1464+
;
1465+
bb:
1466+
%cmp = icmp slt i32 %b, 6
1467+
%cmp1 = icmp sgt i32 %c, 7
1468+
%and1 = select i1 %a, i1 true, i1 %cmp
1469+
%and2 = select i1 %and1, i1 true, i1 %cmp1
1470+
ret i1 %and2
1471+
}
1472+
1473+
define i1 @reduce_logical_and_multiuse(i1 %a, i32 %b, i32 %c) {
1474+
; CHECK-LABEL: @reduce_logical_and_multiuse(
1475+
; CHECK-NEXT: bb:
1476+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1477+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1478+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 [[CMP1]], i1 false
1479+
; CHECK-NEXT: call void @use1(i1 [[AND1]])
1480+
; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[CMP]], i1 false
1481+
; CHECK-NEXT: ret i1 [[AND2]]
1482+
;
1483+
bb:
1484+
%cmp = icmp slt i32 %b, 6
1485+
%cmp1 = icmp sgt i32 %c, %b
1486+
%and1 = select i1 %a, i1 %cmp1, i1 false
1487+
call void @use1(i1 %and1)
1488+
%and2 = select i1 %and1, i1 %cmp, i1 false
1489+
ret i1 %and2
1490+
}
1491+
1492+
define i1 @reduce_bitwise_and1(i1 %a, i32 %b, i32 %c) {
1493+
; CHECK-LABEL: @reduce_bitwise_and1(
1494+
; CHECK-NEXT: bb:
1495+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1496+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1497+
; CHECK-NEXT: [[AND1:%.*]] = or i1 [[CMP1]], [[A:%.*]]
1498+
; CHECK-NEXT: [[AND2:%.*]] = and i1 [[AND1]], [[CMP]]
1499+
; CHECK-NEXT: ret i1 [[AND2]]
1500+
;
1501+
bb:
1502+
%cmp = icmp slt i32 %b, 6
1503+
%cmp1 = icmp sgt i32 %c, %b
1504+
%and1 = or i1 %a, %cmp1
1505+
%and2 = select i1 %and1, i1 %cmp, i1 false
1506+
ret i1 %and2
1507+
}
1508+
1509+
define i1 @reduce_bitwise_and2(i1 %a, i32 %b, i32 %c) {
1510+
; CHECK-LABEL: @reduce_bitwise_and2(
1511+
; CHECK-NEXT: bb:
1512+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[B:%.*]], 6
1513+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[C:%.*]], [[B]]
1514+
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[A:%.*]], i1 [[CMP1]], i1 false
1515+
; CHECK-NEXT: [[AND2:%.*]] = or i1 [[AND1]], [[CMP]]
1516+
; CHECK-NEXT: ret i1 [[AND2]]
1517+
;
1518+
bb:
1519+
%cmp = icmp slt i32 %b, 6
1520+
%cmp1 = icmp sgt i32 %c, %b
1521+
%and1 = select i1 %a, i1 %cmp1, i1 false
1522+
%and2 = or i1 %and1, %cmp
1523+
ret i1 %and2
1524+
}

0 commit comments

Comments
 (0)