@@ -190,8 +190,7 @@ define i8 @test_i8_224_mask_ashr_6(i8 %a0) {
190
190
define i8 @test_i8_7_mask_shl_1 (i8 %a0 ) {
191
191
; CHECK-LABEL: test_i8_7_mask_shl_1:
192
192
; CHECK: // %bb.0:
193
- ; CHECK-NEXT: and w8, w0, #0x7
194
- ; CHECK-NEXT: lsl w0, w8, #1
193
+ ; CHECK-NEXT: ubfiz w0, w0, #1, #3
195
194
; CHECK-NEXT: ret
196
195
%t0 = and i8 %a0 , 7
197
196
%t1 = shl i8 %t0 , 1
@@ -200,8 +199,7 @@ define i8 @test_i8_7_mask_shl_1(i8 %a0) {
200
199
define i8 @test_i8_7_mask_shl_4 (i8 %a0 ) {
201
200
; CHECK-LABEL: test_i8_7_mask_shl_4:
202
201
; CHECK: // %bb.0:
203
- ; CHECK-NEXT: and w8, w0, #0x7
204
- ; CHECK-NEXT: lsl w0, w8, #4
202
+ ; CHECK-NEXT: ubfiz w0, w0, #4, #3
205
203
; CHECK-NEXT: ret
206
204
%t0 = and i8 %a0 , 7
207
205
%t1 = shl i8 %t0 , 4
@@ -229,8 +227,8 @@ define i8 @test_i8_7_mask_shl_6(i8 %a0) {
229
227
define i8 @test_i8_28_mask_shl_1 (i8 %a0 ) {
230
228
; CHECK-LABEL: test_i8_28_mask_shl_1:
231
229
; CHECK: // %bb.0:
232
- ; CHECK-NEXT: and w8, w0, #0x1c
233
- ; CHECK-NEXT: lsl w0, w8, #1
230
+ ; CHECK-NEXT: lsl w8, w0, #1
231
+ ; CHECK-NEXT: and w0, w8, #0x38
234
232
; CHECK-NEXT: ret
235
233
%t0 = and i8 %a0 , 28
236
234
%t1 = shl i8 %t0 , 1
@@ -239,8 +237,8 @@ define i8 @test_i8_28_mask_shl_1(i8 %a0) {
239
237
define i8 @test_i8_28_mask_shl_2 (i8 %a0 ) {
240
238
; CHECK-LABEL: test_i8_28_mask_shl_2:
241
239
; CHECK: // %bb.0:
242
- ; CHECK-NEXT: and w8, w0, #0x1c
243
- ; CHECK-NEXT: lsl w0, w8, #2
240
+ ; CHECK-NEXT: lsl w8, w0, #2
241
+ ; CHECK-NEXT: and w0, w8, #0x70
244
242
; CHECK-NEXT: ret
245
243
%t0 = and i8 %a0 , 28
246
244
%t1 = shl i8 %t0 , 2
@@ -249,8 +247,8 @@ define i8 @test_i8_28_mask_shl_2(i8 %a0) {
249
247
define i8 @test_i8_28_mask_shl_3 (i8 %a0 ) {
250
248
; CHECK-LABEL: test_i8_28_mask_shl_3:
251
249
; CHECK: // %bb.0:
252
- ; CHECK-NEXT: and w8, w0, #0x1c
253
- ; CHECK-NEXT: lsl w0, w8, #3
250
+ ; CHECK-NEXT: lsl w8, w0, #3
251
+ ; CHECK-NEXT: and w0, w8, #0xe0
254
252
; CHECK-NEXT: ret
255
253
%t0 = and i8 %a0 , 28
256
254
%t1 = shl i8 %t0 , 3
@@ -259,8 +257,8 @@ define i8 @test_i8_28_mask_shl_3(i8 %a0) {
259
257
define i8 @test_i8_28_mask_shl_4 (i8 %a0 ) {
260
258
; CHECK-LABEL: test_i8_28_mask_shl_4:
261
259
; CHECK: // %bb.0:
262
- ; CHECK-NEXT: and w8, w0, #0xc
263
- ; CHECK-NEXT: lsl w0, w8, #4
260
+ ; CHECK-NEXT: lsl w8, w0, #4
261
+ ; CHECK-NEXT: and w0, w8, #0xc0
264
262
; CHECK-NEXT: ret
265
263
%t0 = and i8 %a0 , 28
266
264
%t1 = shl i8 %t0 , 4
@@ -270,8 +268,8 @@ define i8 @test_i8_28_mask_shl_4(i8 %a0) {
270
268
define i8 @test_i8_224_mask_shl_1 (i8 %a0 ) {
271
269
; CHECK-LABEL: test_i8_224_mask_shl_1:
272
270
; CHECK: // %bb.0:
273
- ; CHECK-NEXT: and w8, w0, #0x60
274
- ; CHECK-NEXT: lsl w0, w8, #1
271
+ ; CHECK-NEXT: lsl w8, w0, #1
272
+ ; CHECK-NEXT: and w0, w8, #0xc0
275
273
; CHECK-NEXT: ret
276
274
%t0 = and i8 %a0 , 224
277
275
%t1 = shl i8 %t0 , 1
@@ -465,8 +463,7 @@ define i16 @test_i16_65024_mask_ashr_10(i16 %a0) {
465
463
define i16 @test_i16_127_mask_shl_1 (i16 %a0 ) {
466
464
; CHECK-LABEL: test_i16_127_mask_shl_1:
467
465
; CHECK: // %bb.0:
468
- ; CHECK-NEXT: and w8, w0, #0x7f
469
- ; CHECK-NEXT: lsl w0, w8, #1
466
+ ; CHECK-NEXT: ubfiz w0, w0, #1, #7
470
467
; CHECK-NEXT: ret
471
468
%t0 = and i16 %a0 , 127
472
469
%t1 = shl i16 %t0 , 1
@@ -475,8 +472,7 @@ define i16 @test_i16_127_mask_shl_1(i16 %a0) {
475
472
define i16 @test_i16_127_mask_shl_8 (i16 %a0 ) {
476
473
; CHECK-LABEL: test_i16_127_mask_shl_8:
477
474
; CHECK: // %bb.0:
478
- ; CHECK-NEXT: and w8, w0, #0x7f
479
- ; CHECK-NEXT: lsl w0, w8, #8
475
+ ; CHECK-NEXT: ubfiz w0, w0, #8, #7
480
476
; CHECK-NEXT: ret
481
477
%t0 = and i16 %a0 , 127
482
478
%t1 = shl i16 %t0 , 8
@@ -504,8 +500,8 @@ define i16 @test_i16_127_mask_shl_10(i16 %a0) {
504
500
define i16 @test_i16_2032_mask_shl_3 (i16 %a0 ) {
505
501
; CHECK-LABEL: test_i16_2032_mask_shl_3:
506
502
; CHECK: // %bb.0:
507
- ; CHECK-NEXT: and w8, w0, #0x7f0
508
- ; CHECK-NEXT: lsl w0, w8, #3
503
+ ; CHECK-NEXT: lsl w8, w0, #3
504
+ ; CHECK-NEXT: and w0, w8, #0x3f80
509
505
; CHECK-NEXT: ret
510
506
%t0 = and i16 %a0 , 2032
511
507
%t1 = shl i16 %t0 , 3
@@ -514,8 +510,8 @@ define i16 @test_i16_2032_mask_shl_3(i16 %a0) {
514
510
define i16 @test_i16_2032_mask_shl_4 (i16 %a0 ) {
515
511
; CHECK-LABEL: test_i16_2032_mask_shl_4:
516
512
; CHECK: // %bb.0:
517
- ; CHECK-NEXT: and w8, w0, #0x7f0
518
- ; CHECK-NEXT: lsl w0, w8, #4
513
+ ; CHECK-NEXT: lsl w8, w0, #4
514
+ ; CHECK-NEXT: and w0, w8, #0x7f00
519
515
; CHECK-NEXT: ret
520
516
%t0 = and i16 %a0 , 2032
521
517
%t1 = shl i16 %t0 , 4
@@ -524,8 +520,8 @@ define i16 @test_i16_2032_mask_shl_4(i16 %a0) {
524
520
define i16 @test_i16_2032_mask_shl_5 (i16 %a0 ) {
525
521
; CHECK-LABEL: test_i16_2032_mask_shl_5:
526
522
; CHECK: // %bb.0:
527
- ; CHECK-NEXT: and w8, w0, #0x7f0
528
- ; CHECK-NEXT: lsl w0, w8, #5
523
+ ; CHECK-NEXT: lsl w8, w0, #5
524
+ ; CHECK-NEXT: and w0, w8, #0xfe00
529
525
; CHECK-NEXT: ret
530
526
%t0 = and i16 %a0 , 2032
531
527
%t1 = shl i16 %t0 , 5
@@ -534,8 +530,8 @@ define i16 @test_i16_2032_mask_shl_5(i16 %a0) {
534
530
define i16 @test_i16_2032_mask_shl_6 (i16 %a0 ) {
535
531
; CHECK-LABEL: test_i16_2032_mask_shl_6:
536
532
; CHECK: // %bb.0:
537
- ; CHECK-NEXT: and w8, w0, #0x3f0
538
- ; CHECK-NEXT: lsl w0, w8, #6
533
+ ; CHECK-NEXT: lsl w8, w0, #6
534
+ ; CHECK-NEXT: and w0, w8, #0xfc00
539
535
; CHECK-NEXT: ret
540
536
%t0 = and i16 %a0 , 2032
541
537
%t1 = shl i16 %t0 , 6
@@ -545,8 +541,8 @@ define i16 @test_i16_2032_mask_shl_6(i16 %a0) {
545
541
define i16 @test_i16_65024_mask_shl_1 (i16 %a0 ) {
546
542
; CHECK-LABEL: test_i16_65024_mask_shl_1:
547
543
; CHECK: // %bb.0:
548
- ; CHECK-NEXT: and w8, w0, #0x7e00
549
- ; CHECK-NEXT: lsl w0, w8, #1
544
+ ; CHECK-NEXT: lsl w8, w0, #1
545
+ ; CHECK-NEXT: and w0, w8, #0xfc00
550
546
; CHECK-NEXT: ret
551
547
%t0 = and i16 %a0 , 65024
552
548
%t1 = shl i16 %t0 , 1
@@ -740,8 +736,7 @@ define i32 @test_i32_4294836224_mask_ashr_18(i32 %a0) {
740
736
define i32 @test_i32_32767_mask_shl_1 (i32 %a0 ) {
741
737
; CHECK-LABEL: test_i32_32767_mask_shl_1:
742
738
; CHECK: // %bb.0:
743
- ; CHECK-NEXT: and w8, w0, #0x7fff
744
- ; CHECK-NEXT: lsl w0, w8, #1
739
+ ; CHECK-NEXT: ubfiz w0, w0, #1, #15
745
740
; CHECK-NEXT: ret
746
741
%t0 = and i32 %a0 , 32767
747
742
%t1 = shl i32 %t0 , 1
@@ -750,8 +745,7 @@ define i32 @test_i32_32767_mask_shl_1(i32 %a0) {
750
745
define i32 @test_i32_32767_mask_shl_16 (i32 %a0 ) {
751
746
; CHECK-LABEL: test_i32_32767_mask_shl_16:
752
747
; CHECK: // %bb.0:
753
- ; CHECK-NEXT: and w8, w0, #0x7fff
754
- ; CHECK-NEXT: lsl w0, w8, #16
748
+ ; CHECK-NEXT: ubfiz w0, w0, #16, #15
755
749
; CHECK-NEXT: ret
756
750
%t0 = and i32 %a0 , 32767
757
751
%t1 = shl i32 %t0 , 16
@@ -779,8 +773,8 @@ define i32 @test_i32_32767_mask_shl_18(i32 %a0) {
779
773
define i32 @test_i32_8388352_mask_shl_7 (i32 %a0 ) {
780
774
; CHECK-LABEL: test_i32_8388352_mask_shl_7:
781
775
; CHECK: // %bb.0:
782
- ; CHECK-NEXT: and w8, w0, #0x7fff00
783
- ; CHECK-NEXT: lsl w0, w8, #7
776
+ ; CHECK-NEXT: lsl w8, w0, #7
777
+ ; CHECK-NEXT: and w0, w8, #0x3fff8000
784
778
; CHECK-NEXT: ret
785
779
%t0 = and i32 %a0 , 8388352
786
780
%t1 = shl i32 %t0 , 7
@@ -789,8 +783,8 @@ define i32 @test_i32_8388352_mask_shl_7(i32 %a0) {
789
783
define i32 @test_i32_8388352_mask_shl_8 (i32 %a0 ) {
790
784
; CHECK-LABEL: test_i32_8388352_mask_shl_8:
791
785
; CHECK: // %bb.0:
792
- ; CHECK-NEXT: and w8, w0, #0x7fff00
793
- ; CHECK-NEXT: lsl w0, w8, #8
786
+ ; CHECK-NEXT: lsl w8, w0, #8
787
+ ; CHECK-NEXT: and w0, w8, #0x7fff0000
794
788
; CHECK-NEXT: ret
795
789
%t0 = and i32 %a0 , 8388352
796
790
%t1 = shl i32 %t0 , 8
@@ -799,8 +793,8 @@ define i32 @test_i32_8388352_mask_shl_8(i32 %a0) {
799
793
define i32 @test_i32_8388352_mask_shl_9 (i32 %a0 ) {
800
794
; CHECK-LABEL: test_i32_8388352_mask_shl_9:
801
795
; CHECK: // %bb.0:
802
- ; CHECK-NEXT: and w8, w0, #0x7fff00
803
- ; CHECK-NEXT: lsl w0, w8, #9
796
+ ; CHECK-NEXT: lsl w8, w0, #9
797
+ ; CHECK-NEXT: and w0, w8, #0xfffe0000
804
798
; CHECK-NEXT: ret
805
799
%t0 = and i32 %a0 , 8388352
806
800
%t1 = shl i32 %t0 , 9
@@ -809,8 +803,8 @@ define i32 @test_i32_8388352_mask_shl_9(i32 %a0) {
809
803
define i32 @test_i32_8388352_mask_shl_10 (i32 %a0 ) {
810
804
; CHECK-LABEL: test_i32_8388352_mask_shl_10:
811
805
; CHECK: // %bb.0:
812
- ; CHECK-NEXT: and w8, w0, #0x3fff00
813
- ; CHECK-NEXT: lsl w0, w8, #10
806
+ ; CHECK-NEXT: lsl w8, w0, #10
807
+ ; CHECK-NEXT: and w0, w8, #0xfffc0000
814
808
; CHECK-NEXT: ret
815
809
%t0 = and i32 %a0 , 8388352
816
810
%t1 = shl i32 %t0 , 10
@@ -820,8 +814,8 @@ define i32 @test_i32_8388352_mask_shl_10(i32 %a0) {
820
814
define i32 @test_i32_4294836224_mask_shl_1 (i32 %a0 ) {
821
815
; CHECK-LABEL: test_i32_4294836224_mask_shl_1:
822
816
; CHECK: // %bb.0:
823
- ; CHECK-NEXT: and w8, w0, #0x7ffe0000
824
- ; CHECK-NEXT: lsl w0, w8, #1
817
+ ; CHECK-NEXT: lsl w8, w0, #1
818
+ ; CHECK-NEXT: and w0, w8, #0xfffc0000
825
819
; CHECK-NEXT: ret
826
820
%t0 = and i32 %a0 , 4294836224
827
821
%t1 = shl i32 %t0 , 1
@@ -1015,8 +1009,7 @@ define i64 @test_i64_18446744065119617024_mask_ashr_34(i64 %a0) {
1015
1009
define i64 @test_i64_2147483647_mask_shl_1 (i64 %a0 ) {
1016
1010
; CHECK-LABEL: test_i64_2147483647_mask_shl_1:
1017
1011
; CHECK: // %bb.0:
1018
- ; CHECK-NEXT: and x8, x0, #0x7fffffff
1019
- ; CHECK-NEXT: lsl x0, x8, #1
1012
+ ; CHECK-NEXT: lsl w0, w0, #1
1020
1013
; CHECK-NEXT: ret
1021
1014
%t0 = and i64 %a0 , 2147483647
1022
1015
%t1 = shl i64 %t0 , 1
@@ -1054,8 +1047,8 @@ define i64 @test_i64_2147483647_mask_shl_34(i64 %a0) {
1054
1047
define i64 @test_i64_140737488289792_mask_shl_15 (i64 %a0 ) {
1055
1048
; CHECK-LABEL: test_i64_140737488289792_mask_shl_15:
1056
1049
; CHECK: // %bb.0:
1057
- ; CHECK-NEXT: and x8, x0, #0x7fffffff0000
1058
- ; CHECK-NEXT: lsl x0, x8, #15
1050
+ ; CHECK-NEXT: lsl x8, x0, #15
1051
+ ; CHECK-NEXT: and x0, x8, #0x3fffffff80000000
1059
1052
; CHECK-NEXT: ret
1060
1053
%t0 = and i64 %a0 , 140737488289792
1061
1054
%t1 = shl i64 %t0 , 15
@@ -1064,8 +1057,8 @@ define i64 @test_i64_140737488289792_mask_shl_15(i64 %a0) {
1064
1057
define i64 @test_i64_140737488289792_mask_shl_16 (i64 %a0 ) {
1065
1058
; CHECK-LABEL: test_i64_140737488289792_mask_shl_16:
1066
1059
; CHECK: // %bb.0:
1067
- ; CHECK-NEXT: and x8, x0, #0x7fffffff0000
1068
- ; CHECK-NEXT: lsl x0, x8, #16
1060
+ ; CHECK-NEXT: lsl x8, x0, #16
1061
+ ; CHECK-NEXT: and x0, x8, #0x7fffffff00000000
1069
1062
; CHECK-NEXT: ret
1070
1063
%t0 = and i64 %a0 , 140737488289792
1071
1064
%t1 = shl i64 %t0 , 16
@@ -1074,8 +1067,8 @@ define i64 @test_i64_140737488289792_mask_shl_16(i64 %a0) {
1074
1067
define i64 @test_i64_140737488289792_mask_shl_17 (i64 %a0 ) {
1075
1068
; CHECK-LABEL: test_i64_140737488289792_mask_shl_17:
1076
1069
; CHECK: // %bb.0:
1077
- ; CHECK-NEXT: and x8, x0, #0x7fffffff0000
1078
- ; CHECK-NEXT: lsl x0, x8, #17
1070
+ ; CHECK-NEXT: lsl x8, x0, #17
1071
+ ; CHECK-NEXT: and x0, x8, #0xfffffffe00000000
1079
1072
; CHECK-NEXT: ret
1080
1073
%t0 = and i64 %a0 , 140737488289792
1081
1074
%t1 = shl i64 %t0 , 17
@@ -1084,8 +1077,8 @@ define i64 @test_i64_140737488289792_mask_shl_17(i64 %a0) {
1084
1077
define i64 @test_i64_140737488289792_mask_shl_18 (i64 %a0 ) {
1085
1078
; CHECK-LABEL: test_i64_140737488289792_mask_shl_18:
1086
1079
; CHECK: // %bb.0:
1087
- ; CHECK-NEXT: and x8, x0, #0x3fffffff0000
1088
- ; CHECK-NEXT: lsl x0, x8, #18
1080
+ ; CHECK-NEXT: lsl x8, x0, #18
1081
+ ; CHECK-NEXT: and x0, x8, #0xfffffffc00000000
1089
1082
; CHECK-NEXT: ret
1090
1083
%t0 = and i64 %a0 , 140737488289792
1091
1084
%t1 = shl i64 %t0 , 18
@@ -1095,8 +1088,8 @@ define i64 @test_i64_140737488289792_mask_shl_18(i64 %a0) {
1095
1088
define i64 @test_i64_18446744065119617024_mask_shl_1 (i64 %a0 ) {
1096
1089
; CHECK-LABEL: test_i64_18446744065119617024_mask_shl_1:
1097
1090
; CHECK: // %bb.0:
1098
- ; CHECK-NEXT: and x8, x0, #0x7ffffffe00000000
1099
- ; CHECK-NEXT: lsl x0, x8, #1
1091
+ ; CHECK-NEXT: lsl x8, x0, #1
1092
+ ; CHECK-NEXT: and x0, x8, #0xfffffffc00000000
1100
1093
; CHECK-NEXT: ret
1101
1094
%t0 = and i64 %a0 , 18446744065119617024
1102
1095
%t1 = shl i64 %t0 , 1
0 commit comments