@@ -2787,8 +2787,7 @@ define <2 x i8> @select_replacement_add_eq_vec_nonuniform(<2 x i8> %x, <2 x i8>
2787
2787
define <2 x i8 > @select_replacement_add_eq_vec_poison (<2 x i8 > %x , <2 x i8 > %y ) {
2788
2788
; CHECK-LABEL: @select_replacement_add_eq_vec_poison(
2789
2789
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[X:%.*]], <i8 1, i8 poison>
2790
- ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 1, i8 1>
2791
- ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> [[Y:%.*]]
2790
+ ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> <i8 2, i8 poison>, <2 x i8> [[Y:%.*]]
2792
2791
; CHECK-NEXT: ret <2 x i8> [[SEL]]
2793
2792
;
2794
2793
%cmp = icmp eq <2 x i8 > %x , <i8 1 , i8 poison>
@@ -2839,8 +2838,7 @@ define i8 @select_replacement_sub_noundef(i8 %x, i8 noundef %y, i8 %z) {
2839
2838
define i8 @select_replacement_sub (i8 %x , i8 %y , i8 %z ) {
2840
2839
; CHECK-LABEL: @select_replacement_sub(
2841
2840
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], [[Y:%.*]]
2842
- ; CHECK-NEXT: [[SUB:%.*]] = sub i8 [[X]], [[Y]]
2843
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 [[SUB]], i8 [[Z:%.*]]
2841
+ ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 0, i8 [[Z:%.*]]
2844
2842
; CHECK-NEXT: ret i8 [[SEL]]
2845
2843
;
2846
2844
%cmp = icmp eq i8 %x , %y
@@ -4430,10 +4428,9 @@ define i32 @src_no_trans_select_and_ne0_xor_or(i32 %x, i32 %y) {
4430
4428
4431
4429
define i32 @src_no_trans_select_xor_eq0_xor_and (i32 %x , i32 %y ) {
4432
4430
; CHECK-LABEL: @src_no_trans_select_xor_eq0_xor_and(
4433
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
4434
- ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X]], [[Y]]
4431
+ ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
4435
4432
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X]], [[Y]]
4436
- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[XOR0]], i32 [[XOR]] , i32 [[AND]]
4433
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[XOR0]], i32 0 , i32 [[AND]]
4437
4434
; CHECK-NEXT: ret i32 [[COND]]
4438
4435
;
4439
4436
%xor = xor i32 %x , %y
@@ -4445,10 +4442,9 @@ define i32 @src_no_trans_select_xor_eq0_xor_and(i32 %x, i32 %y) {
4445
4442
4446
4443
define i32 @src_no_trans_select_xor_eq0_xor_or (i32 %x , i32 %y ) {
4447
4444
; CHECK-LABEL: @src_no_trans_select_xor_eq0_xor_or(
4448
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
4449
- ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X]], [[Y]]
4445
+ ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
4450
4446
; CHECK-NEXT: [[OR:%.*]] = or i32 [[X]], [[Y]]
4451
- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[XOR0]], i32 [[XOR]] , i32 [[OR]]
4447
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[XOR0]], i32 0 , i32 [[OR]]
4452
4448
; CHECK-NEXT: ret i32 [[COND]]
4453
4449
;
4454
4450
%xor = xor i32 %x , %y
@@ -4460,11 +4456,11 @@ define i32 @src_no_trans_select_xor_eq0_xor_or(i32 %x, i32 %y) {
4460
4456
4461
4457
define i32 @src_no_trans_select_xor_eq0_and_xor (i32 %x , i32 %y ) {
4462
4458
; CHECK-LABEL: @src_no_trans_select_xor_eq0_and_xor(
4463
- ; CHECK-NEXT: [[XOR :%.*]] = xor i32 [[X :%.*]], [[Y:%.*]]
4464
- ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X ]], [[Y]]
4465
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[X ]], [[Y]]
4466
- ; CHECK-NEXT: [[COND :%.*]] = select i1 [[XOR0]], i32 [[AND]], i32 [[XOR ]]
4467
- ; CHECK-NEXT: ret i32 [[COND ]]
4459
+ ; CHECK-NEXT: [[COND :%.*]] = xor i32 [[XOR :%.*]], [[Y:%.*]]
4460
+ ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[XOR ]], [[Y]]
4461
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[XOR ]], [[Y]]
4462
+ ; CHECK-NEXT: [[COND1 :%.*]] = select i1 [[XOR0]], i32 [[AND]], i32 [[COND ]]
4463
+ ; CHECK-NEXT: ret i32 [[COND1 ]]
4468
4464
;
4469
4465
%xor = xor i32 %x , %y
4470
4466
%xor0 = icmp eq i32 %xor , 0
@@ -4476,11 +4472,11 @@ define i32 @src_no_trans_select_xor_eq0_and_xor(i32 %x, i32 %y) {
4476
4472
; https://alive2.llvm.org/ce/z/SBe8ei
4477
4473
define i32 @src_no_trans_select_xor_eq0_or_xor (i32 %x , i32 %y ) {
4478
4474
; CHECK-LABEL: @src_no_trans_select_xor_eq0_or_xor(
4479
- ; CHECK-NEXT: [[XOR :%.*]] = xor i32 [[X :%.*]], [[Y:%.*]]
4480
- ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X ]], [[Y]]
4481
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[X ]], [[Y]]
4482
- ; CHECK-NEXT: [[COND :%.*]] = select i1 [[XOR0]], i32 [[OR]], i32 [[XOR ]]
4483
- ; CHECK-NEXT: ret i32 [[COND ]]
4475
+ ; CHECK-NEXT: [[COND :%.*]] = xor i32 [[XOR :%.*]], [[Y:%.*]]
4476
+ ; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[XOR ]], [[Y]]
4477
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[XOR ]], [[Y]]
4478
+ ; CHECK-NEXT: [[COND1 :%.*]] = select i1 [[XOR0]], i32 [[OR]], i32 [[COND ]]
4479
+ ; CHECK-NEXT: ret i32 [[COND1 ]]
4484
4480
;
4485
4481
%xor = xor i32 %x , %y
4486
4482
%xor0 = icmp eq i32 %xor , 0
@@ -4494,8 +4490,7 @@ define i32 @src_no_trans_select_xor_eq0_or_xor(i32 %x, i32 %y) {
4494
4490
define i32 @src_select_xxory_eq0_xorxy_y (i32 %x , i32 %y ) {
4495
4491
; CHECK-LABEL: @src_select_xxory_eq0_xorxy_y(
4496
4492
; CHECK-NEXT: [[XOR0:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
4497
- ; CHECK-NEXT: [[XOR:%.*]] = select i1 [[XOR0]], i32 [[X]], i32 0
4498
- ; CHECK-NEXT: [[COND:%.*]] = xor i32 [[XOR]], [[Y]]
4493
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[XOR0]], i32 0, i32 [[Y]]
4499
4494
; CHECK-NEXT: ret i32 [[COND]]
4500
4495
;
4501
4496
%xor = xor i32 %x , %y
0 commit comments