@@ -1595,8 +1595,8 @@ define <2 x i8> @flip_masked_bit_uniform(<2 x i8> %A) {
1595
1595
1596
1596
define <2 x i8 > @flip_masked_bit_undef (<2 x i8 > %A ) {
1597
1597
; CHECK-LABEL: @flip_masked_bit_undef(
1598
- ; CHECK-NEXT: [[B :%.*]] = add <2 x i8> [[A:%.*]], <i8 16 , i8 undef >
1599
- ; CHECK-NEXT: [[C:%.*]] = and <2 x i8> [[B ]], <i8 16, i8 undef>
1598
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor <2 x i8> [[A:%.*]], <i8 -1 , i8 -1 >
1599
+ ; CHECK-NEXT: [[C:%.*]] = and <2 x i8> [[TMP1 ]], <i8 16, i8 undef>
1600
1600
; CHECK-NEXT: ret <2 x i8> [[C]]
1601
1601
;
1602
1602
%B = add <2 x i8 > %A , <i8 16 , i8 undef >
@@ -1606,8 +1606,8 @@ define <2 x i8> @flip_masked_bit_undef(<2 x i8> %A) {
1606
1606
1607
1607
define <2 x i8 > @flip_masked_bit_nonuniform (<2 x i8 > %A ) {
1608
1608
; CHECK-LABEL: @flip_masked_bit_nonuniform(
1609
- ; CHECK-NEXT: [[B :%.*]] = add <2 x i8> [[A:%.*]], <i8 16 , i8 4 >
1610
- ; CHECK-NEXT: [[C:%.*]] = and <2 x i8> [[B ]], <i8 16, i8 4>
1609
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor <2 x i8> [[A:%.*]], <i8 -1 , i8 -1 >
1610
+ ; CHECK-NEXT: [[C:%.*]] = and <2 x i8> [[TMP1 ]], <i8 16, i8 4>
1611
1611
; CHECK-NEXT: ret <2 x i8> [[C]]
1612
1612
;
1613
1613
%B = add <2 x i8 > %A , <i8 16 , i8 4 >
@@ -2553,8 +2553,8 @@ define i32 @canonicalize_and_add_power2_or_zero(i32 %x, i32 %y) {
2553
2553
; CHECK-NEXT: [[P2:%.*]] = and i32 [[NY]], [[Y]]
2554
2554
; CHECK-NEXT: call void @use32(i32 [[P2]])
2555
2555
; CHECK-NEXT: [[X2:%.*]] = mul i32 [[X:%.*]], [[X]]
2556
- ; CHECK-NEXT: [[VAL :%.*]] = add i32 [[X2]], [[P2]]
2557
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[VAL ]], [[P2 ]]
2556
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[X2]], -1
2557
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2 ]], [[TMP1 ]]
2558
2558
; CHECK-NEXT: ret i32 [[AND]]
2559
2559
;
2560
2560
%ny = sub i32 0 , %y
@@ -2572,8 +2572,8 @@ define i32 @canonicalize_and_sub_power2_or_zero(i32 %x, i32 %y) {
2572
2572
; CHECK-NEXT: [[NY:%.*]] = sub i32 0, [[Y:%.*]]
2573
2573
; CHECK-NEXT: [[P2:%.*]] = and i32 [[NY]], [[Y]]
2574
2574
; CHECK-NEXT: call void @use32(i32 [[P2]])
2575
- ; CHECK-NEXT: [[VAL :%.*]] = sub i32 [[X:%.*]], [[P2]]
2576
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[VAL ]], [[P2 ]]
2575
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[X:%.*]], -1
2576
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2 ]], [[TMP1 ]]
2577
2577
; CHECK-NEXT: ret i32 [[AND]]
2578
2578
;
2579
2579
%ny = sub i32 0 , %y
@@ -2590,8 +2590,8 @@ define i32 @canonicalize_and_add_power2_or_zero_commuted1(i32 %x, i32 %y) {
2590
2590
; CHECK-NEXT: [[NY:%.*]] = sub i32 0, [[Y:%.*]]
2591
2591
; CHECK-NEXT: [[P2:%.*]] = and i32 [[NY]], [[Y]]
2592
2592
; CHECK-NEXT: call void @use32(i32 [[P2]])
2593
- ; CHECK-NEXT: [[VAL :%.*]] = add i32 [[P2]], [[ X:%.*]]
2594
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[VAL ]], [[P2 ]]
2593
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[X:%.*]], -1
2594
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2 ]], [[TMP1 ]]
2595
2595
; CHECK-NEXT: ret i32 [[AND]]
2596
2596
;
2597
2597
%ny = sub i32 0 , %y
@@ -2609,8 +2609,8 @@ define i32 @canonicalize_and_add_power2_or_zero_commuted2(i32 %x, i32 %y) {
2609
2609
; CHECK-NEXT: [[P2:%.*]] = and i32 [[NY]], [[Y]]
2610
2610
; CHECK-NEXT: call void @use32(i32 [[P2]])
2611
2611
; CHECK-NEXT: [[X2:%.*]] = mul i32 [[X:%.*]], [[X]]
2612
- ; CHECK-NEXT: [[VAL :%.*]] = add i32 [[X2]], [[P2]]
2613
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2]], [[VAL ]]
2612
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[X2]], -1
2613
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2]], [[TMP1 ]]
2614
2614
; CHECK-NEXT: ret i32 [[AND]]
2615
2615
;
2616
2616
%ny = sub i32 0 , %y
@@ -2628,8 +2628,8 @@ define i32 @canonicalize_and_add_power2_or_zero_commuted3(i32 %x, i32 %y) {
2628
2628
; CHECK-NEXT: [[NY:%.*]] = sub i32 0, [[Y:%.*]]
2629
2629
; CHECK-NEXT: [[P2:%.*]] = and i32 [[NY]], [[Y]]
2630
2630
; CHECK-NEXT: call void @use32(i32 [[P2]])
2631
- ; CHECK-NEXT: [[VAL :%.*]] = add i32 [[P2]], [[ X:%.*]]
2632
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2]], [[VAL ]]
2631
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[X:%.*]], -1
2632
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[P2]], [[TMP1 ]]
2633
2633
; CHECK-NEXT: ret i32 [[AND]]
2634
2634
;
2635
2635
%ny = sub i32 0 , %y
0 commit comments