Skip to content

Commit d10ee89

Browse files
committed
[InstCombine] Add sext version of pre-commit tests for PR65852. NFC.
1 parent 1645b5d commit d10ee89

File tree

1 file changed

+221
-0
lines changed

1 file changed

+221
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-range.ll

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,227 @@ define <2 x i1> @icmp_ne_zext_eq_non_boolean_vec(<2 x i32> %a) {
12561256
ret <2 x i1> %cmp1
12571257
}
12581258

1259+
define i1 @icmp_ne_sext_eq_zero(i32 %a) {
1260+
; CHECK-LABEL: @icmp_ne_sext_eq_zero(
1261+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
1262+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1263+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1264+
; CHECK-NEXT: ret i1 [[CMP1]]
1265+
;
1266+
%cmp = icmp eq i32 %a, 0
1267+
%conv = sext i1 %cmp to i32
1268+
%cmp1 = icmp ne i32 %conv, %a
1269+
ret i1 %cmp1
1270+
}
1271+
1272+
define i1 @icmp_ne_sext_ne_zero(i32 %a) {
1273+
; CHECK-LABEL: @icmp_ne_sext_ne_zero(
1274+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 0
1275+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1276+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1277+
; CHECK-NEXT: ret i1 [[CMP1]]
1278+
;
1279+
%cmp = icmp ne i32 %a, 0
1280+
%conv = sext i1 %cmp to i32
1281+
%cmp1 = icmp ne i32 %conv, %a
1282+
ret i1 %cmp1
1283+
}
1284+
1285+
define i1 @icmp_eq_sext_eq_zero(i32 %a) {
1286+
; CHECK-LABEL: @icmp_eq_sext_eq_zero(
1287+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
1288+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1289+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1290+
; CHECK-NEXT: ret i1 [[CMP1]]
1291+
;
1292+
%cmp = icmp eq i32 %a, 0
1293+
%conv = sext i1 %cmp to i32
1294+
%cmp1 = icmp eq i32 %conv, %a
1295+
ret i1 %cmp1
1296+
}
1297+
1298+
define i1 @icmp_eq_sext_ne_zero(i32 %a) {
1299+
; CHECK-LABEL: @icmp_eq_sext_ne_zero(
1300+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 0
1301+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1302+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1303+
; CHECK-NEXT: ret i1 [[CMP1]]
1304+
;
1305+
%cmp = icmp ne i32 %a, 0
1306+
%conv = sext i1 %cmp to i32
1307+
%cmp1 = icmp eq i32 %conv, %a
1308+
ret i1 %cmp1
1309+
}
1310+
1311+
define i1 @icmp_ne_sext_eq_allone(i32 %a) {
1312+
; CHECK-LABEL: @icmp_ne_sext_eq_allone(
1313+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], -1
1314+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1315+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1316+
; CHECK-NEXT: ret i1 [[CMP1]]
1317+
;
1318+
%cmp = icmp eq i32 %a, -1
1319+
%conv = sext i1 %cmp to i32
1320+
%cmp1 = icmp ne i32 %conv, %a
1321+
ret i1 %cmp1
1322+
}
1323+
1324+
define i1 @icmp_ne_sext_ne_allone(i32 %a) {
1325+
; CHECK-LABEL: @icmp_ne_sext_ne_allone(
1326+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], -1
1327+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1328+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1329+
; CHECK-NEXT: ret i1 [[CMP1]]
1330+
;
1331+
%cmp = icmp ne i32 %a, -1
1332+
%conv = sext i1 %cmp to i32
1333+
%cmp1 = icmp ne i32 %conv, %a
1334+
ret i1 %cmp1
1335+
}
1336+
1337+
define i1 @icmp_eq_sext_eq_allone(i32 %a) {
1338+
; CHECK-LABEL: @icmp_eq_sext_eq_allone(
1339+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], -1
1340+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1341+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1342+
; CHECK-NEXT: ret i1 [[CMP1]]
1343+
;
1344+
%cmp = icmp eq i32 %a, -1
1345+
%conv = sext i1 %cmp to i32
1346+
%cmp1 = icmp eq i32 %conv, %a
1347+
ret i1 %cmp1
1348+
}
1349+
1350+
define i1 @icmp_eq_sext_ne_allone(i32 %a) {
1351+
; CHECK-LABEL: @icmp_eq_sext_ne_allone(
1352+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], -1
1353+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1354+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1355+
; CHECK-NEXT: ret i1 [[CMP1]]
1356+
;
1357+
%cmp = icmp ne i32 %a, -1
1358+
%conv = sext i1 %cmp to i32
1359+
%cmp1 = icmp eq i32 %conv, %a
1360+
ret i1 %cmp1
1361+
}
1362+
1363+
define i1 @icmp_ne_sext_eq_otherwise(i32 %a) {
1364+
; CHECK-LABEL: @icmp_ne_sext_eq_otherwise(
1365+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 2
1366+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1367+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1368+
; CHECK-NEXT: ret i1 [[CMP1]]
1369+
;
1370+
%cmp = icmp eq i32 %a, 2
1371+
%conv = sext i1 %cmp to i32
1372+
%cmp1 = icmp ne i32 %conv, %a
1373+
ret i1 %cmp1
1374+
}
1375+
1376+
define i1 @icmp_ne_sext_ne_otherwise(i32 %a) {
1377+
; CHECK-LABEL: @icmp_ne_sext_ne_otherwise(
1378+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 2
1379+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1380+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1381+
; CHECK-NEXT: ret i1 [[CMP1]]
1382+
;
1383+
%cmp = icmp ne i32 %a, 2
1384+
%conv = sext i1 %cmp to i32
1385+
%cmp1 = icmp ne i32 %conv, %a
1386+
ret i1 %cmp1
1387+
}
1388+
1389+
define i1 @icmp_eq_sext_eq_otherwise(i32 %a) {
1390+
; CHECK-LABEL: @icmp_eq_sext_eq_otherwise(
1391+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 2
1392+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1393+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1394+
; CHECK-NEXT: ret i1 [[CMP1]]
1395+
;
1396+
%cmp = icmp eq i32 %a, 2
1397+
%conv = sext i1 %cmp to i32
1398+
%cmp1 = icmp eq i32 %conv, %a
1399+
ret i1 %cmp1
1400+
}
1401+
1402+
define i1 @icmp_eq_sext_ne_otherwise(i32 %a) {
1403+
; CHECK-LABEL: @icmp_eq_sext_ne_otherwise(
1404+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 2
1405+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1406+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1407+
; CHECK-NEXT: ret i1 [[CMP1]]
1408+
;
1409+
%cmp = icmp ne i32 %a, 2
1410+
%conv = sext i1 %cmp to i32
1411+
%cmp1 = icmp eq i32 %conv, %a
1412+
ret i1 %cmp1
1413+
}
1414+
1415+
define <2 x i1> @icmp_ne_sext_eq_zero_vec(<2 x i32> %a) {
1416+
; CHECK-LABEL: @icmp_ne_sext_eq_zero_vec(
1417+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], zeroinitializer
1418+
; CHECK-NEXT: [[CONV:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
1419+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1420+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1421+
;
1422+
%cmp = icmp eq <2 x i32> %a, <i32 0, i32 0>
1423+
%conv = sext <2 x i1> %cmp to <2 x i32>
1424+
%cmp1 = icmp ne <2 x i32> %conv, %a
1425+
ret <2 x i1> %cmp1
1426+
}
1427+
1428+
define <2 x i1> @icmp_ne_sext_ne_zero_vec(<2 x i32> %a) {
1429+
; CHECK-LABEL: @icmp_ne_sext_ne_zero_vec(
1430+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[A:%.*]], zeroinitializer
1431+
; CHECK-NEXT: [[CONV:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
1432+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1433+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1434+
;
1435+
%cmp = icmp ne <2 x i32> %a, <i32 0, i32 0>
1436+
%conv = sext <2 x i1> %cmp to <2 x i32>
1437+
%cmp1 = icmp ne <2 x i32> %conv, %a
1438+
ret <2 x i1> %cmp1
1439+
}
1440+
1441+
define <2 x i1> @icmp_ne_sext_eq_allone_vec(<2 x i32> %a) {
1442+
; CHECK-LABEL: @icmp_ne_sext_eq_allone_vec(
1443+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 -1, i32 -1>
1444+
; CHECK-NEXT: [[CONV:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
1445+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1446+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1447+
;
1448+
%cmp = icmp eq <2 x i32> %a, <i32 -1, i32 -1>
1449+
%conv = sext <2 x i1> %cmp to <2 x i32>
1450+
%cmp1 = icmp ne <2 x i32> %conv, %a
1451+
ret <2 x i1> %cmp1
1452+
}
1453+
1454+
define <2 x i1> @icmp_ne_sext_ne_allone_vec(<2 x i32> %a) {
1455+
; CHECK-LABEL: @icmp_ne_sext_ne_allone_vec(
1456+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[A:%.*]], <i32 -1, i32 -1>
1457+
; CHECK-NEXT: [[CONV:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
1458+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1459+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1460+
;
1461+
%cmp = icmp ne <2 x i32> %a, <i32 -1, i32 -1>
1462+
%conv = sext <2 x i1> %cmp to <2 x i32>
1463+
%cmp1 = icmp ne <2 x i32> %conv, %a
1464+
ret <2 x i1> %cmp1
1465+
}
1466+
1467+
define <2 x i1> @icmp_ne_sext_eq_otherwise_vec(<2 x i32> %a) {
1468+
; CHECK-LABEL: @icmp_ne_sext_eq_otherwise_vec(
1469+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 2, i32 2>
1470+
; CHECK-NEXT: [[CONV:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
1471+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1472+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1473+
;
1474+
%cmp = icmp eq <2 x i32> %a, <i32 2, i32 2>
1475+
%conv = sext <2 x i1> %cmp to <2 x i32>
1476+
%cmp1 = icmp ne <2 x i32> %conv, %a
1477+
ret <2 x i1> %cmp1
1478+
}
1479+
12591480
!0 = !{i32 1, i32 6}
12601481
!1 = !{i32 0, i32 6}
12611482
!2 = !{i8 0, i8 1}

0 commit comments

Comments
 (0)