; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
; RUN: opt < %s -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -mcpu=cortex-a9 | FileCheck %s --check-prefix=CHECK-NEON
-; RUN: opt -cost-model -analyze -mtriple=thumbv8.1-m.main-none-eabi -mattr=+mve.fp < %s | FileCheck %s --check-prefix=CHECK-MVE
+; RUN: opt -cost-model -analyze -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve.fp < %s | FileCheck %s --check-prefix=CHECK-MVE
define void @i8() {
; CHECK-NEON-LABEL: 'i8'
; CHECK-NEON-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; CHECK-MVE-LABEL: 'i64'
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %1 = sdiv i64 undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %2 = udiv i64 undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %1 = sdiv i64 undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %2 = udiv i64 undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %3 = srem i64 undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %4 = urem i64 undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %5 = sdiv i64 undef, 2
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %6 = udiv i64 undef, 2
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %5 = sdiv i64 undef, 2
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %6 = udiv i64 undef, 2
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %7 = srem i64 undef, 2
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %8 = urem i64 undef, 2
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
; CHECK-NEON-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; CHECK-MVE-LABEL: 'vi64'
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t1 = sdiv <2 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t2 = udiv <2 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %t1 = sdiv <2 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %t2 = udiv <2 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t3 = srem <2 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t4 = urem <2 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f1 = sdiv <4 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f2 = udiv <4 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %f1 = sdiv <4 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %f2 = udiv <4 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f3 = srem <4 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f4 = urem <4 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e1 = sdiv <8 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e2 = udiv <8 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 80 for instruction: %e1 = sdiv <8 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 80 for instruction: %e2 = udiv <8 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e3 = srem <8 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e4 = urem <8 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s1 = sdiv <16 x i64> undef, undef
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s2 = udiv <16 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 288 for instruction: %s1 = sdiv <16 x i64> undef, undef
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 288 for instruction: %s2 = udiv <16 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s3 = srem <16 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s4 = urem <16 x i64> undef, undef
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
; CHECK-NEON-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; CHECK-MVE-LABEL: 'vi64_2'
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t1 = sdiv <2 x i64> undef, <i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t2 = udiv <2 x i64> undef, <i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %t1 = sdiv <2 x i64> undef, <i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %t2 = udiv <2 x i64> undef, <i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t3 = srem <2 x i64> undef, <i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %t4 = urem <2 x i64> undef, <i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f1 = sdiv <4 x i64> undef, <i64 2, i64 2, i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f2 = udiv <4 x i64> undef, <i64 2, i64 2, i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %f1 = sdiv <4 x i64> undef, <i64 2, i64 2, i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 24 for instruction: %f2 = udiv <4 x i64> undef, <i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f3 = srem <4 x i64> undef, <i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %f4 = urem <4 x i64> undef, <i64 2, i64 2, i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e1 = sdiv <8 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e2 = udiv <8 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 80 for instruction: %e1 = sdiv <8 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 80 for instruction: %e2 = udiv <8 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e3 = srem <8 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %e4 = urem <8 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s1 = sdiv <16 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
-; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s2 = udiv <16 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 288 for instruction: %s1 = sdiv <16 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
+; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 288 for instruction: %s2 = udiv <16 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s3 = srem <16 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 272 for instruction: %s4 = urem <16 x i64> undef, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
; CHECK-MVE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
-; RUN: llc --verify-machineinstrs -mtriple=thumbv8.1-m.main-none-eabi -mattr=+mve %s -o - | FileCheck %s -check-prefix=CHECK --check-prefix=CHECK-MVE
-; RUN: llc --verify-machineinstrs -mtriple=thumbv8.1-m.main-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK --check-prefix=CHECK-NON-MVE
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc --verify-machineinstrs -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve %s -o - | FileCheck %s -check-prefix=CHECK --check-prefix=CHECK-MVE
+; RUN: llc --verify-machineinstrs -mtriple=thumbv8.1m.main-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK --check-prefix=CHECK-NON-MVE
define i64 @shift_left_reg(i64 %x, i64 %y) {
; CHECK-MVE-LABEL: shift_left_reg:
;
; CHECK-NON-MVE-LABEL: shift_left_reg:
; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: .save {r7, lr}
-; CHECK-NON-MVE-NEXT: push {r7, lr}
-; CHECK-NON-MVE-NEXT: bl __aeabi_llsl
-; CHECK-NON-MVE-NEXT: pop {r7}
-; CHECK-NON-MVE-NEXT: pop {r2}
-; CHECK-NON-MVE-NEXT: bx r2
+; CHECK-NON-MVE-NEXT: rsb.w r3, r2, #32
+; CHECK-NON-MVE-NEXT: lsls r1, r2
+; CHECK-NON-MVE-NEXT: lsr.w r3, r0, r3
+; CHECK-NON-MVE-NEXT: orrs r1, r3
+; CHECK-NON-MVE-NEXT: subs.w r3, r2, #32
+; CHECK-NON-MVE-NEXT: it pl
+; CHECK-NON-MVE-NEXT: lslpl.w r1, r0, r3
+; CHECK-NON-MVE-NEXT: lsl.w r0, r0, r2
+; CHECK-NON-MVE-NEXT: it pl
+; CHECK-NON-MVE-NEXT: movpl r0, #0
+; CHECK-NON-MVE-NEXT: bx lr
entry:
%shl = shl i64 %x, %y
ret i64 %shl
;
; CHECK-NON-MVE-LABEL: shift_left_imm:
; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: lsrs r2, r0, #29
; CHECK-NON-MVE-NEXT: lsls r1, r1, #3
-; CHECK-NON-MVE-NEXT: adds r1, r1, r2
+; CHECK-NON-MVE-NEXT: orr.w r1, r1, r0, lsr #29
; CHECK-NON-MVE-NEXT: lsls r0, r0, #3
; CHECK-NON-MVE-NEXT: bx lr
entry:
}
define i64 @shift_left_imm_big2(i64 %x) {
-; CHECK-MVE-LABEL: shift_left_imm_big2:
-; CHECK-MVE: @ %bb.0: @ %entry
-; CHECK-MVE-NEXT: mov r1, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: bx lr
-;
-; CHECK-NON-MVE-LABEL: shift_left_imm_big2:
-; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: movs r1, r0
-; CHECK-NON-MVE-NEXT: movs r0, #0
-; CHECK-NON-MVE-NEXT: bx lr
+; CHECK-LABEL: shift_left_imm_big2:
+; CHECK: @ %bb.0: @ %entry
+; CHECK-NEXT: mov r1, r0
+; CHECK-NEXT: movs r0, #0
+; CHECK-NEXT: bx lr
entry:
%shl = shl i64 %x, 32
ret i64 %shl
;
; CHECK-NON-MVE-LABEL: shift_right_reg:
; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: .save {r7, lr}
-; CHECK-NON-MVE-NEXT: push {r7, lr}
-; CHECK-NON-MVE-NEXT: bl __aeabi_llsr
-; CHECK-NON-MVE-NEXT: pop {r7}
-; CHECK-NON-MVE-NEXT: pop {r2}
-; CHECK-NON-MVE-NEXT: bx r2
+; CHECK-NON-MVE-NEXT: rsb.w r3, r2, #32
+; CHECK-NON-MVE-NEXT: lsrs r0, r2
+; CHECK-NON-MVE-NEXT: lsl.w r3, r1, r3
+; CHECK-NON-MVE-NEXT: orrs r0, r3
+; CHECK-NON-MVE-NEXT: subs.w r3, r2, #32
+; CHECK-NON-MVE-NEXT: it pl
+; CHECK-NON-MVE-NEXT: lsrpl.w r0, r1, r3
+; CHECK-NON-MVE-NEXT: lsr.w r1, r1, r2
+; CHECK-NON-MVE-NEXT: it pl
+; CHECK-NON-MVE-NEXT: movpl r1, #0
+; CHECK-NON-MVE-NEXT: bx lr
entry:
%shr = lshr i64 %x, %y
ret i64 %shr
;
; CHECK-NON-MVE-LABEL: shift_right_imm:
; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: lsls r2, r1, #29
; CHECK-NON-MVE-NEXT: lsrs r0, r0, #3
-; CHECK-NON-MVE-NEXT: adds r0, r0, r2
+; CHECK-NON-MVE-NEXT: orr.w r0, r0, r1, lsl #29
; CHECK-NON-MVE-NEXT: lsrs r1, r1, #3
; CHECK-NON-MVE-NEXT: bx lr
entry:
}
define i64 @shift_right_imm_big2(i64 %x) {
-; CHECK-MVE-LABEL: shift_right_imm_big2:
-; CHECK-MVE: @ %bb.0: @ %entry
-; CHECK-MVE-NEXT: mov r0, r1
-; CHECK-MVE-NEXT: movs r1, #0
-; CHECK-MVE-NEXT: bx lr
-;
-; CHECK-NON-MVE-LABEL: shift_right_imm_big2:
-; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: movs r0, r1
-; CHECK-NON-MVE-NEXT: movs r1, #0
-; CHECK-NON-MVE-NEXT: bx lr
+; CHECK-LABEL: shift_right_imm_big2:
+; CHECK: @ %bb.0: @ %entry
+; CHECK-NEXT: mov r0, r1
+; CHECK-NEXT: movs r1, #0
+; CHECK-NEXT: bx lr
entry:
%shr = lshr i64 %x, 32
ret i64 %shr
;
; CHECK-NON-MVE-LABEL: shift_arithmetic_right_reg:
; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: .save {r7, lr}
-; CHECK-NON-MVE-NEXT: push {r7, lr}
-; CHECK-NON-MVE-NEXT: bl __aeabi_lasr
-; CHECK-NON-MVE-NEXT: pop {r7}
-; CHECK-NON-MVE-NEXT: pop {r2}
-; CHECK-NON-MVE-NEXT: bx r2
+; CHECK-NON-MVE-NEXT: rsb.w r3, r2, #32
+; CHECK-NON-MVE-NEXT: lsrs r0, r2
+; CHECK-NON-MVE-NEXT: lsl.w r3, r1, r3
+; CHECK-NON-MVE-NEXT: orrs r0, r3
+; CHECK-NON-MVE-NEXT: subs.w r3, r2, #32
+; CHECK-NON-MVE-NEXT: asr.w r2, r1, r2
+; CHECK-NON-MVE-NEXT: it pl
+; CHECK-NON-MVE-NEXT: asrpl.w r0, r1, r3
+; CHECK-NON-MVE-NEXT: it pl
+; CHECK-NON-MVE-NEXT: asrpl r2, r1, #31
+; CHECK-NON-MVE-NEXT: mov r1, r2
+; CHECK-NON-MVE-NEXT: bx lr
entry:
%shr = ashr i64 %x, %y
ret i64 %shr
;
; CHECK-NON-MVE-LABEL: shift_arithmetic_right_imm:
; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: lsls r2, r1, #29
; CHECK-NON-MVE-NEXT: lsrs r0, r0, #3
-; CHECK-NON-MVE-NEXT: adds r0, r0, r2
+; CHECK-NON-MVE-NEXT: orr.w r0, r0, r1, lsl #29
; CHECK-NON-MVE-NEXT: asrs r1, r1, #3
; CHECK-NON-MVE-NEXT: bx lr
entry:
; CHECK-NON-MVE-LABEL: fn1:
; CHECK-NON-MVE: @ %bb.0: @ %entry
; CHECK-NON-MVE-NEXT: ldr r1, [r0, #4]
-; CHECK-NON-MVE-NEXT: lsls r2, r1, #8
-; CHECK-NON-MVE-NEXT: movs r3, #3
-; CHECK-NON-MVE-NEXT: str r2, [r0, r3]
-; CHECK-NON-MVE-NEXT: adds r0, r0, #3
-; CHECK-NON-MVE-NEXT: lsrs r1, r1, #24
-; CHECK-NON-MVE-NEXT: strb r1, [r0, #4]
+; CHECK-NON-MVE-NEXT: lsrs r2, r1, #24
+; CHECK-NON-MVE-NEXT: lsls r1, r1, #8
+; CHECK-NON-MVE-NEXT: strb r2, [r0, #7]
+; CHECK-NON-MVE-NEXT: str.w r1, [r0, #3]
; CHECK-NON-MVE-NEXT: bx lr
entry:
%carey = getelementptr inbounds %struct.bar, %struct.bar* %a, i32 0, i32 2
%struct.a = type { i96 }
define void @lsll_128bit_shift(%struct.a* nocapture %x) local_unnamed_addr #0 {
-; CHECK-MVE-LABEL: lsll_128bit_shift:
-; CHECK-MVE: @ %bb.0: @ %entry
-; CHECK-MVE-NEXT: movs r1, #0
-; CHECK-MVE-NEXT: strd r1, r1, [r0]
-; CHECK-MVE-NEXT: str r1, [r0, #8]
-; CHECK-MVE-NEXT: bx lr
-;
-; CHECK-NON-MVE-LABEL: lsll_128bit_shift:
-; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: movs r1, #0
-; CHECK-NON-MVE-NEXT: str r1, [r0]
-; CHECK-NON-MVE-NEXT: str r1, [r0, #4]
-; CHECK-NON-MVE-NEXT: str r1, [r0, #8]
-; CHECK-NON-MVE-NEXT: bx lr
+; CHECK-LABEL: lsll_128bit_shift:
+; CHECK: @ %bb.0: @ %entry
+; CHECK-NEXT: movs r1, #0
+; CHECK-NEXT: strd r1, r1, [r0]
+; CHECK-NEXT: str r1, [r0, #8]
+; CHECK-NEXT: bx lr
entry:
%0 = bitcast %struct.a* %x to i128*
%bf.load = load i128, i128* %0, align 8
%struct.b = type { i184 }
define void @lsll_256bit_shift(%struct.b* nocapture %x) local_unnamed_addr #0 {
-; CHECK-MVE-LABEL: lsll_256bit_shift:
-; CHECK-MVE: @ %bb.0: @ %entry
-; CHECK-MVE-NEXT: movs r1, #0
-; CHECK-MVE-NEXT: str r1, [r0, #16]
-; CHECK-MVE-NEXT: strd r1, r1, [r0, #8]
-; CHECK-MVE-NEXT: strd r1, r1, [r0]
-; CHECK-MVE-NEXT: ldrb r1, [r0, #23]
-; CHECK-MVE-NEXT: lsls r1, r1, #24
-; CHECK-MVE-NEXT: str r1, [r0, #20]
-; CHECK-MVE-NEXT: bx lr
-;
-; CHECK-NON-MVE-LABEL: lsll_256bit_shift:
-; CHECK-NON-MVE: @ %bb.0: @ %entry
-; CHECK-NON-MVE-NEXT: movs r1, #0
-; CHECK-NON-MVE-NEXT: str r1, [r0, #16]
-; CHECK-NON-MVE-NEXT: str r1, [r0, #8]
-; CHECK-NON-MVE-NEXT: str r1, [r0, #12]
-; CHECK-NON-MVE-NEXT: str r1, [r0]
-; CHECK-NON-MVE-NEXT: str r1, [r0, #4]
-; CHECK-NON-MVE-NEXT: ldrb r1, [r0, #23]
-; CHECK-NON-MVE-NEXT: lsls r1, r1, #24
-; CHECK-NON-MVE-NEXT: str r1, [r0, #20]
-; CHECK-NON-MVE-NEXT: bx lr
+; CHECK-LABEL: lsll_256bit_shift:
+; CHECK: @ %bb.0: @ %entry
+; CHECK-NEXT: movs r1, #0
+; CHECK-NEXT: str r1, [r0, #16]
+; CHECK-NEXT: strd r1, r1, [r0, #8]
+; CHECK-NEXT: strd r1, r1, [r0]
+; CHECK-NEXT: ldrb r1, [r0, #23]
+; CHECK-NEXT: lsls r1, r1, #24
+; CHECK-NEXT: str r1, [r0, #20]
+; CHECK-NEXT: bx lr
entry:
%0 = bitcast %struct.b* %x to i192*
%bf.load = load i192, i192* %0, align 8