@@ -1456,6 +1456,64 @@ define <2 x i32> @select_icmp_slt0_xor_vec(<2 x i32> %x) {
1456
1456
ret <2 x i32 > %x.xor
1457
1457
}
1458
1458
1459
+ define i8 @select_icmp_eq_mul_and (i8 noundef %a , i8 %b ) {
1460
+ ; CHECK-LABEL: @select_icmp_eq_mul_and(
1461
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A:%.*]], 1
1462
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
1463
+ ; CHECK-NEXT: [[DIV7:%.*]] = and i8 [[A]], -2
1464
+ ; CHECK-NEXT: [[MUL:%.*]] = mul i8 [[DIV7]], [[DIV7]]
1465
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP]], i8 [[MUL]], i8 [[B:%.*]]
1466
+ ; CHECK-NEXT: ret i8 [[RETVAL_0]]
1467
+ ;
1468
+ %1 = and i8 %a , 1
1469
+ %cmp = icmp eq i8 %1 , 0
1470
+ %div7 = and i8 %a , -2
1471
+ %mul = mul i8 %div7 , %div7
1472
+ %retval.0 = select i1 %cmp , i8 %mul , i8 %b
1473
+ ret i8 %retval.0
1474
+ }
1475
+
1476
+ define i8 @select_icmp_eq_and (i8 noundef %a , i8 %b ) {
1477
+ ; CHECK-LABEL: @select_icmp_eq_and(
1478
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A:%.*]], 1
1479
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
1480
+ ; CHECK-NEXT: [[DIV7:%.*]] = and i8 [[A]], -2
1481
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP]], i8 [[DIV7]], i8 [[B:%.*]]
1482
+ ; CHECK-NEXT: ret i8 [[RETVAL_0]]
1483
+ ;
1484
+ %1 = and i8 %a , 1
1485
+ %cmp = icmp eq i8 %1 , 0
1486
+ %div7 = and i8 %a , -2
1487
+ %retval.0 = select i1 %cmp , i8 %div7 , i8 %b
1488
+ ret i8 %retval.0
1489
+ }
1490
+
1491
+ ;negative test
1492
+ define i8 @select_and (i8 noundef %a , i8 %b , i1 %cmp ) {
1493
+ ; CHECK-LABEL: @select_and(
1494
+ ; CHECK-NEXT: [[DIV7:%.*]] = and i8 [[A:%.*]], -2
1495
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP:%.*]], i8 [[DIV7]], i8 [[B:%.*]]
1496
+ ; CHECK-NEXT: ret i8 [[RETVAL_0]]
1497
+ ;
1498
+ %div7 = and i8 %a , -2
1499
+ %retval.0 = select i1 %cmp , i8 %div7 , i8 %b
1500
+ ret i8 %retval.0
1501
+ }
1502
+
1503
+ ;negative test
1504
+ define i8 @select_mul_and (i8 noundef %a , i8 %b , i1 %cmp ) {
1505
+ ; CHECK-LABEL: @select_mul_and(
1506
+ ; CHECK-NEXT: [[DIV7:%.*]] = and i8 [[A:%.*]], -2
1507
+ ; CHECK-NEXT: [[MUL:%.*]] = mul i8 [[DIV7]], [[DIV7]]
1508
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = select i1 [[CMP:%.*]], i8 [[MUL]], i8 [[B:%.*]]
1509
+ ; CHECK-NEXT: ret i8 [[RETVAL_0]]
1510
+ ;
1511
+ %div7 = and i8 %a , -2
1512
+ %mul = mul i8 %div7 , %div7
1513
+ %retval.0 = select i1 %cmp , i8 %mul , i8 %b
1514
+ ret i8 %retval.0
1515
+ }
1516
+
1459
1517
define <4 x i32 > @canonicalize_to_shuffle (<4 x i32 > %a , <4 x i32 > %b ) {
1460
1518
; CHECK-LABEL: @canonicalize_to_shuffle(
1461
1519
; CHECK-NEXT: [[SEL:%.*]] = shufflevector <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], <4 x i32> <i32 0, i32 5, i32 6, i32 3>
0 commit comments