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