@@ -667,7 +667,7 @@ define i1 @test39(i1 %cond, double %x) {
667
667
; CHECK-LABEL: @test39(
668
668
; CHECK-NEXT: ret i1 true
669
669
;
670
- %s = select i1 %cond , double %x , double 0x7FF0000000000000 ; RHS = +infty
670
+ %s = select i1 %cond , double %x , double 0x7FF0000000000000 ; RHS = +infty
671
671
%cmp = fcmp ule double %x , %s
672
672
ret i1 %cmp
673
673
}
@@ -1364,7 +1364,7 @@ define i32 @PR23757_ne(i32 %x, ptr %p) {
1364
1364
; CHECK-NEXT: ret i32 -2147483648
1365
1365
;
1366
1366
%cmp = icmp ne i32 %x , 2147483647
1367
- store i1 %cmp , ptr %p ; thwart predicate canonicalization
1367
+ store i1 %cmp , ptr %p ; thwart predicate canonicalization
1368
1368
%add = add nsw i32 %x , 1
1369
1369
%sel = select i1 %cmp , i32 -2147483648 , i32 %add
1370
1370
ret i32 %sel
@@ -1378,7 +1378,7 @@ define i32 @PR23757_ne_swapped(i32 %x, ptr %p) {
1378
1378
; CHECK-NEXT: ret i32 [[ADD]]
1379
1379
;
1380
1380
%cmp = icmp ne i32 %x , 2147483647
1381
- store i1 %cmp , ptr %p ; thwart predicate canonicalization
1381
+ store i1 %cmp , ptr %p ; thwart predicate canonicalization
1382
1382
%add = add nsw i32 %x , 1
1383
1383
%sel = select i1 %cmp , i32 %add , i32 -2147483648
1384
1384
ret i32 %sel
@@ -2809,6 +2809,46 @@ define <2 x i8> @select_replacement_add_eq_vec_undef(<2 x i8> %x, <2 x i8> %y) {
2809
2809
ret <2 x i8 > %sel
2810
2810
}
2811
2811
2812
+ define <2 x i8 > @select_replacement_add_eq_vec_undef_okay (<2 x i8 > %x , <2 x i8 > %y ) {
2813
+ ; CHECK-LABEL: @select_replacement_add_eq_vec_undef_okay(
2814
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[X:%.*]], <i8 1, i8 1>
2815
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> <i8 2, i8 undef>, <2 x i8> [[Y:%.*]]
2816
+ ; CHECK-NEXT: ret <2 x i8> [[SEL]]
2817
+ ;
2818
+ %cmp = icmp eq <2 x i8 > %x , <i8 1 , i8 1 >
2819
+ %add = add <2 x i8 > %x , <i8 1 , i8 undef >
2820
+ %sel = select <2 x i1 > %cmp , <2 x i8 > %add , <2 x i8 > %y
2821
+ ret <2 x i8 > %sel
2822
+ }
2823
+
2824
+
2825
+ define <2 x i8 > @select_replacement_add_eq_vec_undef_okay_todo (<2 x i8 > %x , <2 x i8 > %y ) {
2826
+ ; CHECK-LABEL: @select_replacement_add_eq_vec_undef_okay_todo(
2827
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[X:%.*]], <i8 1, i8 undef>
2828
+ ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 1, i8 undef>
2829
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> [[Y:%.*]]
2830
+ ; CHECK-NEXT: ret <2 x i8> [[SEL]]
2831
+ ;
2832
+ %cmp = icmp eq <2 x i8 > %x , <i8 1 , i8 undef >
2833
+ %add = add <2 x i8 > %x , <i8 1 , i8 undef >
2834
+ %sel = select <2 x i1 > %cmp , <2 x i8 > %add , <2 x i8 > %y
2835
+ ret <2 x i8 > %sel
2836
+ }
2837
+
2838
+ define <2 x i8 > @select_replacement_xor_eq_vec (<2 x i8 > %x , <2 x i8 > %y , <2 x i8 > %z ) {
2839
+ ; CHECK-LABEL: @select_replacement_xor_eq_vec(
2840
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[X:%.*]], [[Y:%.*]]
2841
+ ; CHECK-NEXT: [[ADD:%.*]] = xor <2 x i8> [[X]], [[Y]]
2842
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> [[Z:%.*]]
2843
+ ; CHECK-NEXT: ret <2 x i8> [[SEL]]
2844
+ ;
2845
+ %cmp = icmp eq <2 x i8 > %x , %y
2846
+ %add = xor <2 x i8 > %x , %y
2847
+ %sel = select <2 x i1 > %cmp , <2 x i8 > %add , <2 x i8 > %z
2848
+ ret <2 x i8 > %sel
2849
+ }
2850
+
2851
+
2812
2852
define i8 @select_replacement_add_ne (i8 %x , i8 %y ) {
2813
2853
; CHECK-LABEL: @select_replacement_add_ne(
2814
2854
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[X:%.*]], 1
0 commit comments