define i64 @asrl_0(i64 %X) {
; CHECK-LABEL: asrl_0:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #0
-; CHECK-NEXT: asrl r0, r1, r2
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @asrl_23(i64 %X) {
; CHECK-LABEL: asrl_23:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #23
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #23
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @asrl_32(i64 %X) {
; CHECK-LABEL: asrl_32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @asrl_m2(i64 %X) {
; CHECK-LABEL: asrl_m2:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #1
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #2
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @asrl_m32(i64 %X) {
; CHECK-LABEL: asrl_m32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @lsll_0(i64 %X) {
; CHECK-LABEL: lsll_0:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #0
-; CHECK-NEXT: lsll r0, r1, r2
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @lsll_23(i64 %X) {
; CHECK-LABEL: lsll_23:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #23
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #23
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @lsll_32(i64 %X) {
; CHECK-LABEL: lsll_32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @lsll_m2(i64 %X) {
; CHECK-LABEL: lsll_m2:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #1
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #2
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i64 @lsll_m32(i64 %X) {
; CHECK-LABEL: lsll_m32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_bottom3(i64 %X) {
; CHECK-LABEL: ashr_demand_bottom3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #3
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #3
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @lsll_demand_bottom3(i64 %X) {
; CHECK-LABEL: lsll_demand_bottom3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #3
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #3
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_bottomm3(i64 %X) {
; CHECK-LABEL: ashr_demand_bottomm3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #2
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #3
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @lsll_demand_bottomm3(i64 %X) {
; CHECK-LABEL: lsll_demand_bottomm3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #2
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #3
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_bottom31(i64 %X) {
; CHECK-LABEL: ashr_demand_bottom31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #31
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #31
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @lsll_demand_bottom31(i64 %X) {
; CHECK-LABEL: lsll_demand_bottom31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #31
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #31
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_bottomm31(i64 %X) {
; CHECK-LABEL: ashr_demand_bottomm31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #30
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #31
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @lsll_demand_bottomm31(i64 %X) {
; CHECK-LABEL: lsll_demand_bottomm31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #30
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #31
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_bottom32(i64 %X) {
; CHECK-LABEL: ashr_demand_bottom32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @lsll_demand_bottom32(i64 %X) {
; CHECK-LABEL: lsll_demand_bottom32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_bottomm32(i64 %X) {
; CHECK-LABEL: ashr_demand_bottomm32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @lsll_demand_bottomm32(i64 %X) {
; CHECK-LABEL: lsll_demand_bottomm32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #32
; CHECK-NEXT: bx lr
entry:
%0 = lshr i64 %X, 32
define i32 @ashr_demand_top3(i64 %X) {
; CHECK-LABEL: ashr_demand_top3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #3
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #3
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_top3(i64 %X) {
; CHECK-LABEL: lsll_demand_top3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #3
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #3
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_topm3(i64 %X) {
; CHECK-LABEL: ashr_demand_topm3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #2
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #3
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_topm3(i64 %X) {
; CHECK-LABEL: lsll_demand_topm3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #2
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #3
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_top31(i64 %X) {
; CHECK-LABEL: ashr_demand_top31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #31
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #31
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_top31(i64 %X) {
; CHECK-LABEL: lsll_demand_top31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #31
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #31
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_topm31(i64 %X) {
; CHECK-LABEL: ashr_demand_topm31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #30
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #31
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_topm31(i64 %X) {
; CHECK-LABEL: lsll_demand_topm31:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #30
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #31
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_top32(i64 %X) {
; CHECK-LABEL: ashr_demand_top32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #32
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_top32(i64 %X) {
; CHECK-LABEL: lsll_demand_top32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_topm32(i64 %X) {
; CHECK-LABEL: ashr_demand_topm32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_topm32(i64 %X) {
; CHECK-LABEL: lsll_demand_topm32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #32
; CHECK-NEXT: mov r0, r1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_bottommask3(i64 %X) {
; CHECK-LABEL: ashr_demand_bottommask3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #3
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #3
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_bottommask3(i64 %X) {
; CHECK-LABEL: lsll_demand_bottommask3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #3
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #3
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_bottommaskm3(i64 %X) {
; CHECK-LABEL: ashr_demand_bottommaskm3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #2
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #3
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_bottommaskm3(i64 %X) {
; CHECK-LABEL: lsll_demand_bottommaskm3:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #2
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #3
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_bottommask32(i64 %X) {
; CHECK-LABEL: ashr_demand_bottommask32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: asrl r0, r1, #32
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_bottommask32(i64 %X) {
; CHECK-LABEL: lsll_demand_bottommask32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: movs r2, #32
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @ashr_demand_bottommaskm32(i64 %X) {
; CHECK-LABEL: ashr_demand_bottommaskm32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: asrl r0, r1, r2
+; CHECK-NEXT: lsll r0, r1, #32
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry:
define i32 @lsll_demand_bottommaskm32(i64 %X) {
; CHECK-LABEL: lsll_demand_bottommaskm32:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: mvn r2, #31
-; CHECK-NEXT: lsll r0, r1, r2
+; CHECK-NEXT: lsrl r0, r1, #32
; CHECK-NEXT: bic r0, r0, #1
; CHECK-NEXT: bx lr
entry: