@@ -190,7 +190,8 @@ define i8 @test_i8_224_mask_ashr_6(i8 %a0) {
190190define i8 @test_i8_7_mask_shl_1 (i8 %a0 ) {
191191; CHECK-LABEL: test_i8_7_mask_shl_1:
192192; 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
194195; CHECK-NEXT: ret
195196 %t0 = and i8 %a0 , 7
196197 %t1 = shl i8 %t0 , 1
@@ -199,7 +200,8 @@ define i8 @test_i8_7_mask_shl_1(i8 %a0) {
199200define i8 @test_i8_7_mask_shl_4 (i8 %a0 ) {
200201; CHECK-LABEL: test_i8_7_mask_shl_4:
201202; 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
203205; CHECK-NEXT: ret
204206 %t0 = and i8 %a0 , 7
205207 %t1 = shl i8 %t0 , 4
@@ -227,8 +229,8 @@ define i8 @test_i8_7_mask_shl_6(i8 %a0) {
227229define i8 @test_i8_28_mask_shl_1 (i8 %a0 ) {
228230; CHECK-LABEL: test_i8_28_mask_shl_1:
229231; 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
232234; CHECK-NEXT: ret
233235 %t0 = and i8 %a0 , 28
234236 %t1 = shl i8 %t0 , 1
@@ -237,8 +239,8 @@ define i8 @test_i8_28_mask_shl_1(i8 %a0) {
237239define i8 @test_i8_28_mask_shl_2 (i8 %a0 ) {
238240; CHECK-LABEL: test_i8_28_mask_shl_2:
239241; 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
242244; CHECK-NEXT: ret
243245 %t0 = and i8 %a0 , 28
244246 %t1 = shl i8 %t0 , 2
@@ -247,8 +249,8 @@ define i8 @test_i8_28_mask_shl_2(i8 %a0) {
247249define i8 @test_i8_28_mask_shl_3 (i8 %a0 ) {
248250; CHECK-LABEL: test_i8_28_mask_shl_3:
249251; 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
252254; CHECK-NEXT: ret
253255 %t0 = and i8 %a0 , 28
254256 %t1 = shl i8 %t0 , 3
@@ -257,8 +259,8 @@ define i8 @test_i8_28_mask_shl_3(i8 %a0) {
257259define i8 @test_i8_28_mask_shl_4 (i8 %a0 ) {
258260; CHECK-LABEL: test_i8_28_mask_shl_4:
259261; 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
262264; CHECK-NEXT: ret
263265 %t0 = and i8 %a0 , 28
264266 %t1 = shl i8 %t0 , 4
@@ -268,8 +270,8 @@ define i8 @test_i8_28_mask_shl_4(i8 %a0) {
268270define i8 @test_i8_224_mask_shl_1 (i8 %a0 ) {
269271; CHECK-LABEL: test_i8_224_mask_shl_1:
270272; 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
273275; CHECK-NEXT: ret
274276 %t0 = and i8 %a0 , 224
275277 %t1 = shl i8 %t0 , 1
@@ -463,7 +465,8 @@ define i16 @test_i16_65024_mask_ashr_10(i16 %a0) {
463465define i16 @test_i16_127_mask_shl_1 (i16 %a0 ) {
464466; CHECK-LABEL: test_i16_127_mask_shl_1:
465467; 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
467470; CHECK-NEXT: ret
468471 %t0 = and i16 %a0 , 127
469472 %t1 = shl i16 %t0 , 1
@@ -472,7 +475,8 @@ define i16 @test_i16_127_mask_shl_1(i16 %a0) {
472475define i16 @test_i16_127_mask_shl_8 (i16 %a0 ) {
473476; CHECK-LABEL: test_i16_127_mask_shl_8:
474477; 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
476480; CHECK-NEXT: ret
477481 %t0 = and i16 %a0 , 127
478482 %t1 = shl i16 %t0 , 8
@@ -500,8 +504,8 @@ define i16 @test_i16_127_mask_shl_10(i16 %a0) {
500504define i16 @test_i16_2032_mask_shl_3 (i16 %a0 ) {
501505; CHECK-LABEL: test_i16_2032_mask_shl_3:
502506; 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
505509; CHECK-NEXT: ret
506510 %t0 = and i16 %a0 , 2032
507511 %t1 = shl i16 %t0 , 3
@@ -510,8 +514,8 @@ define i16 @test_i16_2032_mask_shl_3(i16 %a0) {
510514define i16 @test_i16_2032_mask_shl_4 (i16 %a0 ) {
511515; CHECK-LABEL: test_i16_2032_mask_shl_4:
512516; 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
515519; CHECK-NEXT: ret
516520 %t0 = and i16 %a0 , 2032
517521 %t1 = shl i16 %t0 , 4
@@ -520,8 +524,8 @@ define i16 @test_i16_2032_mask_shl_4(i16 %a0) {
520524define i16 @test_i16_2032_mask_shl_5 (i16 %a0 ) {
521525; CHECK-LABEL: test_i16_2032_mask_shl_5:
522526; 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
525529; CHECK-NEXT: ret
526530 %t0 = and i16 %a0 , 2032
527531 %t1 = shl i16 %t0 , 5
@@ -530,8 +534,8 @@ define i16 @test_i16_2032_mask_shl_5(i16 %a0) {
530534define i16 @test_i16_2032_mask_shl_6 (i16 %a0 ) {
531535; CHECK-LABEL: test_i16_2032_mask_shl_6:
532536; 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
535539; CHECK-NEXT: ret
536540 %t0 = and i16 %a0 , 2032
537541 %t1 = shl i16 %t0 , 6
@@ -541,8 +545,8 @@ define i16 @test_i16_2032_mask_shl_6(i16 %a0) {
541545define i16 @test_i16_65024_mask_shl_1 (i16 %a0 ) {
542546; CHECK-LABEL: test_i16_65024_mask_shl_1:
543547; 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
546550; CHECK-NEXT: ret
547551 %t0 = and i16 %a0 , 65024
548552 %t1 = shl i16 %t0 , 1
@@ -736,7 +740,8 @@ define i32 @test_i32_4294836224_mask_ashr_18(i32 %a0) {
736740define i32 @test_i32_32767_mask_shl_1 (i32 %a0 ) {
737741; CHECK-LABEL: test_i32_32767_mask_shl_1:
738742; 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
740745; CHECK-NEXT: ret
741746 %t0 = and i32 %a0 , 32767
742747 %t1 = shl i32 %t0 , 1
@@ -745,7 +750,8 @@ define i32 @test_i32_32767_mask_shl_1(i32 %a0) {
745750define i32 @test_i32_32767_mask_shl_16 (i32 %a0 ) {
746751; CHECK-LABEL: test_i32_32767_mask_shl_16:
747752; 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
749755; CHECK-NEXT: ret
750756 %t0 = and i32 %a0 , 32767
751757 %t1 = shl i32 %t0 , 16
@@ -773,8 +779,8 @@ define i32 @test_i32_32767_mask_shl_18(i32 %a0) {
773779define i32 @test_i32_8388352_mask_shl_7 (i32 %a0 ) {
774780; CHECK-LABEL: test_i32_8388352_mask_shl_7:
775781; 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
778784; CHECK-NEXT: ret
779785 %t0 = and i32 %a0 , 8388352
780786 %t1 = shl i32 %t0 , 7
@@ -783,8 +789,8 @@ define i32 @test_i32_8388352_mask_shl_7(i32 %a0) {
783789define i32 @test_i32_8388352_mask_shl_8 (i32 %a0 ) {
784790; CHECK-LABEL: test_i32_8388352_mask_shl_8:
785791; 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
788794; CHECK-NEXT: ret
789795 %t0 = and i32 %a0 , 8388352
790796 %t1 = shl i32 %t0 , 8
@@ -793,8 +799,8 @@ define i32 @test_i32_8388352_mask_shl_8(i32 %a0) {
793799define i32 @test_i32_8388352_mask_shl_9 (i32 %a0 ) {
794800; CHECK-LABEL: test_i32_8388352_mask_shl_9:
795801; 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
798804; CHECK-NEXT: ret
799805 %t0 = and i32 %a0 , 8388352
800806 %t1 = shl i32 %t0 , 9
@@ -803,8 +809,8 @@ define i32 @test_i32_8388352_mask_shl_9(i32 %a0) {
803809define i32 @test_i32_8388352_mask_shl_10 (i32 %a0 ) {
804810; CHECK-LABEL: test_i32_8388352_mask_shl_10:
805811; 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
808814; CHECK-NEXT: ret
809815 %t0 = and i32 %a0 , 8388352
810816 %t1 = shl i32 %t0 , 10
@@ -814,8 +820,8 @@ define i32 @test_i32_8388352_mask_shl_10(i32 %a0) {
814820define i32 @test_i32_4294836224_mask_shl_1 (i32 %a0 ) {
815821; CHECK-LABEL: test_i32_4294836224_mask_shl_1:
816822; 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
819825; CHECK-NEXT: ret
820826 %t0 = and i32 %a0 , 4294836224
821827 %t1 = shl i32 %t0 , 1
@@ -1009,7 +1015,8 @@ define i64 @test_i64_18446744065119617024_mask_ashr_34(i64 %a0) {
10091015define i64 @test_i64_2147483647_mask_shl_1 (i64 %a0 ) {
10101016; CHECK-LABEL: test_i64_2147483647_mask_shl_1:
10111017; CHECK: // %bb.0:
1012- ; CHECK-NEXT: lsl w0, w0, #1
1018+ ; CHECK-NEXT: and x8, x0, #0x7fffffff
1019+ ; CHECK-NEXT: lsl x0, x8, #1
10131020; CHECK-NEXT: ret
10141021 %t0 = and i64 %a0 , 2147483647
10151022 %t1 = shl i64 %t0 , 1
@@ -1047,8 +1054,8 @@ define i64 @test_i64_2147483647_mask_shl_34(i64 %a0) {
10471054define i64 @test_i64_140737488289792_mask_shl_15 (i64 %a0 ) {
10481055; CHECK-LABEL: test_i64_140737488289792_mask_shl_15:
10491056; 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
10521059; CHECK-NEXT: ret
10531060 %t0 = and i64 %a0 , 140737488289792
10541061 %t1 = shl i64 %t0 , 15
@@ -1057,8 +1064,8 @@ define i64 @test_i64_140737488289792_mask_shl_15(i64 %a0) {
10571064define i64 @test_i64_140737488289792_mask_shl_16 (i64 %a0 ) {
10581065; CHECK-LABEL: test_i64_140737488289792_mask_shl_16:
10591066; 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
10621069; CHECK-NEXT: ret
10631070 %t0 = and i64 %a0 , 140737488289792
10641071 %t1 = shl i64 %t0 , 16
@@ -1067,8 +1074,8 @@ define i64 @test_i64_140737488289792_mask_shl_16(i64 %a0) {
10671074define i64 @test_i64_140737488289792_mask_shl_17 (i64 %a0 ) {
10681075; CHECK-LABEL: test_i64_140737488289792_mask_shl_17:
10691076; 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
10721079; CHECK-NEXT: ret
10731080 %t0 = and i64 %a0 , 140737488289792
10741081 %t1 = shl i64 %t0 , 17
@@ -1077,8 +1084,8 @@ define i64 @test_i64_140737488289792_mask_shl_17(i64 %a0) {
10771084define i64 @test_i64_140737488289792_mask_shl_18 (i64 %a0 ) {
10781085; CHECK-LABEL: test_i64_140737488289792_mask_shl_18:
10791086; 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
10821089; CHECK-NEXT: ret
10831090 %t0 = and i64 %a0 , 140737488289792
10841091 %t1 = shl i64 %t0 , 18
@@ -1088,8 +1095,8 @@ define i64 @test_i64_140737488289792_mask_shl_18(i64 %a0) {
10881095define i64 @test_i64_18446744065119617024_mask_shl_1 (i64 %a0 ) {
10891096; CHECK-LABEL: test_i64_18446744065119617024_mask_shl_1:
10901097; 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
10931100; CHECK-NEXT: ret
10941101 %t0 = and i64 %a0 , 18446744065119617024
10951102 %t1 = shl i64 %t0 , 1
0 commit comments