@@ -328,10 +328,7 @@ define i1 @select_constants_and_icmp_eq0_common_bit(i1 %x, i1 %y) {
328328
329329define i1 @select_constants_and_icmp_eq0_no_common_op1 (i1 %x , i1 %y ) {
330330; CHECK-LABEL: @select_constants_and_icmp_eq0_no_common_op1(
331- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 16, i8 3
332- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 24, i8 3
333- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
334- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[AND]], 0
331+ ; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[X:%.*]], [[Y:%.*]]
335332; CHECK-NEXT: ret i1 [[CMP]]
336333;
337334 %s1 = select i1 %x , i8 16 , i8 3
@@ -345,10 +342,7 @@ define i1 @select_constants_and_icmp_eq0_no_common_op1(i1 %x, i1 %y) {
345342
346343define i1 @select_constants_and_icmp_eq0_no_common_op2 (i1 %x , i1 %y ) {
347344; CHECK-LABEL: @select_constants_and_icmp_eq0_no_common_op2(
348- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 16, i8 3
349- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 16, i8 7
350- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
351- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[AND]], 0
345+ ; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[X:%.*]], [[Y:%.*]]
352346; CHECK-NEXT: ret i1 [[CMP]]
353347;
354348 %s1 = select i1 %x , i8 16 , i8 3
@@ -387,14 +381,9 @@ define i1 @select_constants_and_icmp_eq0_zero_fval(i1 %x, i1 %y) {
387381 ret i1 %cmp
388382}
389383
390- ; TODO: x & y
391-
392384define i1 @select_constants_and_icmp_eq_tval (i1 %x , i1 %y ) {
393385; CHECK-LABEL: @select_constants_and_icmp_eq_tval(
394- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 6, i8 1
395- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 6, i8 1
396- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
397- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[AND]], 6
386+ ; CHECK-NEXT: [[CMP:%.*]] = and i1 [[X:%.*]], [[Y:%.*]]
398387; CHECK-NEXT: ret i1 [[CMP]]
399388;
400389 %s1 = select i1 %x , i8 6 , i8 1
@@ -404,14 +393,10 @@ define i1 @select_constants_and_icmp_eq_tval(i1 %x, i1 %y) {
404393 ret i1 %cmp
405394}
406395
407- ; TODO: ~(x | y)
408-
409396define i1 @select_constants_and_icmp_eq_fval (i1 %x , i1 %y ) {
410397; CHECK-LABEL: @select_constants_and_icmp_eq_fval(
411- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 12, i8 3
412- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 12, i8 3
413- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
414- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[AND]], 3
398+ ; CHECK-NEXT: [[TMP1:%.*]] = or i1 [[X:%.*]], [[Y:%.*]]
399+ ; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[TMP1]], true
415400; CHECK-NEXT: ret i1 [[CMP]]
416401;
417402 %s1 = select i1 %x , i8 12 , i8 3
@@ -512,10 +497,8 @@ define i1 @select_constants_and_icmp_ne0_common_bit(i1 %x, i1 %y) {
512497
513498define i1 @select_constants_and_icmp_ne0_no_common_op1 (i1 %x , i1 %y ) {
514499; CHECK-LABEL: @select_constants_and_icmp_ne0_no_common_op1(
515- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 16, i8 3
516- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 24, i8 3
517- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
518- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[AND]], 0
500+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[X:%.*]], [[Y:%.*]]
501+ ; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[TMP1]], true
519502; CHECK-NEXT: ret i1 [[CMP]]
520503;
521504 %s1 = select i1 %x , i8 16 , i8 3
@@ -529,10 +512,8 @@ define i1 @select_constants_and_icmp_ne0_no_common_op1(i1 %x, i1 %y) {
529512
530513define i1 @select_constants_and_icmp_ne0_no_common_op2 (i1 %x , i1 %y ) {
531514; CHECK-LABEL: @select_constants_and_icmp_ne0_no_common_op2(
532- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 16, i8 3
533- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 16, i8 7
534- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
535- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[AND]], 0
515+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[X:%.*]], [[Y:%.*]]
516+ ; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[TMP1]], true
536517; CHECK-NEXT: ret i1 [[CMP]]
537518;
538519 %s1 = select i1 %x , i8 16 , i8 3
@@ -571,14 +552,10 @@ define i1 @select_constants_and_icmp_ne0_zero_fval(i1 %x, i1 %y) {
571552 ret i1 %cmp
572553}
573554
574- ; TODO: ~(x & y)
575-
576555define i1 @select_constants_and_icmp_ne_tval (i1 %x , i1 %y ) {
577556; CHECK-LABEL: @select_constants_and_icmp_ne_tval(
578- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 6, i8 1
579- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 6, i8 1
580- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
581- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[AND]], 6
557+ ; CHECK-NEXT: [[TMP1:%.*]] = and i1 [[X:%.*]], [[Y:%.*]]
558+ ; CHECK-NEXT: [[CMP:%.*]] = xor i1 [[TMP1]], true
582559; CHECK-NEXT: ret i1 [[CMP]]
583560;
584561 %s1 = select i1 %x , i8 6 , i8 1
@@ -588,14 +565,9 @@ define i1 @select_constants_and_icmp_ne_tval(i1 %x, i1 %y) {
588565 ret i1 %cmp
589566}
590567
591- ; TODO: (x | y)
592-
593568define i1 @select_constants_and_icmp_ne_fval (i1 %x , i1 %y ) {
594569; CHECK-LABEL: @select_constants_and_icmp_ne_fval(
595- ; CHECK-NEXT: [[S1:%.*]] = select i1 [[X:%.*]], i8 12, i8 3
596- ; CHECK-NEXT: [[S2:%.*]] = select i1 [[Y:%.*]], i8 12, i8 3
597- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[S1]], [[S2]]
598- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[AND]], 3
570+ ; CHECK-NEXT: [[CMP:%.*]] = or i1 [[X:%.*]], [[Y:%.*]]
599571; CHECK-NEXT: ret i1 [[CMP]]
600572;
601573 %s1 = select i1 %x , i8 12 , i8 3
0 commit comments