@@ -165,8 +165,7 @@ define <2 x i8> @lshr_exact_splat_vec(<2 x i8> %x) {
165
165
166
166
define <2 x i8 > @lshr_exact_splat_vec_nuw (<2 x i8 > %x ) {
167
167
; CHECK-LABEL: @lshr_exact_splat_vec_nuw(
168
- ; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i8> [[X:%.*]], <i8 1, i8 1>
169
- ; CHECK-NEXT: [[LSHR:%.*]] = and <2 x i8> [[TMP1]], <i8 63, i8 63>
168
+ ; CHECK-NEXT: [[LSHR:%.*]] = add nuw <2 x i8> [[X:%.*]], <i8 1, i8 1>
170
169
; CHECK-NEXT: ret <2 x i8> [[LSHR]]
171
170
;
172
171
%shl = shl nuw <2 x i8 > %x , <i8 2 , i8 2 >
@@ -374,9 +373,8 @@ define <3 x i14> @mul_splat_fold_vec(<3 x i14> %x) {
374
373
375
374
define i32 @shl_add_lshr_flag_preservation (i32 %x , i32 %c , i32 %y ) {
376
375
; CHECK-LABEL: @shl_add_lshr_flag_preservation(
377
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
378
- ; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i32 [[SHL]], [[Y:%.*]]
379
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr exact i32 [[ADD]], [[C]]
376
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr exact i32 [[Y:%.*]], [[C:%.*]]
377
+ ; CHECK-NEXT: [[LSHR:%.*]] = add nuw nsw i32 [[TMP1]], [[X:%.*]]
380
378
; CHECK-NEXT: ret i32 [[LSHR]]
381
379
;
382
380
%shl = shl nuw i32 %x , %c
@@ -387,9 +385,8 @@ define i32 @shl_add_lshr_flag_preservation(i32 %x, i32 %c, i32 %y) {
387
385
388
386
define i32 @shl_add_lshr (i32 %x , i32 %c , i32 %y ) {
389
387
; CHECK-LABEL: @shl_add_lshr(
390
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
391
- ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[SHL]], [[Y:%.*]]
392
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[ADD]], [[C]]
388
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
389
+ ; CHECK-NEXT: [[LSHR:%.*]] = add nuw i32 [[TMP1]], [[X:%.*]]
393
390
; CHECK-NEXT: ret i32 [[LSHR]]
394
391
;
395
392
%shl = shl nuw i32 %x , %c
@@ -400,9 +397,8 @@ define i32 @shl_add_lshr(i32 %x, i32 %c, i32 %y) {
400
397
401
398
define i32 @shl_add_lshr_comm (i32 %x , i32 %c , i32 %y ) {
402
399
; CHECK-LABEL: @shl_add_lshr_comm(
403
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
404
- ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[SHL]], [[Y:%.*]]
405
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[ADD]], [[C]]
400
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
401
+ ; CHECK-NEXT: [[LSHR:%.*]] = add nuw i32 [[TMP1]], [[X:%.*]]
406
402
; CHECK-NEXT: ret i32 [[LSHR]]
407
403
;
408
404
%shl = shl nuw i32 %x , %c
@@ -458,9 +454,8 @@ define i32 @shl_sub_lshr_no_nuw(i32 %x, i32 %c, i32 %y) {
458
454
459
455
define i32 @shl_sub_lshr (i32 %x , i32 %c , i32 %y ) {
460
456
; CHECK-LABEL: @shl_sub_lshr(
461
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
462
- ; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[SHL]], [[Y:%.*]]
463
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr exact i32 [[SUB]], [[C]]
457
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr exact i32 [[Y:%.*]], [[C:%.*]]
458
+ ; CHECK-NEXT: [[LSHR:%.*]] = sub nuw nsw i32 [[X:%.*]], [[TMP1]]
464
459
; CHECK-NEXT: ret i32 [[LSHR]]
465
460
;
466
461
%shl = shl nuw i32 %x , %c
@@ -471,9 +466,8 @@ define i32 @shl_sub_lshr(i32 %x, i32 %c, i32 %y) {
471
466
472
467
define i32 @shl_or_lshr (i32 %x , i32 %c , i32 %y ) {
473
468
; CHECK-LABEL: @shl_or_lshr(
474
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
475
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[SHL]], [[Y:%.*]]
476
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[OR]], [[C]]
469
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
470
+ ; CHECK-NEXT: [[LSHR:%.*]] = or i32 [[TMP1]], [[X:%.*]]
477
471
; CHECK-NEXT: ret i32 [[LSHR]]
478
472
;
479
473
%shl = shl nuw i32 %x , %c
@@ -484,9 +478,8 @@ define i32 @shl_or_lshr(i32 %x, i32 %c, i32 %y) {
484
478
485
479
define i32 @shl_or_disjoint_lshr (i32 %x , i32 %c , i32 %y ) {
486
480
; CHECK-LABEL: @shl_or_disjoint_lshr(
487
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
488
- ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[SHL]], [[Y:%.*]]
489
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[OR]], [[C]]
481
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
482
+ ; CHECK-NEXT: [[LSHR:%.*]] = or disjoint i32 [[TMP1]], [[X:%.*]]
490
483
; CHECK-NEXT: ret i32 [[LSHR]]
491
484
;
492
485
%shl = shl nuw i32 %x , %c
@@ -497,9 +490,8 @@ define i32 @shl_or_disjoint_lshr(i32 %x, i32 %c, i32 %y) {
497
490
498
491
define i32 @shl_or_lshr_comm (i32 %x , i32 %c , i32 %y ) {
499
492
; CHECK-LABEL: @shl_or_lshr_comm(
500
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
501
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[SHL]], [[Y:%.*]]
502
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[OR]], [[C]]
493
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
494
+ ; CHECK-NEXT: [[LSHR:%.*]] = or i32 [[TMP1]], [[X:%.*]]
503
495
; CHECK-NEXT: ret i32 [[LSHR]]
504
496
;
505
497
%shl = shl nuw i32 %x , %c
@@ -510,9 +502,8 @@ define i32 @shl_or_lshr_comm(i32 %x, i32 %c, i32 %y) {
510
502
511
503
define i32 @shl_or_disjoint_lshr_comm (i32 %x , i32 %c , i32 %y ) {
512
504
; CHECK-LABEL: @shl_or_disjoint_lshr_comm(
513
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
514
- ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[SHL]], [[Y:%.*]]
515
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[OR]], [[C]]
505
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
506
+ ; CHECK-NEXT: [[LSHR:%.*]] = or disjoint i32 [[TMP1]], [[X:%.*]]
516
507
; CHECK-NEXT: ret i32 [[LSHR]]
517
508
;
518
509
%shl = shl nuw i32 %x , %c
@@ -523,9 +514,8 @@ define i32 @shl_or_disjoint_lshr_comm(i32 %x, i32 %c, i32 %y) {
523
514
524
515
define i32 @shl_xor_lshr (i32 %x , i32 %c , i32 %y ) {
525
516
; CHECK-LABEL: @shl_xor_lshr(
526
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
527
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[SHL]], [[Y:%.*]]
528
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[XOR]], [[C]]
517
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
518
+ ; CHECK-NEXT: [[LSHR:%.*]] = xor i32 [[TMP1]], [[X:%.*]]
529
519
; CHECK-NEXT: ret i32 [[LSHR]]
530
520
;
531
521
%shl = shl nuw i32 %x , %c
@@ -536,9 +526,8 @@ define i32 @shl_xor_lshr(i32 %x, i32 %c, i32 %y) {
536
526
537
527
define i32 @shl_xor_lshr_comm (i32 %x , i32 %c , i32 %y ) {
538
528
; CHECK-LABEL: @shl_xor_lshr_comm(
539
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
540
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[SHL]], [[Y:%.*]]
541
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[XOR]], [[C]]
529
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
530
+ ; CHECK-NEXT: [[LSHR:%.*]] = xor i32 [[TMP1]], [[X:%.*]]
542
531
; CHECK-NEXT: ret i32 [[LSHR]]
543
532
;
544
533
%shl = shl nuw i32 %x , %c
@@ -549,9 +538,8 @@ define i32 @shl_xor_lshr_comm(i32 %x, i32 %c, i32 %y) {
549
538
550
539
define i32 @shl_and_lshr (i32 %x , i32 %c , i32 %y ) {
551
540
; CHECK-LABEL: @shl_and_lshr(
552
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
553
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHL]], [[Y:%.*]]
554
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[AND]], [[C]]
541
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
542
+ ; CHECK-NEXT: [[LSHR:%.*]] = and i32 [[TMP1]], [[X:%.*]]
555
543
; CHECK-NEXT: ret i32 [[LSHR]]
556
544
;
557
545
%shl = shl nuw i32 %x , %c
@@ -562,9 +550,8 @@ define i32 @shl_and_lshr(i32 %x, i32 %c, i32 %y) {
562
550
563
551
define i32 @shl_and_lshr_comm (i32 %x , i32 %c , i32 %y ) {
564
552
; CHECK-LABEL: @shl_and_lshr_comm(
565
- ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
566
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHL]], [[Y:%.*]]
567
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 [[AND]], [[C]]
553
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
554
+ ; CHECK-NEXT: [[LSHR:%.*]] = and i32 [[TMP1]], [[X:%.*]]
568
555
; CHECK-NEXT: ret i32 [[LSHR]]
569
556
;
570
557
%shl = shl nuw i32 %x , %c
@@ -575,10 +562,9 @@ define i32 @shl_and_lshr_comm(i32 %x, i32 %c, i32 %y) {
575
562
576
563
define i32 @shl_lshr_and_exact (i32 %x , i32 %c , i32 %y ) {
577
564
; CHECK-LABEL: @shl_lshr_and_exact(
578
- ; CHECK-NEXT: [[TMP1:%.*]] = shl nuw i32 [[X:%.*]], [[C:%.*]]
579
- ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], [[Y:%.*]]
580
- ; CHECK-NEXT: [[TMP3:%.*]] = lshr exact i32 [[TMP2]], [[C]]
581
- ; CHECK-NEXT: ret i32 [[TMP3]]
565
+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[Y:%.*]], [[C:%.*]]
566
+ ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], [[X:%.*]]
567
+ ; CHECK-NEXT: ret i32 [[TMP2]]
582
568
;
583
569
%2 = shl nuw i32 %x , %c
584
570
%3 = and i32 %2 , %y
0 commit comments