@@ -1426,6 +1426,85 @@ define i1 @icmp_ne_sext_ne_otherwise_i128(i128 %a) {
1426
1426
ret i1 %cmp1
1427
1427
}
1428
1428
1429
+ ; Negative tests with non-equality predicates
1430
+ define i1 @icmp_ne_sext_sgt_zero_nofold (i32 %a ) {
1431
+ ; CHECK-LABEL: @icmp_ne_sext_sgt_zero_nofold(
1432
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A:%.*]], 0
1433
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1434
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1435
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1436
+ ;
1437
+ %cmp = icmp sgt i32 %a , 0
1438
+ %conv = sext i1 %cmp to i32
1439
+ %cmp1 = icmp ne i32 %conv , %a
1440
+ ret i1 %cmp1
1441
+ }
1442
+
1443
+ define i1 @icmp_slt_sext_ne_zero_nofold (i32 %a ) {
1444
+ ; CHECK-LABEL: @icmp_slt_sext_ne_zero_nofold(
1445
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 0
1446
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1447
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[CONV]], [[A]]
1448
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1449
+ ;
1450
+ %cmp = icmp ne i32 %a , 0
1451
+ %conv = sext i1 %cmp to i32
1452
+ %cmp1 = icmp slt i32 %conv , %a
1453
+ ret i1 %cmp1
1454
+ }
1455
+
1456
+ define i1 @icmp_ne_sext_slt_allones_nofold (i32 %a ) {
1457
+ ; CHECK-LABEL: @icmp_ne_sext_slt_allones_nofold(
1458
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A:%.*]], -1
1459
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1460
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1461
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1462
+ ;
1463
+ %cmp = icmp slt i32 %a , -1
1464
+ %conv = sext i1 %cmp to i32
1465
+ %cmp1 = icmp ne i32 %conv , %a
1466
+ ret i1 %cmp1
1467
+ }
1468
+
1469
+ define i1 @icmp_slt_sext_ne_allones_nofold (i32 %a ) {
1470
+ ; CHECK-LABEL: @icmp_slt_sext_ne_allones_nofold(
1471
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], -1
1472
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1473
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[CONV]], [[A]]
1474
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1475
+ ;
1476
+ %cmp = icmp ne i32 %a , -1
1477
+ %conv = sext i1 %cmp to i32
1478
+ %cmp1 = icmp slt i32 %conv , %a
1479
+ ret i1 %cmp1
1480
+ }
1481
+
1482
+ define i1 @icmp_ne_sext_slt_otherwise_nofold (i32 %a ) {
1483
+ ; CHECK-LABEL: @icmp_ne_sext_slt_otherwise_nofold(
1484
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A:%.*]], 2
1485
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1486
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1487
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1488
+ ;
1489
+ %cmp = icmp slt i32 %a , 2
1490
+ %conv = sext i1 %cmp to i32
1491
+ %cmp1 = icmp ne i32 %conv , %a
1492
+ ret i1 %cmp1
1493
+ }
1494
+
1495
+ define i1 @icmp_slt_sext_ne_otherwise_nofold (i32 %a ) {
1496
+ ; CHECK-LABEL: @icmp_slt_sext_ne_otherwise_nofold(
1497
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 2
1498
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1499
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[CONV]], [[A]]
1500
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1501
+ ;
1502
+ %cmp = icmp ne i32 %a , 2
1503
+ %conv = sext i1 %cmp to i32
1504
+ %cmp1 = icmp slt i32 %conv , %a
1505
+ ret i1 %cmp1
1506
+ }
1507
+
1429
1508
; tests from PR59555
1430
1509
define i1 @isFloat (i64 %0 ) {
1431
1510
; CHECK-LABEL: @isFloat(
0 commit comments