@@ -328,10 +328,7 @@ define i1 @select_constants_and_icmp_eq0_common_bit(i1 %x, i1 %y) {
328
328
329
329
define i1 @select_constants_and_icmp_eq0_no_common_op1 (i1 %x , i1 %y ) {
330
330
; 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:%.*]]
335
332
; CHECK-NEXT: ret i1 [[CMP]]
336
333
;
337
334
%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) {
345
342
346
343
define i1 @select_constants_and_icmp_eq0_no_common_op2 (i1 %x , i1 %y ) {
347
344
; 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:%.*]]
352
346
; CHECK-NEXT: ret i1 [[CMP]]
353
347
;
354
348
%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) {
387
381
ret i1 %cmp
388
382
}
389
383
390
- ; TODO: x & y
391
-
392
384
define i1 @select_constants_and_icmp_eq_tval (i1 %x , i1 %y ) {
393
385
; 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:%.*]]
398
387
; CHECK-NEXT: ret i1 [[CMP]]
399
388
;
400
389
%s1 = select i1 %x , i8 6 , i8 1
@@ -404,14 +393,10 @@ define i1 @select_constants_and_icmp_eq_tval(i1 %x, i1 %y) {
404
393
ret i1 %cmp
405
394
}
406
395
407
- ; TODO: ~(x | y)
408
-
409
396
define i1 @select_constants_and_icmp_eq_fval (i1 %x , i1 %y ) {
410
397
; 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
415
400
; CHECK-NEXT: ret i1 [[CMP]]
416
401
;
417
402
%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) {
512
497
513
498
define i1 @select_constants_and_icmp_ne0_no_common_op1 (i1 %x , i1 %y ) {
514
499
; 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
519
502
; CHECK-NEXT: ret i1 [[CMP]]
520
503
;
521
504
%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) {
529
512
530
513
define i1 @select_constants_and_icmp_ne0_no_common_op2 (i1 %x , i1 %y ) {
531
514
; 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
536
517
; CHECK-NEXT: ret i1 [[CMP]]
537
518
;
538
519
%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) {
571
552
ret i1 %cmp
572
553
}
573
554
574
- ; TODO: ~(x & y)
575
-
576
555
define i1 @select_constants_and_icmp_ne_tval (i1 %x , i1 %y ) {
577
556
; 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
582
559
; CHECK-NEXT: ret i1 [[CMP]]
583
560
;
584
561
%s1 = select i1 %x , i8 6 , i8 1
@@ -588,14 +565,9 @@ define i1 @select_constants_and_icmp_ne_tval(i1 %x, i1 %y) {
588
565
ret i1 %cmp
589
566
}
590
567
591
- ; TODO: (x | y)
592
-
593
568
define i1 @select_constants_and_icmp_ne_fval (i1 %x , i1 %y ) {
594
569
; 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:%.*]]
599
571
; CHECK-NEXT: ret i1 [[CMP]]
600
572
;
601
573
%s1 = select i1 %x , i8 12 , i8 3
0 commit comments