@@ -2443,8 +2443,8 @@ define i64 @test_and_or_constexpr_infloop() {
24432443
24442444define i32 @and_zext (i32 %a , i1 %b ) {
24452445; CHECK-LABEL: @and_zext(
2446- ; CHECK-NEXT: [[MASK :%.*]] = zext i1 [[B :%.*]] to i32
2447- ; CHECK-NEXT: [[R:%.*]] = and i32 [[MASK ]], [[A:%.*]]
2446+ ; CHECK-NEXT: [[TMP1 :%.*]] = and i32 [[A :%.*]], 1
2447+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.* ]], i32 [[TMP1]], i32 0
24482448; CHECK-NEXT: ret i32 [[R]]
24492449;
24502450 %mask = zext i1 %b to i32
@@ -2454,8 +2454,8 @@ define i32 @and_zext(i32 %a, i1 %b) {
24542454
24552455define i32 @and_zext_commuted (i32 %a , i1 %b ) {
24562456; CHECK-LABEL: @and_zext_commuted(
2457- ; CHECK-NEXT: [[MASK :%.*]] = zext i1 [[B :%.*]] to i32
2458- ; CHECK-NEXT: [[R:%.*]] = and i32 [[MASK ]], [[A:%.*]]
2457+ ; CHECK-NEXT: [[TMP1 :%.*]] = and i32 [[A :%.*]], 1
2458+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.* ]], i32 [[TMP1]], i32 0
24592459; CHECK-NEXT: ret i32 [[R]]
24602460;
24612461 %mask = zext i1 %b to i32
@@ -2478,8 +2478,8 @@ define i32 @and_zext_multiuse(i32 %a, i1 %b) {
24782478
24792479define <2 x i32 > @and_zext_vec (<2 x i32 > %a , <2 x i1 > %b ) {
24802480; CHECK-LABEL: @and_zext_vec(
2481- ; CHECK-NEXT: [[MASK :%.*]] = zext <2 x i1 > [[B :%.*]] to <2 x i32>
2482- ; CHECK-NEXT: [[R:%.*]] = and <2 x i32 > [[MASK ]], [[A:%.*]]
2481+ ; CHECK-NEXT: [[TMP1 :%.*]] = and <2 x i32 > [[A :%.*]], <i32 1, i32 1 >
2482+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1 > [[B:%.* ]], <2 x i32> [[TMP1]], <2 x i32> zeroinitializer
24832483; CHECK-NEXT: ret <2 x i32> [[R]]
24842484;
24852485 %mask = zext <2 x i1 > %b to <2 x i32 >
@@ -2490,10 +2490,7 @@ define <2 x i32> @and_zext_vec(<2 x i32> %a, <2 x i1> %b) {
24902490; tests from PR66606
24912491define i32 @and_zext_eq_even (i32 %a ) {
24922492; CHECK-LABEL: @and_zext_eq_even(
2493- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 2
2494- ; CHECK-NEXT: [[NOT:%.*]] = zext i1 [[COND]] to i32
2495- ; CHECK-NEXT: [[R:%.*]] = and i32 [[NOT]], [[A]]
2496- ; CHECK-NEXT: ret i32 [[R]]
2493+ ; CHECK-NEXT: ret i32 0
24972494;
24982495 %cond = icmp eq i32 %a , 2
24992496 %not = zext i1 %cond to i32
@@ -2503,10 +2500,7 @@ define i32 @and_zext_eq_even(i32 %a) {
25032500
25042501define i32 @and_zext_eq_even_commuted (i32 %a ) {
25052502; CHECK-LABEL: @and_zext_eq_even_commuted(
2506- ; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 2
2507- ; CHECK-NEXT: [[NOT:%.*]] = zext i1 [[COND]] to i32
2508- ; CHECK-NEXT: [[R:%.*]] = and i32 [[NOT]], [[A]]
2509- ; CHECK-NEXT: ret i32 [[R]]
2503+ ; CHECK-NEXT: ret i32 0
25102504;
25112505 %cond = icmp eq i32 %a , 2
25122506 %not = zext i1 %cond to i32
@@ -2517,8 +2511,7 @@ define i32 @and_zext_eq_even_commuted(i32 %a) {
25172511define i32 @and_zext_eq_odd (i32 %a ) {
25182512; CHECK-LABEL: @and_zext_eq_odd(
25192513; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 3
2520- ; CHECK-NEXT: [[NOT:%.*]] = zext i1 [[COND]] to i32
2521- ; CHECK-NEXT: [[R:%.*]] = and i32 [[NOT]], [[A]]
2514+ ; CHECK-NEXT: [[R:%.*]] = zext i1 [[COND]] to i32
25222515; CHECK-NEXT: ret i32 [[R]]
25232516;
25242517 %cond = icmp eq i32 %a , 3
@@ -2530,8 +2523,7 @@ define i32 @and_zext_eq_odd(i32 %a) {
25302523define i32 @and_zext_eq_odd_commuted (i32 %a ) {
25312524; CHECK-LABEL: @and_zext_eq_odd_commuted(
25322525; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 3
2533- ; CHECK-NEXT: [[NOT:%.*]] = zext i1 [[COND]] to i32
2534- ; CHECK-NEXT: [[R:%.*]] = and i32 [[NOT]], [[A]]
2526+ ; CHECK-NEXT: [[R:%.*]] = zext i1 [[COND]] to i32
25352527; CHECK-NEXT: ret i32 [[R]]
25362528;
25372529 %cond = icmp eq i32 %a , 3
@@ -2545,10 +2537,7 @@ define i32 @and_zext_eq_zero(i32 %A, i32 %C) {
25452537; CHECK-LABEL: @and_zext_eq_zero(
25462538; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[A:%.*]], 0
25472539; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP1]] to i32
2548- ; CHECK-NEXT: [[TMP3:%.*]] = lshr i32 [[A]], [[C:%.*]]
2549- ; CHECK-NEXT: [[TMP4:%.*]] = xor i32 [[TMP3]], -1
2550- ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[TMP2]], [[TMP4]]
2551- ; CHECK-NEXT: ret i32 [[TMP5]]
2540+ ; CHECK-NEXT: ret i32 [[TMP2]]
25522541;
25532542 %1 = icmp eq i32 %A , 0
25542543 %2 = zext i1 %1 to i32
0 commit comments