[llvm] 3757c5d - [AArch64] Mark FIXED_REGS register class as non-allocatable (#212250)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 29 04:06:12 PDT 2026
Author: Cullen Rhodes
Date: 2026-07-29T12:06:05+01:00
New Revision: 3757c5d331d5d4781a7325ea890b2754c6dad5bb
URL: https://github.com/llvm/llvm-project/commit/3757c5d331d5d4781a7325ea890b2754c6dad5bb
DIFF: https://github.com/llvm/llvm-project/commit/3757c5d331d5d4781a7325ea890b2754c6dad5bb.diff
LOG: [AArch64] Mark FIXED_REGS register class as non-allocatable (#212250)
FIXED_REGS is not used for register allocation, but since it overlaps
the GPR classes via FP and SP, TableGen merges VG and FFR into the GPR
pressure set, giving it a static limit of 35.
The underlying GPR32all class has 33 registers: W0-W30, WZR, and WSP.
WZR and WSP are always reserved, leaving up to 31 allocatable registers
depending on whether W29 (FP) and W30 (LR) are reserved.
Marking FIXED_REGS non-allocatable removes VG and FFR from the pressure
set, reducing its static limit from 35 to 33 and its dynamic limit from
33 to 31. The corrected limit changes scheduling decisions made by the
register-pressure heuristics, which explains the test churn.
Assisted-by: codex
Added:
llvm/test/CodeGen/AArch64/misched-reg-pressure-limits.mir
Modified:
llvm/lib/Target/AArch64/AArch64RegisterInfo.td
llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
llvm/test/CodeGen/AArch64/clmul-fixed.ll
llvm/test/CodeGen/AArch64/clmul.ll
llvm/test/CodeGen/AArch64/neon-dotreduce.ll
llvm/test/CodeGen/AArch64/neon-extadd.ll
llvm/test/CodeGen/AArch64/sve-fixed-length-masked-expandloads.ll
llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll
llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-mulh.ll
llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-vselect.ll
llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-trunc.ll
llvm/test/TableGen/aarch64-register-info-stats.td
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64RegisterInfo.td b/llvm/lib/Target/AArch64/AArch64RegisterInfo.td
index 5dd8171853fd3..cfb72d840ae0f 100644
--- a/llvm/lib/Target/AArch64/AArch64RegisterInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64RegisterInfo.td
@@ -2022,5 +2022,7 @@ let isAllocatable = 0, GeneratePressureSet = 0 in {
def GeneralPurposeRegisters : RegisterCategory<[GPR64, GPR32]>;
-def FIXED_REGS : RegisterClass<"AArch64", [i64], 64, (add FP, SP, VG, FFR)>;
+def FIXED_REGS : RegisterClass<"AArch64", [i64], 64, (add FP, SP, VG, FFR)> {
+ let isAllocatable = 0;
+}
def FixedRegisters : RegisterCategory<[CCR, FIXED_REGS]>;
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll b/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
index d669c49cb019b..ce1dae3cdfeff 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
@@ -1219,14 +1219,14 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
;
; GISEL-LABEL: test_shl_i1024:
; GISEL: ; %bb.0: ; %entry
-; GISEL-NEXT: sub sp, sp, #432
-; GISEL-NEXT: stp x28, x27, [sp, #336] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x26, x25, [sp, #352] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x24, x23, [sp, #368] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x22, x21, [sp, #384] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x20, x19, [sp, #400] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x29, x30, [sp, #416] ; 16-byte Folded Spill
-; GISEL-NEXT: .cfi_def_cfa_offset 432
+; GISEL-NEXT: sub sp, sp, #448
+; GISEL-NEXT: stp x28, x27, [sp, #352] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x26, x25, [sp, #368] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x24, x23, [sp, #384] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x22, x21, [sp, #400] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x20, x19, [sp, #416] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x29, x30, [sp, #432] ; 16-byte Folded Spill
+; GISEL-NEXT: .cfi_def_cfa_offset 448
; GISEL-NEXT: .cfi_offset w30, -8
; GISEL-NEXT: .cfi_offset w29, -16
; GISEL-NEXT: .cfi_offset w19, -24
@@ -1243,51 +1243,55 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: mov w8, w2
; GISEL-NEXT: lsr x9, x8, #6
; GISEL-NEXT: and x12, x8, #0x3f
-; GISEL-NEXT: str x0, [sp, #144] ; 8-byte Spill
; GISEL-NEXT: and x14, x8, #0x3f
; GISEL-NEXT: mov w13, #64 ; =0x40
-; GISEL-NEXT: and x16, x8, #0x3f
-; GISEL-NEXT: lsl x0, x10, x12
+; GISEL-NEXT: mov x6, x1
+; GISEL-NEXT: str x0, [sp, #176] ; 8-byte Spill
+; GISEL-NEXT: lsl x28, x10, x12
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: sub x2, x13, x14
-; GISEL-NEXT: lsr x3, x10, x2
-; GISEL-NEXT: lsl x6, x11, x14
+; GISEL-NEXT: sub x1, x13, x14
+; GISEL-NEXT: lsr x0, x10, x1
+; GISEL-NEXT: lsl x3, x11, x14
; GISEL-NEXT: and x14, x8, #0x3f
-; GISEL-NEXT: csel x12, x0, xzr, eq
+; GISEL-NEXT: csel x12, x28, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: lsr x20, x11, x2
+; GISEL-NEXT: lsr x5, x11, x1
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x24, x0
+; GISEL-NEXT: and x16, x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x7, x3
+; GISEL-NEXT: mov x2, x0
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x28, x1
+; GISEL-NEXT: mov x21, x3
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: and x21, x8, #0x3f
+; GISEL-NEXT: mov x7, x5
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: str x6, [sp, #24] ; 8-byte Spill
+; GISEL-NEXT: mov x23, x6
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: str x28, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT: and x30, x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: str x7, [sp, #272] ; 8-byte Spill
+; GISEL-NEXT: mov x27, x1
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: str x20, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: mov x22, x21
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #10
+; GISEL-NEXT: mov x20, x7
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: str x7, [sp, #24] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #12
+; GISEL-NEXT: str x23, [sp, #336] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #13
+; GISEL-NEXT: str x2, [sp, #320] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #14
; GISEL-NEXT: csel x12, xzr, x12, eq
@@ -1296,13 +1300,13 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x10, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #232] ; 8-byte Spill
-; GISEL-NEXT: csel x10, xzr, x3, eq
+; GISEL-NEXT: str x10, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x0, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x6, x10
+; GISEL-NEXT: orr x10, x3, x10
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x10, x0, x10, eq
+; GISEL-NEXT: csel x10, x28, x10, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #3
@@ -1328,29 +1332,29 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #13
; GISEL-NEXT: csel x13, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldp x12, x10, [x1, #16]
+; GISEL-NEXT: ldp x12, x10, [x6, #16]
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: lsl x26, x12, x14
+; GISEL-NEXT: lsl x19, x12, x14
; GISEL-NEXT: csel x11, x11, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #224] ; 8-byte Spill
-; GISEL-NEXT: csel x11, xzr, x20, eq
+; GISEL-NEXT: str x11, [sp, #256] ; 8-byte Spill
+; GISEL-NEXT: csel x11, xzr, x5, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x26, x11
-; GISEL-NEXT: lsr x15, x12, x2
-; GISEL-NEXT: lsl x30, x10, x16
+; GISEL-NEXT: orr x11, x19, x11
+; GISEL-NEXT: lsr x15, x12, x1
+; GISEL-NEXT: lsl x14, x10, x16
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x17, x10, x2
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: lsr x17, x10, x1
+; GISEL-NEXT: csel x13, xzr, x0, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: orr x13, x3, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: csel x11, x28, x11, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #4
@@ -1380,23 +1384,23 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT: str x11, [sp, #248] ; 8-byte Spill
; GISEL-NEXT: csel x11, xzr, x15, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x30, x11
+; GISEL-NEXT: orr x11, x14, x11
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: csel x12, xzr, x5, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: orr x12, x19, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x3, eq
+; GISEL-NEXT: csel x12, xzr, x0, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: orr x12, x3, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: csel x11, x28, x11, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #5
@@ -1418,7 +1422,7 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #13
; GISEL-NEXT: csel x13, xzr, x11, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldp x12, x11, [x1, #32]
+; GISEL-NEXT: ldp x12, x11, [x6, #32]
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x13, xzr, x13, eq
@@ -1426,33 +1430,33 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: lsl x0, x12, x16
; GISEL-NEXT: csel x10, x10, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #208] ; 8-byte Spill
+; GISEL-NEXT: str x10, [sp, #240] ; 8-byte Spill
; GISEL-NEXT: csel x10, xzr, x17, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x10, x0, x10
-; GISEL-NEXT: lsr x4, x12, x2
-; GISEL-NEXT: lsl x19, x11, x16
+; GISEL-NEXT: lsr x26, x12, x1
+; GISEL-NEXT: lsl x24, x11, x16
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: mov x16, x15
; GISEL-NEXT: csel x13, xzr, x15, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: str x4, [sp, #248] ; 8-byte Spill
-; GISEL-NEXT: orr x13, x30, x13
-; GISEL-NEXT: str x0, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT: str x0, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT: orr x13, x14, x13
+; GISEL-NEXT: stp x14, x16, [sp, #56] ; 16-byte Folded Spill
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x5, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x19, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: orr x13, x3, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x10, x24, x10, eq
+; GISEL-NEXT: csel x10, x28, x10, eq
; GISEL-NEXT: cmp x9, #5
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #6
@@ -1478,10 +1482,10 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #200] ; 8-byte Spill
-; GISEL-NEXT: csel x10, xzr, x4, eq
+; GISEL-NEXT: str x10, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x26, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x19, x10
+; GISEL-NEXT: orr x10, x24, x10
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x17, eq
@@ -1492,22 +1496,23 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: and x15, x8, #0x3f
-; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: orr x12, x14, x12
; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: csel x12, xzr, x5, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: orr x12, x19, x12
; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x3, eq
+; GISEL-NEXT: csel x12, xzr, x2, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: lsr x3, x11, x2
-; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: orr x12, x3, x12
+; GISEL-NEXT: lsr x3, x11, x1
; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x10, x24, x10, eq
+; GISEL-NEXT: csel x10, x28, x10, eq
; GISEL-NEXT: cmp x9, #6
+; GISEL-NEXT: str x3, [sp, #344] ; 8-byte Spill
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: csel x10, xzr, x10, eq
@@ -1524,28 +1529,25 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #13
; GISEL-NEXT: csel x13, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldp x12, x10, [x1, #48]
+; GISEL-NEXT: ldp x12, x10, [x6, #48]
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: lsl x22, x12, x15
+; GISEL-NEXT: lsl x5, x12, x15
; GISEL-NEXT: csel x11, x11, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #192] ; 8-byte Spill
+; GISEL-NEXT: str x11, [sp, #224] ; 8-byte Spill
; GISEL-NEXT: csel x11, xzr, x3, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x22, x11
-; GISEL-NEXT: lsl x5, x10, x15
-; GISEL-NEXT: lsr x27, x10, x2
+; GISEL-NEXT: orr x11, x5, x11
+; GISEL-NEXT: lsl x4, x10, x15
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
+; GISEL-NEXT: csel x13, xzr, x26, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: mov x25, x27
-; GISEL-NEXT: orr x13, x19, x13
-; GISEL-NEXT: mov x14, x5
-; GISEL-NEXT: str x27, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT: stp x4, x26, [sp, #272] ; 16-byte Folded Spill
+; GISEL-NEXT: orr x13, x24, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x17, eq
@@ -1555,21 +1557,21 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x30, x13
+; GISEL-NEXT: orr x13, x14, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x7, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x19, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x7, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: orr x13, x21, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: lsr x13, x12, x2
-; GISEL-NEXT: csel x11, x24, x11, eq
+; GISEL-NEXT: lsr x13, x12, x1
+; GISEL-NEXT: csel x11, x28, x11, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #8
@@ -1592,20 +1594,20 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT: str x11, [sp, #216] ; 8-byte Spill
; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x5, x11
+; GISEL-NEXT: orr x11, x4, x11
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x3, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x12, x22, x12
+; GISEL-NEXT: orr x12, x5, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x4, eq
+; GISEL-NEXT: csel x12, xzr, x26, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x12, x19, x12
+; GISEL-NEXT: orr x12, x24, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x17, eq
@@ -1615,20 +1617,20 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: orr x12, x14, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: csel x12, xzr, x7, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: orr x12, x19, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x7, eq
+; GISEL-NEXT: csel x12, xzr, x2, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: orr x12, x21, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x11, x24, x11, eq
+; GISEL-NEXT: csel x11, x28, x11, eq
; GISEL-NEXT: cmp x9, #8
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #9
@@ -1642,35 +1644,38 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #13
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x12, xzr, x11, eq
-; GISEL-NEXT: ldp x11, x1, [x1, #64]
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x12, xzr, x11, eq
+; GISEL-NEXT: ldr x11, [x6, #64]
; GISEL-NEXT: cmp x8, #0
+; GISEL-NEXT: lsr x6, x10, x1
; GISEL-NEXT: csel x12, x10, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x23, x11, x21
-; GISEL-NEXT: str x12, [sp, #176] ; 8-byte Spill
-; GISEL-NEXT: csel x12, xzr, x27, eq
+; GISEL-NEXT: lsl x25, x11, x30
+; GISEL-NEXT: str x12, [sp, #208] ; 8-byte Spill
+; GISEL-NEXT: ldr x1, [x23, #72]
+; GISEL-NEXT: csel x12, xzr, x6, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x12, x23, x12
-; GISEL-NEXT: lsr x21, x11, x2
-; GISEL-NEXT: str x23, [sp, #288] ; 8-byte Spill
+; GISEL-NEXT: lsr x30, x11, x27
+; GISEL-NEXT: orr x12, x25, x12
+; GISEL-NEXT: mov x10, x3
; GISEL-NEXT: csel x12, x12, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x5, x13
+; GISEL-NEXT: orr x13, x4, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x3, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x22, x13
+; GISEL-NEXT: mov x3, x4
+; GISEL-NEXT: orr x13, x5, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
+; GISEL-NEXT: csel x13, xzr, x26, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x19, x13
+; GISEL-NEXT: orr x13, x24, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x17, eq
@@ -1680,28 +1685,29 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x30, x13
+; GISEL-NEXT: orr x13, x14, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x7, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: mov x7, x5
+; GISEL-NEXT: orr x13, x19, x13
+; GISEL-NEXT: str x7, [sp, #120] ; 8-byte Spill
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x7, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: orr x13, x21, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: cmp x9, #8
; GISEL-NEXT: and x13, x8, #0x3f
-; GISEL-NEXT: csel x12, x24, x12, eq
+; GISEL-NEXT: csel x12, x28, x12, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: lsl x10, x1, x13
+; GISEL-NEXT: lsl x21, x1, x13
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #10
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: stp x10, x15, [sp, #312] ; 16-byte Folded Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #12
; GISEL-NEXT: csel x12, xzr, x12, eq
@@ -1714,39 +1720,35 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x11, x11, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #168] ; 8-byte Spill
-; GISEL-NEXT: csel x11, xzr, x21, eq
+; GISEL-NEXT: str x11, [sp, #200] ; 8-byte Spill
+; GISEL-NEXT: csel x11, xzr, x30, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x10, x11
-; GISEL-NEXT: mov x10, x23
+; GISEL-NEXT: orr x11, x21, x11
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x27, eq
+; GISEL-NEXT: csel x12, xzr, x6, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: mov x27, x24
-; GISEL-NEXT: orr x12, x23, x12
-; GISEL-NEXT: mov x23, x15
+; GISEL-NEXT: orr x12, x25, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x15, x22
-; GISEL-NEXT: orr x12, x5, x12
-; GISEL-NEXT: mov x5, x3
+; GISEL-NEXT: orr x12, x4, x12
+; GISEL-NEXT: mov x4, x25
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: stp x14, x5, [sp, #256] ; 16-byte Folded Spill
-; GISEL-NEXT: csel x12, xzr, x3, eq
+; GISEL-NEXT: csel x12, xzr, x10, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x5, x4
-; GISEL-NEXT: orr x12, x22, x12
-; GISEL-NEXT: lsr x22, x1, x2
+; GISEL-NEXT: mov x10, x24
+; GISEL-NEXT: orr x12, x5, x12
+; GISEL-NEXT: lsr x5, x1, x27
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x4, eq
+; GISEL-NEXT: csel x12, xzr, x26, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: str x22, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT: orr x12, x19, x12
+; GISEL-NEXT: str x5, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT: orr x12, x24, x12
+; GISEL-NEXT: mov x24, x0
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x17, eq
@@ -1756,27 +1758,25 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: orr x12, x14, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x20, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: mov x20, x28
+; GISEL-NEXT: orr x12, x19, x12
+; GISEL-NEXT: str x20, [sp, #328] ; 8-byte Spill
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x7, eq
+; GISEL-NEXT: csel x12, xzr, x2, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: mov x7, x14
-; GISEL-NEXT: orr x12, x6, x12
-; GISEL-NEXT: mov x6, x28
+; GISEL-NEXT: orr x12, x22, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x11, x24, x11, eq
+; GISEL-NEXT: csel x11, x28, x11, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: ldr x24, [x6, #88]
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: ldr x6, [sp, #272] ; 8-byte Reload
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #12
; GISEL-NEXT: csel x11, xzr, x11, eq
@@ -1786,165 +1786,174 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x12, xzr, x11, eq
-; GISEL-NEXT: ldr x11, [x28, #80]
+; GISEL-NEXT: ldp x11, x28, [x23, #80]
; GISEL-NEXT: cmp x8, #0
+; GISEL-NEXT: mov x23, x21
; GISEL-NEXT: csel x12, x1, x12, eq
-; GISEL-NEXT: mov x28, x2
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x2, x11, x13
-; GISEL-NEXT: str x12, [sp, #160] ; 8-byte Spill
-; GISEL-NEXT: csel x12, xzr, x22, eq
+; GISEL-NEXT: mov x1, x30
+; GISEL-NEXT: lsl x0, x11, x13
+; GISEL-NEXT: str x12, [sp, #192] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x5, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: ldr x1, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT: str x28, [sp, #16] ; 8-byte Spill
-; GISEL-NEXT: orr x12, x2, x12
-; GISEL-NEXT: str x2, [sp, #280] ; 8-byte Spill
+; GISEL-NEXT: str x1, [sp, #88] ; 8-byte Spill
+; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: str x0, [sp, #288] ; 8-byte Spill
; GISEL-NEXT: csel x12, x12, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x21, eq
+; GISEL-NEXT: csel x13, xzr, x30, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x1, x13
+; GISEL-NEXT: ldr x30, [sp, #344] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x21, x13
+; GISEL-NEXT: mov x21, x15
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: str x21, [sp, #296] ; 8-byte Spill
+; GISEL-NEXT: csel x13, xzr, x6, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x25, x16
-; GISEL-NEXT: orr x13, x10, x13
-; GISEL-NEXT: mov x10, x30
-; GISEL-NEXT: str x25, [sp, #80] ; 8-byte Spill
+; GISEL-NEXT: orr x13, x25, x13
+; GISEL-NEXT: mov x25, x27
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x23, eq
+; GISEL-NEXT: str x25, [sp, #16] ; 8-byte Spill
+; GISEL-NEXT: csel x13, xzr, x15, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x23, x3
-; GISEL-NEXT: orr x13, x14, x13
-; GISEL-NEXT: mov x14, x17
+; GISEL-NEXT: mov x15, x17
+; GISEL-NEXT: orr x13, x3, x13
+; GISEL-NEXT: mov x3, x20
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: stp x19, x14, [sp, #64] ; 16-byte Folded Spill
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: csel x13, xzr, x30, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x3, x21
-; GISEL-NEXT: orr x13, x15, x13
-; GISEL-NEXT: str x3, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT: orr x13, x7, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
+; GISEL-NEXT: csel x13, xzr, x26, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: mov x4, x0
-; GISEL-NEXT: orr x13, x19, x13
+; GISEL-NEXT: mov x26, x10
+; GISEL-NEXT: orr x13, x10, x13
+; GISEL-NEXT: mov x10, x14
+; GISEL-NEXT: str x26, [sp, #104] ; 8-byte Spill
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x17, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: mov x17, x27
-; GISEL-NEXT: orr x13, x0, x13
-; GISEL-NEXT: ldr x0, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: mov x17, x22
+; GISEL-NEXT: orr x13, x24, x13
+; GISEL-NEXT: mov x24, x19
+; GISEL-NEXT: str x17, [sp, #96] ; 8-byte Spill
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x30, x13
-; GISEL-NEXT: ldp x30, x16, [sp, #320] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x13, x14, x13
+; GISEL-NEXT: ldr x14, [sp, #24] ; 8-byte Reload
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x14, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x19, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x6, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x13, x0, x13
+; GISEL-NEXT: mov x2, x1
+; GISEL-NEXT: orr x13, x22, x13
+; GISEL-NEXT: mov x22, x23
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: lsr x13, x11, x28
-; GISEL-NEXT: csel x12, x27, x12, eq
+; GISEL-NEXT: lsr x13, x11, x27
+; GISEL-NEXT: csel x12, x20, x12, eq
; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: mov x27, x4
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: str x13, [sp, #96] ; 8-byte Spill
+; GISEL-NEXT: str x13, [sp, #136] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #13
+; GISEL-NEXT: mov x20, x26
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #14
+; GISEL-NEXT: stp x27, x22, [sp, #72] ; 16-byte Folded Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x11, x11, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT: str x11, [sp, #184] ; 8-byte Spill
; GISEL-NEXT: and x11, x8, #0x3f
-; GISEL-NEXT: lsl x27, x24, x11
+; GISEL-NEXT: lsl x19, x28, x11
; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x27, x11
-; GISEL-NEXT: str x27, [sp, #56] ; 8-byte Spill
+; GISEL-NEXT: orr x11, x19, x11
+; GISEL-NEXT: str x19, [sp, #304] ; 8-byte Spill
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x22, eq
+; GISEL-NEXT: csel x12, xzr, x5, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: mov x22, x2
-; GISEL-NEXT: orr x12, x2, x12
-; GISEL-NEXT: mov x2, x14
+; GISEL-NEXT: mov x5, x7
+; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: ldr x0, [sp, #32] ; 8-byte Reload
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x21, eq
+; GISEL-NEXT: csel x12, xzr, x1, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: ldr x21, [sp, #288] ; 8-byte Reload
-; GISEL-NEXT: orr x12, x1, x12
-; GISEL-NEXT: mov x1, x27
+; GISEL-NEXT: mov x1, x17
+; GISEL-NEXT: orr x12, x23, x12
+; GISEL-NEXT: mov x23, x21
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x16, eq
+; GISEL-NEXT: csel x12, xzr, x6, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x12, x21, x12
+; GISEL-NEXT: orr x12, x4, x12
+; GISEL-NEXT: mov x4, x15
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x30, eq
+; GISEL-NEXT: csel x12, xzr, x21, eq
+; GISEL-NEXT: ldr x21, [sp, #272] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x12, x7, x12
-; GISEL-NEXT: mov x7, x15
+; GISEL-NEXT: orr x12, x21, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x7, [sp, #40] ; 8-byte Spill
-; GISEL-NEXT: csel x12, xzr, x23, eq
+; GISEL-NEXT: csel x12, xzr, x30, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x12, x15, x12
+; GISEL-NEXT: mov x30, x27
+; GISEL-NEXT: orr x12, x7, x12
+; GISEL-NEXT: ldr x7, [sp, #280] ; 8-byte Reload
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x5, eq
+; GISEL-NEXT: csel x12, xzr, x7, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: mov x5, x19
-; GISEL-NEXT: orr x12, x19, x12
-; GISEL-NEXT: mov x19, x7
+; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: ldr x26, [sp, #48] ; 8-byte Reload
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x14, eq
+; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: lsr x14, x24, x28
-; GISEL-NEXT: orr x12, x4, x12
-; GISEL-NEXT: mov x4, x10
+; GISEL-NEXT: ldr x15, [sp, #320] ; 8-byte Reload
+; GISEL-NEXT: orr x12, x0, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x25, eq
+; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #8
+; GISEL-NEXT: mov x16, x14
; GISEL-NEXT: orr x12, x10, x12
-; GISEL-NEXT: ldr x10, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: ldr x10, [sp, #336] ; 8-byte Reload
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: csel x12, xzr, x14, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: orr x12, x24, x12
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x6, eq
+; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: orr x12, x17, x12
+; GISEL-NEXT: mov x17, x13
; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x11, x17, x11, eq
+; GISEL-NEXT: csel x11, x3, x11, eq
; GISEL-NEXT: cmp x9, #12
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #13
@@ -1953,395 +1962,398 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x12, xzr, x11, eq
-; GISEL-NEXT: ldp x11, x6, [x10, #96]
; GISEL-NEXT: cmp x8, #0
+; GISEL-NEXT: ldp x11, x3, [x10, #96]
+; GISEL-NEXT: csel x12, x28, x12, eq
+; GISEL-NEXT: str x12, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT: lsr x12, x28, x25
; GISEL-NEXT: and x10, x8, #0x3f
-; GISEL-NEXT: csel x12, x24, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x24, [sp, #248] ; 8-byte Reload
-; GISEL-NEXT: lsl x15, x11, x10
-; GISEL-NEXT: csel x10, xzr, x14, eq
+; GISEL-NEXT: mov x28, x0
+; GISEL-NEXT: lsl x14, x11, x10
+; GISEL-NEXT: csel x10, xzr, x12, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: str x12, [sp, #136] ; 8-byte Spill
-; GISEL-NEXT: ldr x12, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT: orr x10, x15, x10
-; GISEL-NEXT: str x15, [sp, #296] ; 8-byte Spill
-; GISEL-NEXT: mov x15, x13
+; GISEL-NEXT: str x12, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: ldr x12, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: orr x10, x14, x10
+; GISEL-NEXT: str x14, [sp, #312] ; 8-byte Spill
+; GISEL-NEXT: mov x14, x6
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: str x14, [sp, #40] ; 8-byte Spill
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x27, x13
-; GISEL-NEXT: ldr x27, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x19, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x27, eq
+; GISEL-NEXT: csel x13, xzr, x26, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x22, x13
-; GISEL-NEXT: ldr x22, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x12, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x12, x13
+; GISEL-NEXT: ldr x2, [sp, #344] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x22, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x16, eq
+; GISEL-NEXT: csel x13, xzr, x6, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x16, x17
-; GISEL-NEXT: orr x13, x21, x13
-; GISEL-NEXT: ldp x23, x21, [sp, #256] ; 16-byte Folded Reload
+; GISEL-NEXT: mov x6, x16
+; GISEL-NEXT: orr x13, x27, x13
+; GISEL-NEXT: ldr x27, [sp, #112] ; 8-byte Reload
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x30, eq
+; GISEL-NEXT: csel x13, xzr, x23, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: mov x30, x0
-; GISEL-NEXT: orr x13, x23, x13
+; GISEL-NEXT: mov x23, x3
+; GISEL-NEXT: orr x13, x21, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x21, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x13, x7, x13
-; GISEL-NEXT: mov x7, x14
+; GISEL-NEXT: orr x13, x5, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x24, eq
+; GISEL-NEXT: csel x13, xzr, x7, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x5, x13
-; GISEL-NEXT: ldr x5, [sp, #48] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x20, x13
+; GISEL-NEXT: ldp x19, x20, [sp, #56] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x2, eq
+; GISEL-NEXT: csel x13, xzr, x4, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: ldr x2, [sp, #296] ; 8-byte Reload
-; GISEL-NEXT: orr x13, x5, x13
+; GISEL-NEXT: orr x13, x0, x13
+; GISEL-NEXT: ldr x0, [sp, #88] ; 8-byte Reload
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: csel x13, xzr, x20, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: mov x25, x6
-; GISEL-NEXT: orr x13, x4, x13
+; GISEL-NEXT: orr x13, x19, x13
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x24, x13
+; GISEL-NEXT: ldp x16, x5, [sp, #304] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x22, eq
+; GISEL-NEXT: csel x13, xzr, x15, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x13, x0, x13
+; GISEL-NEXT: mov x15, x25
+; GISEL-NEXT: orr x13, x1, x13
+; GISEL-NEXT: ldr x1, [sp, #328] ; 8-byte Reload
; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: lsr x13, x11, x28
-; GISEL-NEXT: csel x10, x17, x10, eq
+; GISEL-NEXT: lsr x13, x11, x25
+; GISEL-NEXT: csel x10, x1, x10, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: ldr x17, [sp, #80] ; 8-byte Reload
+; GISEL-NEXT: ldr x25, [sp, #120] ; 8-byte Reload
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: str x13, [sp, #104] ; 8-byte Spill
+; GISEL-NEXT: str x13, [sp, #144] ; 8-byte Spill
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #128] ; 8-byte Spill
+; GISEL-NEXT: str x10, [sp, #160] ; 8-byte Spill
; GISEL-NEXT: and x10, x8, #0x3f
-; GISEL-NEXT: lsl x11, x6, x10
+; GISEL-NEXT: lsl x11, x3, x10
; GISEL-NEXT: csel x10, xzr, x13, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: ldp x0, x13, [sp, #280] ; 16-byte Folded Reload
-; GISEL-NEXT: mov x6, x16
+; GISEL-NEXT: mov x13, x21
+; GISEL-NEXT: ldr x3, [sp, #320] ; 8-byte Reload
; GISEL-NEXT: orr x10, x11, x10
-; GISEL-NEXT: str x11, [sp, #88] ; 8-byte Spill
+; GISEL-NEXT: str x11, [sp, #128] ; 8-byte Spill
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: csel x11, xzr, x27, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x2, x11
+; GISEL-NEXT: orr x11, x5, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x15, eq
+; GISEL-NEXT: csel x11, xzr, x17, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x15, x3
-; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: mov x17, x1
+; GISEL-NEXT: orr x11, x16, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x27, eq
+; GISEL-NEXT: csel x11, xzr, x26, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x0, x11
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: ldr x12, [sp, #296] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x3, eq
-; GISEL-NEXT: ldp x14, x3, [sp, #320] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: orr x11, x22, x11
+; GISEL-NEXT: ldr x22, [sp, #128] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x3, eq
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x11, x13, x11
+; GISEL-NEXT: orr x11, x30, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: csel x11, xzr, x12, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x23, x11
-; GISEL-NEXT: mov x23, x5
+; GISEL-NEXT: orr x11, x21, x11
+; GISEL-NEXT: ldr x21, [sp, #104] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x21, eq
+; GISEL-NEXT: csel x11, xzr, x2, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: mov x21, x4
-; GISEL-NEXT: orr x11, x19, x11
-; GISEL-NEXT: ldp x12, x19, [sp, #64] ; 16-byte Folded Reload
+; GISEL-NEXT: mov x2, x19
+; GISEL-NEXT: orr x11, x25, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x24, eq
+; GISEL-NEXT: csel x11, xzr, x7, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: mov x7, x28
+; GISEL-NEXT: orr x11, x21, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x19, eq
+; GISEL-NEXT: csel x11, xzr, x4, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x11, x5, x11
-; GISEL-NEXT: mov x5, x30
+; GISEL-NEXT: orr x11, x28, x11
+; GISEL-NEXT: mov x28, x20
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x17, eq
+; GISEL-NEXT: csel x11, xzr, x20, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x11, x4, x11
+; GISEL-NEXT: orr x11, x19, x11
+; GISEL-NEXT: ldr x19, [sp, #96] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x20, eq
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: orr x11, x24, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x22, eq
+; GISEL-NEXT: csel x11, xzr, x3, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: orr x11, x30, x11
+; GISEL-NEXT: orr x11, x19, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x10, x16, x10, eq
+; GISEL-NEXT: csel x10, x1, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldr x16, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: ldr x1, [sp, #336] ; 8-byte Reload
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x11, xzr, x10, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: ldp x10, x4, [x16, #112]
-; GISEL-NEXT: csel x11, x25, x11, eq
-; GISEL-NEXT: str x11, [sp, #120] ; 8-byte Spill
-; GISEL-NEXT: lsr x11, x25, x28
-; GISEL-NEXT: and x16, x8, #0x3f
+; GISEL-NEXT: csel x11, x23, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x25, [sp, #88] ; 8-byte Reload
-; GISEL-NEXT: lsl x24, x10, x16
+; GISEL-NEXT: str x11, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT: lsr x11, x23, x15
+; GISEL-NEXT: ldr x23, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: ldp x10, x15, [x1, #112]
+; GISEL-NEXT: and x1, x8, #0x3f
+; GISEL-NEXT: lsl x20, x10, x1
; GISEL-NEXT: csel x1, xzr, x11, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: ldp x16, x28, [sp, #96] ; 16-byte Folded Reload
-; GISEL-NEXT: orr x1, x24, x1
+; GISEL-NEXT: str x20, [sp, #336] ; 8-byte Spill
+; GISEL-NEXT: orr x1, x20, x1
+; GISEL-NEXT: ldr x20, [sp, #144] ; 8-byte Reload
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x28, eq
+; GISEL-NEXT: csel x30, xzr, x20, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x30, x25, x30
+; GISEL-NEXT: orr x30, x22, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x7, eq
+; GISEL-NEXT: csel x30, xzr, x27, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x30, x2, x30
-; GISEL-NEXT: ldr x2, [sp, #56] ; 8-byte Reload
+; GISEL-NEXT: orr x30, x5, x30
+; GISEL-NEXT: ldr x5, [sp, #136] ; 8-byte Reload
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x16, eq
+; GISEL-NEXT: csel x30, xzr, x5, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x30, x2, x30
+; GISEL-NEXT: orr x30, x16, x30
+; GISEL-NEXT: ldr x16, [sp, #80] ; 8-byte Reload
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x27, eq
+; GISEL-NEXT: csel x30, xzr, x26, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x27, x13
-; GISEL-NEXT: orr x30, x0, x30
-; GISEL-NEXT: ldr x0, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT: orr x30, x23, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x15, eq
-; GISEL-NEXT: ldr x15, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT: csel x30, xzr, x0, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x30, x15, x30
+; GISEL-NEXT: orr x30, x16, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x3, eq
+; GISEL-NEXT: csel x30, xzr, x14, eq
+; GISEL-NEXT: ldr x14, [sp, #72] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: ldr x3, [sp, #40] ; 8-byte Reload
-; GISEL-NEXT: orr x30, x13, x30
+; GISEL-NEXT: orr x30, x14, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x14, eq
-; GISEL-NEXT: ldp x13, x14, [sp, #256] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x30, xzr, x12, eq
; GISEL-NEXT: cmp x9, #7
+; GISEL-NEXT: ldr x12, [sp, #344] ; 8-byte Reload
; GISEL-NEXT: orr x30, x13, x30
+; GISEL-NEXT: ldr x13, [sp, #280] ; 8-byte Reload
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x14, eq
+; GISEL-NEXT: csel x30, xzr, x12, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x30, x3, x30
+; GISEL-NEXT: orr x30, x25, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x0, eq
+; GISEL-NEXT: csel x30, xzr, x13, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x30, x12, x30
+; GISEL-NEXT: orr x30, x21, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x19, eq
+; GISEL-NEXT: csel x30, xzr, x4, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x30, x23, x30
+; GISEL-NEXT: orr x30, x7, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x17, eq
+; GISEL-NEXT: csel x30, xzr, x28, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x30, x21, x30
+; GISEL-NEXT: orr x30, x2, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x20, eq
+; GISEL-NEXT: csel x30, xzr, x6, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: mov x20, x26
-; GISEL-NEXT: orr x30, x26, x30
-; GISEL-NEXT: mov x26, x5
+; GISEL-NEXT: orr x30, x24, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x22, eq
+; GISEL-NEXT: csel x30, xzr, x3, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: orr x30, x5, x30
-; GISEL-NEXT: ldr x5, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT: orr x30, x19, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, x6, x1, eq
+; GISEL-NEXT: csel x1, x17, x1, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: lsr x30, x10, x5
+; GISEL-NEXT: ldr x17, [sp, #16] ; 8-byte Reload
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x5, x10, x1, eq
+; GISEL-NEXT: lsr x30, x10, x17
+; GISEL-NEXT: csel x17, x10, x1, eq
; GISEL-NEXT: and x10, x8, #0x3f
+; GISEL-NEXT: lsl x10, x15, x10
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x10, x4, x10
; GISEL-NEXT: csel x1, xzr, x30, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: ldp x29, x30, [sp, #416] ; 16-byte Folded Reload
; GISEL-NEXT: orr x10, x10, x1
-; GISEL-NEXT: ldr x1, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT: ldr x1, [sp, #336] ; 8-byte Reload
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x24, x11
+; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: ldr x1, [sp, #312] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x28, eq
+; GISEL-NEXT: csel x11, xzr, x20, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x11, x25, x11
+; GISEL-NEXT: orr x11, x22, x11
+; GISEL-NEXT: ldp x29, x30, [sp, #432] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x7, eq
+; GISEL-NEXT: csel x11, xzr, x27, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: ldr x1, [sp, #304] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x16, eq
+; GISEL-NEXT: csel x11, xzr, x5, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: ldr x16, [sp, #280] ; 8-byte Reload
-; GISEL-NEXT: orr x11, x2, x11
+; GISEL-NEXT: orr x11, x1, x11
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #240] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x11, xzr, x26, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x11, x16, x11
+; GISEL-NEXT: orr x11, x23, x11
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #32] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x15, x11
+; GISEL-NEXT: orr x11, x16, x11
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: ldr x11, [sp, #40] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x11, x27, x11
-; GISEL-NEXT: ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x14, x11
+; GISEL-NEXT: ldr x14, [sp, #272] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #320] ; 8-byte Reload
+; GISEL-NEXT: ldr x11, [sp, #296] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x11, x13, x11
-; GISEL-NEXT: ldr x13, [sp, #144] ; 8-byte Reload
+; GISEL-NEXT: orr x11, x14, x11
+; GISEL-NEXT: ldr x14, [sp, #176] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: csel x11, xzr, x12, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x11, x3, x11
+; GISEL-NEXT: orr x11, x25, x11
+; GISEL-NEXT: ldp x26, x25, [sp, #368] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x0, eq
+; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: orr x11, x21, x11
+; GISEL-NEXT: ldp x22, x21, [sp, #400] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT: ldr x11, [sp, #264] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [x13]
-; GISEL-NEXT: ldp x12, x11, [sp, #216] ; 16-byte Folded Reload
-; GISEL-NEXT: stp x11, x12, [x13, #8]
-; GISEL-NEXT: csel x11, xzr, x19, eq
+; GISEL-NEXT: str x11, [x14]
+; GISEL-NEXT: ldp x12, x11, [sp, #248] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x11, x12, [x14, #8]
+; GISEL-NEXT: csel x11, xzr, x4, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x11, x23, x11
-; GISEL-NEXT: ldp x24, x23, [sp, #368] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x7, x11
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT: ldr x11, [sp, #240] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [x13, #24]
-; GISEL-NEXT: ldp x12, x11, [sp, #192] ; 16-byte Folded Reload
-; GISEL-NEXT: stp x11, x12, [x13, #32]
-; GISEL-NEXT: csel x11, xzr, x17, eq
+; GISEL-NEXT: str x11, [x14, #24]
+; GISEL-NEXT: ldp x12, x11, [sp, #224] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x11, x12, [x14, #32]
+; GISEL-NEXT: csel x11, xzr, x28, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: orr x11, x21, x11
+; GISEL-NEXT: orr x11, x2, x11
+; GISEL-NEXT: ldp x28, x27, [sp, #352] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT: ldr x11, [sp, #216] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [x13, #48]
-; GISEL-NEXT: ldp x12, x11, [sp, #168] ; 16-byte Folded Reload
-; GISEL-NEXT: stp x11, x12, [x13, #56]
-; GISEL-NEXT: ldr x11, [sp, #112] ; 8-byte Reload
-; GISEL-NEXT: ldr x12, [sp, #136] ; 8-byte Reload
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: str x11, [x14, #48]
+; GISEL-NEXT: ldp x12, x11, [sp, #200] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x11, x12, [x14, #56]
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: orr x11, x20, x11
-; GISEL-NEXT: ldp x20, x19, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x24, x11
+; GISEL-NEXT: ldr x12, [sp, #168] ; 8-byte Reload
; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT: ldr x11, [sp, #192] ; 8-byte Reload
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [x13, #72]
-; GISEL-NEXT: ldr x11, [sp, #152] ; 8-byte Reload
-; GISEL-NEXT: str x11, [x13, #80]
-; GISEL-NEXT: csel x11, xzr, x22, eq
+; GISEL-NEXT: ldp x24, x23, [sp, #384] ; 16-byte Folded Reload
+; GISEL-NEXT: str x11, [x14, #72]
+; GISEL-NEXT: ldr x11, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT: str x11, [x14, #80]
+; GISEL-NEXT: csel x11, xzr, x3, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: orr x11, x26, x11
-; GISEL-NEXT: ldp x22, x21, [sp, #384] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x19, x11
+; GISEL-NEXT: ldp x20, x19, [sp, #416] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: ldr x9, [sp, #128] ; 8-byte Reload
-; GISEL-NEXT: ldp x26, x25, [sp, #352] ; 16-byte Folded Reload
-; GISEL-NEXT: stp x12, x9, [x13, #88]
-; GISEL-NEXT: csel x9, x6, x10, eq
+; GISEL-NEXT: ldr x9, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT: stp x12, x9, [x14, #88]
+; GISEL-NEXT: ldr x9, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: csel x9, x9, x10, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: ldr x8, [sp, #120] ; 8-byte Reload
-; GISEL-NEXT: stp x8, x5, [x13, #104]
-; GISEL-NEXT: csel x8, x4, x9, eq
-; GISEL-NEXT: str x8, [x13, #120]
-; GISEL-NEXT: add sp, sp, #432
+; GISEL-NEXT: ldr x8, [sp, #152] ; 8-byte Reload
+; GISEL-NEXT: stp x8, x17, [x14, #104]
+; GISEL-NEXT: csel x8, x15, x9, eq
+; GISEL-NEXT: str x8, [x14, #120]
+; GISEL-NEXT: add sp, sp, #448
; GISEL-NEXT: ret
entry:
%input_val = load i1024, ptr %input, align 128
@@ -2503,328 +2515,333 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: .cfi_offset w27, -88
; GISEL-NEXT: .cfi_offset w28, -96
; GISEL-NEXT: mov w8, w2
-; GISEL-NEXT: ldp x20, x16, [x1]
+; GISEL-NEXT: ldp x12, x16, [x1]
; GISEL-NEXT: mov w9, #64 ; =0x40
; GISEL-NEXT: and x14, x8, #0x3f
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: sub x15, x9, x14
-; GISEL-NEXT: ldp x12, x13, [x1, #16]
-; GISEL-NEXT: lsl x10, x16, x15
; GISEL-NEXT: lsr x9, x8, #6
-; GISEL-NEXT: lsr x11, x20, x14
+; GISEL-NEXT: str x0, [sp, #288] ; 8-byte Spill
+; GISEL-NEXT: str x12, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT: lsl x10, x16, x15
+; GISEL-NEXT: lsr x11, x12, x14
+; GISEL-NEXT: ldp x12, x13, [x1, #16]
; GISEL-NEXT: lsr x19, x16, x14
-; GISEL-NEXT: str x16, [sp, #264] ; 8-byte Spill
; GISEL-NEXT: csel x10, xzr, x10, eq
-; GISEL-NEXT: lsl x22, x12, x15
; GISEL-NEXT: cmp x9, #0
+; GISEL-NEXT: str x16, [sp, #256] ; 8-byte Spill
; GISEL-NEXT: orr x10, x11, x10
-; GISEL-NEXT: str x12, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT: lsr x26, x12, x14
+; GISEL-NEXT: ldp x4, x2, [x1, #64]
+; GISEL-NEXT: lsl x0, x12, x15
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x24, x13, x15
-; GISEL-NEXT: csel x11, xzr, x22, eq
+; GISEL-NEXT: str x12, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: lsr x17, x12, x14
+; GISEL-NEXT: lsr x3, x13, x14
+; GISEL-NEXT: csel x11, xzr, x0, eq
+; GISEL-NEXT: str x0, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT: lsl x0, x13, x15
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: lsr x5, x13, x14
; GISEL-NEXT: orr x11, x19, x11
+; GISEL-NEXT: str x4, [sp, #208] ; 8-byte Spill
; GISEL-NEXT: ldp x12, x16, [x1, #32]
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x0, [sp, #296] ; 8-byte Spill
-; GISEL-NEXT: csel x11, xzr, x24, eq
+; GISEL-NEXT: stp x17, x0, [sp, #136] ; 16-byte Folded Spill
+; GISEL-NEXT: lsl x28, x2, x15
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: str x13, [sp, #216] ; 8-byte Spill
-; GISEL-NEXT: lsl x23, x12, x15
-; GISEL-NEXT: orr x11, x26, x11
-; GISEL-NEXT: stp x12, x16, [sp, #176] ; 16-byte Folded Spill
+; GISEL-NEXT: lsr x26, x4, x14
+; GISEL-NEXT: lsl x0, x12, x15
+; GISEL-NEXT: orr x11, x17, x11
+; GISEL-NEXT: stp x13, x12, [sp, #168] ; 16-byte Folded Spill
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: lsr x17, x12, x14
-; GISEL-NEXT: csel x11, xzr, x23, eq
+; GISEL-NEXT: csel x11, xzr, x0, eq
+; GISEL-NEXT: str x0, [sp, #304] ; 8-byte Spill
; GISEL-NEXT: lsl x0, x16, x15
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x5, x11
+; GISEL-NEXT: orr x11, x3, x11
+; GISEL-NEXT: str x16, [sp, #184] ; 8-byte Spill
; GISEL-NEXT: ldp x13, x12, [x1, #48]
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x7, x16, x14
+; GISEL-NEXT: stp x17, x0, [sp, #120] ; 16-byte Folded Spill
; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: stp x17, x0, [sp, #152] ; 16-byte Folded Spill
-; GISEL-NEXT: lsl x2, x13, x15
+; GISEL-NEXT: str x2, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT: lsl x0, x13, x15
; GISEL-NEXT: orr x11, x17, x11
-; GISEL-NEXT: stp x13, x12, [sp, #192] ; 16-byte Folded Spill
+; GISEL-NEXT: lsr x17, x16, x14
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x13, x13, x14
-; GISEL-NEXT: csel x11, xzr, x2, eq
-; GISEL-NEXT: lsl x0, x12, x15
+; GISEL-NEXT: lsl x7, x12, x15
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: stp x13, x2, [sp, #136] ; 16-byte Folded Spill
-; GISEL-NEXT: orr x11, x7, x11
-; GISEL-NEXT: lsr x12, x12, x14
-; GISEL-NEXT: ldp x4, x2, [x1, #64]
+; GISEL-NEXT: stp x13, x12, [sp, #192] ; 16-byte Folded Spill
+; GISEL-NEXT: orr x11, x17, x11
+; GISEL-NEXT: lsr x13, x13, x14
+; GISEL-NEXT: stp x17, x0, [sp, #104] ; 16-byte Folded Spill
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x17, [sp, #144] ; 8-byte Reload
-; GISEL-NEXT: stp x5, x23, [sp, #24] ; 16-byte Folded Spill
-; GISEL-NEXT: csel x11, xzr, x0, eq
+; GISEL-NEXT: lsl x0, x4, x15
+; GISEL-NEXT: csel x11, xzr, x7, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: lsl x3, x4, x15
+; GISEL-NEXT: lsr x22, x12, x14
; GISEL-NEXT: orr x11, x13, x11
-; GISEL-NEXT: str x4, [sp, #208] ; 8-byte Spill
+; GISEL-NEXT: str x13, [sp, #96] ; 8-byte Spill
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x6, x2, x15
-; GISEL-NEXT: csel x11, xzr, x3, eq
+; GISEL-NEXT: str x28, [sp, #16] ; 8-byte Spill
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: lsr x13, x4, x14
-; GISEL-NEXT: orr x11, x12, x11
-; GISEL-NEXT: str x2, [sp, #224] ; 8-byte Spill
+; GISEL-NEXT: str x3, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT: orr x11, x22, x11
; GISEL-NEXT: csel x16, x11, x10, eq
; GISEL-NEXT: ldp x10, x4, [x1, #80]
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: mov x11, x2
-; GISEL-NEXT: stp x13, x12, [sp, #120] ; 16-byte Folded Spill
-; GISEL-NEXT: csel x2, xzr, x6, eq
+; GISEL-NEXT: csel x2, xzr, x28, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: lsr x11, x11, x14
-; GISEL-NEXT: orr x2, x13, x2
-; GISEL-NEXT: lsl x12, x10, x15
-; GISEL-NEXT: str x10, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: lsr x24, x11, x14
+; GISEL-NEXT: orr x2, x26, x2
+; GISEL-NEXT: lsl x23, x10, x15
+; GISEL-NEXT: lsl x12, x4, x15
; GISEL-NEXT: csel x16, x2, x16, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x10, x10, x14
-; GISEL-NEXT: csel x2, xzr, x12, eq
-; GISEL-NEXT: str x12, [sp, #312] ; 8-byte Spill
+; GISEL-NEXT: str x10, [sp, #224] ; 8-byte Spill
+; GISEL-NEXT: csel x2, xzr, x23, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x2, x11, x2
-; GISEL-NEXT: lsl x12, x4, x15
-; GISEL-NEXT: str x10, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT: ldr x11, [x1, #96]
+; GISEL-NEXT: orr x2, x24, x2
+; GISEL-NEXT: lsr x10, x10, x14
+; GISEL-NEXT: lsr x13, x4, x14
; GISEL-NEXT: csel x16, x2, x16, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x13, x4, x14
-; GISEL-NEXT: stp x12, x11, [sp, #104] ; 16-byte Folded Spill
-; GISEL-NEXT: ldr x11, [x1, #96]
+; GISEL-NEXT: lsl x25, x11, x15
; GISEL-NEXT: csel x2, xzr, x12, eq
+; GISEL-NEXT: stp x10, x12, [sp, #80] ; 16-byte Folded Spill
+; GISEL-NEXT: cmp x9, #10
; GISEL-NEXT: orr x2, x10, x2
; GISEL-NEXT: ldp x10, x30, [x1, #104]
-; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: lsl x28, x11, x15
-; GISEL-NEXT: stp x4, x11, [sp, #248] ; 16-byte Folded Spill
; GISEL-NEXT: csel x16, x2, x16, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x3, [sp, #16] ; 8-byte Spill
-; GISEL-NEXT: csel x2, xzr, x28, eq
-; GISEL-NEXT: lsl x12, x10, x15
+; GISEL-NEXT: lsr x27, x11, x14
+; GISEL-NEXT: csel x2, xzr, x25, eq
; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: stp x4, x11, [sp, #240] ; 16-byte Folded Spill
; GISEL-NEXT: orr x2, x13, x2
-; GISEL-NEXT: lsl x21, x30, x15
-; GISEL-NEXT: stp x10, x30, [sp, #272] ; 16-byte Folded Spill
+; GISEL-NEXT: lsl x12, x10, x15
+; GISEL-NEXT: lsl x5, x30, x15
; GISEL-NEXT: csel x16, x2, x16, eq
-; GISEL-NEXT: stp x12, x13, [sp, #88] ; 16-byte Folded Spill
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x13, x11, x14
+; GISEL-NEXT: ldr x11, [x1, #120]
; GISEL-NEXT: csel x2, xzr, x12, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: ldr x11, [x1, #120]
-; GISEL-NEXT: lsr x10, x10, x14
-; GISEL-NEXT: lsr x27, x30, x14
-; GISEL-NEXT: orr x4, x13, x2
-; GISEL-NEXT: mov x12, x23
-; GISEL-NEXT: str x28, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT: lsr x21, x10, x14
+; GISEL-NEXT: orr x4, x27, x2
+; GISEL-NEXT: stp x10, x30, [sp, #264] ; 16-byte Folded Spill
+; GISEL-NEXT: mov x10, x11
; GISEL-NEXT: csel x16, x4, x16, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x25, x11, x15
-; GISEL-NEXT: csel x1, xzr, x21, eq
+; GISEL-NEXT: str x11, [sp, #280] ; 8-byte Spill
+; GISEL-NEXT: csel x1, xzr, x5, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: stp x10, x13, [sp, #72] ; 16-byte Folded Spill
-; GISEL-NEXT: orr x1, x10, x1
-; GISEL-NEXT: lsr x10, x11, x14
-; GISEL-NEXT: str x11, [sp, #288] ; 8-byte Spill
+; GISEL-NEXT: lsl x11, x11, x15
+; GISEL-NEXT: orr x1, x21, x1
+; GISEL-NEXT: lsr x20, x30, x14
+; GISEL-NEXT: lsr x6, x10, x14
; GISEL-NEXT: csel x1, x1, x16, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x21, [sp, #40] ; 8-byte Spill
-; GISEL-NEXT: csel x30, xzr, x25, eq
+; GISEL-NEXT: ldr x10, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT: csel x30, xzr, x11, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: stp x27, x10, [sp, #56] ; 16-byte Folded Spill
-; GISEL-NEXT: orr x30, x27, x30
-; GISEL-NEXT: ldp x11, x13, [sp, #152] ; 16-byte Folded Reload
+; GISEL-NEXT: str x13, [sp, #296] ; 8-byte Spill
+; GISEL-NEXT: orr x30, x20, x30
+; GISEL-NEXT: ldp x13, x4, [sp, #128] ; 16-byte Folded Reload
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: mov x30, x7
-; GISEL-NEXT: csel x1, x10, x1, eq
+; GISEL-NEXT: str x12, [sp, #312] ; 8-byte Spill
+; GISEL-NEXT: csel x1, x6, x1, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x10, x20, x1, eq
+; GISEL-NEXT: ldr x12, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: csel x10, x10, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x22, eq
+; GISEL-NEXT: stp x20, x11, [sp, #64] ; 16-byte Folded Spill
+; GISEL-NEXT: str x10, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT: ldp x2, x10, [sp, #144] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x17, x11, [sp, #112] ; 16-byte Folded Reload
+; GISEL-NEXT: ldr x14, [sp, #104] ; 8-byte Reload
+; GISEL-NEXT: mov x30, x7
+; GISEL-NEXT: ldr x16, [sp, #80] ; 8-byte Reload
+; GISEL-NEXT: stp x5, x25, [sp, #48] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x1, xzr, x10, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: str x10, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT: ldr x10, [sp, #312] ; 8-byte Reload
; GISEL-NEXT: orr x1, x19, x1
-; GISEL-NEXT: ldp x20, x14, [sp, #112] ; 16-byte Folded Reload
+; GISEL-NEXT: str x21, [sp, #40] ; 8-byte Spill
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x24, eq
+; GISEL-NEXT: str x27, [sp, #24] ; 8-byte Spill
+; GISEL-NEXT: csel x19, xzr, x2, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x19, x26, x19
-; GISEL-NEXT: ldp x10, x15, [sp, #304] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x19, x4, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x23, eq
+; GISEL-NEXT: csel x19, xzr, x12, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x19, x5, x19
-; GISEL-NEXT: ldp x16, x22, [sp, #96] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x19, x3, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x19, xzr, x13, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: orr x19, x11, x19
-; GISEL-NEXT: ldp x4, x2, [sp, #80] ; 16-byte Folded Reload
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x19, xzr, x17, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x19, x7, x19
-; GISEL-NEXT: mov x7, x0
+; GISEL-NEXT: orr x19, x14, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x0, eq
-; GISEL-NEXT: ldp x23, x0, [sp, #128] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x19, xzr, x7, eq
+; GISEL-NEXT: ldp x15, x7, [sp, #88] ; 16-byte Folded Reload
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x19, x0, x19
+; GISEL-NEXT: orr x19, x7, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: csel x19, xzr, x0, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x19, x23, x19
+; GISEL-NEXT: orr x19, x22, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
+; GISEL-NEXT: csel x19, xzr, x28, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x19, x14, x19
+; GISEL-NEXT: orr x19, x26, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x15, eq
+; GISEL-NEXT: csel x19, xzr, x23, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x19, x20, x19
+; GISEL-NEXT: orr x19, x24, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x22, eq
+; GISEL-NEXT: csel x19, xzr, x15, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x10, x19
-; GISEL-NEXT: ldr x10, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT: orr x19, x16, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x28, eq
+; GISEL-NEXT: csel x19, xzr, x25, eq
+; GISEL-NEXT: ldr x25, [sp, #296] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x19, x16, x19
+; GISEL-NEXT: orr x19, x25, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: csel x19, xzr, x10, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x19, x4, x19
+; GISEL-NEXT: ldr x10, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT: orr x19, x27, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x21, eq
-; GISEL-NEXT: ldp x28, x21, [sp, #64] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x19, xzr, x5, eq
; GISEL-NEXT: cmp x9, #12
+; GISEL-NEXT: ldr x5, [sp, #72] ; 8-byte Reload
; GISEL-NEXT: orr x19, x21, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x25, eq
+; GISEL-NEXT: csel x19, xzr, x5, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: orr x19, x27, x19
+; GISEL-NEXT: orr x19, x20, x19
+; GISEL-NEXT: mov x20, x6
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: csel x1, x6, x1, eq
; GISEL-NEXT: cmp x9, #15
+; GISEL-NEXT: ldr x6, [sp, #64] ; 8-byte Reload
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x10, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x24, eq
+; GISEL-NEXT: csel x1, xzr, x2, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: mov x24, x11
-; GISEL-NEXT: orr x1, x26, x1
-; GISEL-NEXT: str x10, [sp, #264] ; 8-byte Spill
-; GISEL-NEXT: ldr x10, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: str x10, [sp, #256] ; 8-byte Spill
+; GISEL-NEXT: orr x1, x4, x1
+; GISEL-NEXT: ldp x2, x21, [sp, #48] ; 16-byte Folded Reload
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: mov x26, x13
+; GISEL-NEXT: ldr x10, [sp, #232] ; 8-byte Reload
; GISEL-NEXT: csel x19, xzr, x12, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: mov x12, x30
-; GISEL-NEXT: orr x19, x5, x19
-; GISEL-NEXT: mov x5, x15
+; GISEL-NEXT: orr x19, x3, x19
+; GISEL-NEXT: mov x4, x13
+; GISEL-NEXT: mov x3, x11
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x19, xzr, x13, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x13, x23
+; GISEL-NEXT: mov x13, x0
; GISEL-NEXT: orr x19, x11, x19
-; GISEL-NEXT: mov x11, x17
+; GISEL-NEXT: mov x11, x14
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x19, xzr, x17, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x17, x20
-; GISEL-NEXT: orr x19, x30, x19
-; GISEL-NEXT: mov x30, x7
+; GISEL-NEXT: orr x19, x14, x19
+; GISEL-NEXT: mov x14, x15
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: mov x27, x30
-; GISEL-NEXT: csel x19, xzr, x7, eq
+; GISEL-NEXT: csel x19, xzr, x30, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x7, x14
-; GISEL-NEXT: orr x19, x0, x19
+; GISEL-NEXT: mov x30, x7
+; GISEL-NEXT: orr x19, x7, x19
+; GISEL-NEXT: mov x7, x22
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: csel x19, xzr, x0, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: mov x3, x22
-; GISEL-NEXT: orr x19, x23, x19
-; GISEL-NEXT: ldr x23, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT: mov x0, x11
+; GISEL-NEXT: orr x19, x22, x19
+; GISEL-NEXT: mov x22, x28
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
+; GISEL-NEXT: csel x19, xzr, x28, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x19, x14, x19
+; GISEL-NEXT: ldr x28, [sp, #40] ; 8-byte Reload
+; GISEL-NEXT: orr x19, x26, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x15, eq
+; GISEL-NEXT: csel x19, xzr, x23, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: ldr x15, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT: orr x19, x20, x19
-; GISEL-NEXT: ldp x14, x20, [sp, #40] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x19, x24, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x22, eq
+; GISEL-NEXT: csel x19, xzr, x15, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: ldr x22, [sp, #56] ; 8-byte Reload
-; GISEL-NEXT: orr x19, x15, x19
+; GISEL-NEXT: orr x19, x16, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x20, eq
+; GISEL-NEXT: csel x19, xzr, x21, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x16, x19
+; GISEL-NEXT: orr x19, x25, x19
+; GISEL-NEXT: ldr x25, [sp, #312] ; 8-byte Reload
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: csel x19, xzr, x25, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x19, x4, x19
+; GISEL-NEXT: orr x19, x27, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x14, eq
+; GISEL-NEXT: csel x19, xzr, x2, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x19, x21, x19
+; GISEL-NEXT: orr x19, x28, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x25, eq
+; GISEL-NEXT: csel x19, xzr, x5, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: orr x19, x22, x19
+; GISEL-NEXT: orr x19, x6, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: csel x1, x20, x1, eq
; GISEL-NEXT: cmp x9, #14
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x9, #15
@@ -2832,80 +2849,78 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x10, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT: ldr x10, [sp, #32] ; 8-byte Reload
+; GISEL-NEXT: str x10, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: ldr x10, [sp, #304] ; 8-byte Reload
; GISEL-NEXT: csel x1, xzr, x10, eq
-; GISEL-NEXT: ldr x10, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: ldr x10, [sp, #32] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x1, x10, x1
-; GISEL-NEXT: ldr x10, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: ldr x10, [sp, #168] ; 8-byte Reload
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x26, eq
+; GISEL-NEXT: csel x19, xzr, x4, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x19, x24, x19
+; GISEL-NEXT: orr x19, x3, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x11, eq
+; GISEL-NEXT: csel x19, xzr, x17, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x19, x12, x19
+; GISEL-NEXT: orr x19, x11, x19
+; GISEL-NEXT: mov x11, x7
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x30, eq
+; GISEL-NEXT: csel x19, xzr, x12, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x30, x0
-; GISEL-NEXT: orr x19, x0, x19
-; GISEL-NEXT: mov x0, x13
+; GISEL-NEXT: orr x19, x30, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x23, eq
+; GISEL-NEXT: csel x19, xzr, x13, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x19, x13, x19
-; GISEL-NEXT: mov x13, x3
+; GISEL-NEXT: orr x19, x7, x19
+; GISEL-NEXT: mov x7, x30
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
+; GISEL-NEXT: csel x19, xzr, x22, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x19, x7, x19
+; GISEL-NEXT: mov x22, x21
+; GISEL-NEXT: orr x19, x26, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x5, eq
+; GISEL-NEXT: csel x19, xzr, x23, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: mov x5, x17
-; GISEL-NEXT: orr x19, x17, x19
-; GISEL-NEXT: mov x17, x22
+; GISEL-NEXT: orr x19, x24, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: csel x19, xzr, x15, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: mov x3, x20
-; GISEL-NEXT: orr x19, x15, x19
+; GISEL-NEXT: orr x19, x16, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x20, eq
+; GISEL-NEXT: csel x19, xzr, x21, eq
+; GISEL-NEXT: ldr x21, [sp, #296] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: mov x20, x14
-; GISEL-NEXT: orr x19, x16, x19
+; GISEL-NEXT: orr x19, x21, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: csel x19, xzr, x25, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x4, x19
+; GISEL-NEXT: mov x25, x0
+; GISEL-NEXT: orr x19, x27, x19
+; GISEL-NEXT: mov x27, x28
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x14, eq
+; GISEL-NEXT: csel x19, xzr, x2, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: mov x14, x13
-; GISEL-NEXT: orr x19, x21, x19
+; GISEL-NEXT: orr x19, x28, x19
+; GISEL-NEXT: mov x28, x26
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x25, eq
+; GISEL-NEXT: csel x19, xzr, x5, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x19, x22, x19
-; GISEL-NEXT: mov x22, x30
+; GISEL-NEXT: orr x19, x6, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: csel x1, x20, x1, eq
; GISEL-NEXT: cmp x9, #13
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x9, #14
@@ -2915,67 +2930,78 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x10, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x26, eq
+; GISEL-NEXT: csel x1, xzr, x4, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: str x10, [sp, #216] ; 8-byte Spill
-; GISEL-NEXT: orr x1, x24, x1
+; GISEL-NEXT: str x10, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT: orr x1, x3, x1
+; GISEL-NEXT: mov x3, x12
; GISEL-NEXT: ldr x10, [sp, #176] ; 8-byte Reload
-; GISEL-NEXT: mov x24, x3
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: mov x26, x5
-; GISEL-NEXT: csel x19, xzr, x11, eq
+; GISEL-NEXT: mov x4, x27
+; GISEL-NEXT: csel x19, xzr, x17, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x19, x12, x19
+; GISEL-NEXT: orr x19, x0, x19
+; GISEL-NEXT: mov x0, x13
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x27, eq
+; GISEL-NEXT: csel x19, xzr, x12, eq
; GISEL-NEXT: cmp x9, #2
+; GISEL-NEXT: ldr x12, [sp, #16] ; 8-byte Reload
; GISEL-NEXT: orr x19, x30, x19
-; GISEL-NEXT: ldr x30, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT: mov x30, x23
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x23, eq
+; GISEL-NEXT: csel x19, xzr, x13, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x19, x0, x19
+; GISEL-NEXT: mov x13, x11
+; GISEL-NEXT: orr x19, x11, x19
+; GISEL-NEXT: mov x11, x0
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
+; GISEL-NEXT: csel x19, xzr, x12, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x19, x7, x19
+; GISEL-NEXT: orr x19, x26, x19
+; GISEL-NEXT: mov x26, x12
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x30, eq
+; GISEL-NEXT: csel x19, xzr, x23, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x19, x5, x19
+; GISEL-NEXT: mov x23, x24
+; GISEL-NEXT: orr x19, x24, x19
+; GISEL-NEXT: ldr x24, [sp, #312] ; 8-byte Reload
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x13, eq
+; GISEL-NEXT: csel x19, xzr, x15, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x19, x15, x19
+; GISEL-NEXT: mov x15, x16
+; GISEL-NEXT: orr x19, x16, x19
+; GISEL-NEXT: mov x16, x22
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: csel x19, xzr, x22, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x19, x16, x19
+; GISEL-NEXT: ldr x22, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: orr x19, x21, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: csel x19, xzr, x24, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x19, x4, x19
+; GISEL-NEXT: orr x19, x22, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x20, eq
+; GISEL-NEXT: csel x19, xzr, x2, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x21, x19
+; GISEL-NEXT: orr x19, x27, x19
+; GISEL-NEXT: mov x27, x7
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x25, eq
+; GISEL-NEXT: csel x19, xzr, x5, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x19, x17, x19
+; GISEL-NEXT: orr x19, x6, x19
; GISEL-NEXT: csel x1, x19, x1, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: csel x1, x20, x1, eq
; GISEL-NEXT: cmp x9, #12
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x9, #13
@@ -2988,61 +3014,63 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x19, x10, x1, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: ldr x10, [sp, #184] ; 8-byte Reload
-; GISEL-NEXT: csel x1, xzr, x11, eq
+; GISEL-NEXT: csel x1, xzr, x17, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: mov x11, x23
-; GISEL-NEXT: orr x1, x12, x1
-; GISEL-NEXT: mov x12, x0
+; GISEL-NEXT: mov x17, x3
+; GISEL-NEXT: orr x1, x25, x1
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x27, eq
+; GISEL-NEXT: csel x3, xzr, x3, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x3, x22, x3
+; GISEL-NEXT: orr x3, x7, x3
+; GISEL-NEXT: mov x7, x30
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x23, eq
+; GISEL-NEXT: csel x3, xzr, x0, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x23, x17
-; GISEL-NEXT: orr x3, x0, x3
+; GISEL-NEXT: orr x3, x13, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x6, eq
+; GISEL-NEXT: csel x3, xzr, x12, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x3, x7, x3
+; GISEL-NEXT: mov x12, x13
+; GISEL-NEXT: orr x3, x28, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x3, xzr, x30, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x3, x26, x3
+; GISEL-NEXT: mov x30, x24
+; GISEL-NEXT: orr x3, x23, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x13, eq
+; GISEL-NEXT: csel x3, xzr, x14, eq
; GISEL-NEXT: cmp x9, #5
; GISEL-NEXT: orr x3, x15, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x24, eq
+; GISEL-NEXT: csel x3, xzr, x16, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x3, x16, x3
+; GISEL-NEXT: orr x3, x21, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x2, eq
+; GISEL-NEXT: csel x3, xzr, x24, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x3, x4, x3
+; GISEL-NEXT: mov x24, x22
+; GISEL-NEXT: orr x3, x22, x3
+; GISEL-NEXT: mov x22, x23
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x20, eq
+; GISEL-NEXT: csel x3, xzr, x2, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x3, x21, x3
+; GISEL-NEXT: orr x3, x4, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x25, eq
+; GISEL-NEXT: csel x3, xzr, x5, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x3, x17, x3
+; GISEL-NEXT: orr x3, x6, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: mov x3, x4
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: csel x1, x20, x1, eq
; GISEL-NEXT: cmp x9, #11
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x9, #12
@@ -3056,54 +3084,55 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x10, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x17, xzr, x27, eq
+; GISEL-NEXT: csel x0, xzr, x17, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: str x10, [sp, #184] ; 8-byte Spill
-; GISEL-NEXT: orr x17, x22, x17
+; GISEL-NEXT: orr x17, x27, x0
; GISEL-NEXT: ldr x10, [sp, #192] ; 8-byte Reload
; GISEL-NEXT: csel x17, x17, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x0, xzr, x11, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x0, x12, x0
+; GISEL-NEXT: orr x0, x13, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x6, eq
+; GISEL-NEXT: csel x0, xzr, x26, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x0, x7, x0
+; GISEL-NEXT: orr x0, x28, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x30, eq
+; GISEL-NEXT: csel x0, xzr, x7, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x0, x26, x0
+; GISEL-NEXT: orr x0, x23, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x13, eq
+; GISEL-NEXT: csel x0, xzr, x14, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: orr x0, x15, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x24, eq
+; GISEL-NEXT: csel x0, xzr, x16, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x0, x16, x0
+; GISEL-NEXT: orr x0, x21, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x2, eq
+; GISEL-NEXT: csel x0, xzr, x30, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x0, x4, x0
+; GISEL-NEXT: orr x0, x24, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x20, eq
+; GISEL-NEXT: csel x0, xzr, x2, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x0, x21, x0
+; GISEL-NEXT: orr x0, x4, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x25, eq
+; GISEL-NEXT: csel x0, xzr, x5, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x0, x23, x0
+; GISEL-NEXT: orr x0, x6, x0
; GISEL-NEXT: csel x17, x0, x17, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x17, x28, x17, eq
+; GISEL-NEXT: mov x0, x7
+; GISEL-NEXT: csel x17, x20, x17, eq
; GISEL-NEXT: cmp x9, #10
; GISEL-NEXT: csel x17, xzr, x17, eq
; GISEL-NEXT: cmp x9, #11
@@ -3125,14 +3154,14 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x12, x12, x13
; GISEL-NEXT: csel x12, x12, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x6, eq
+; GISEL-NEXT: csel x13, xzr, x26, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x7, x13
+; GISEL-NEXT: orr x13, x28, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x30, eq
+; GISEL-NEXT: csel x13, xzr, x7, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x22, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x14, eq
@@ -3140,27 +3169,27 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x13, x15, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x24, eq
+; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x13, x16, x13
+; GISEL-NEXT: orr x13, x21, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x2, eq
+; GISEL-NEXT: csel x13, xzr, x30, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x4, x13
+; GISEL-NEXT: orr x13, x24, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x13, x21, x13
+; GISEL-NEXT: orr x13, x4, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: csel x13, xzr, x5, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x23, x13
+; GISEL-NEXT: orr x13, x6, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x12, x28, x12, eq
+; GISEL-NEXT: csel x12, x20, x12, eq
; GISEL-NEXT: cmp x9, #9
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #10
@@ -3178,14 +3207,16 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x12, x10, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x6, eq
+; GISEL-NEXT: csel x11, xzr, x26, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x7, x11
+; GISEL-NEXT: orr x10, x28, x11
+; GISEL-NEXT: ldp x26, x25, [sp, #336] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x30, eq
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: orr x11, x23, x11
+; GISEL-NEXT: ldp x28, x27, [sp, #320] ; 16-byte Folded Reload
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x11, xzr, x14, eq
@@ -3193,29 +3224,28 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x11, x15, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x24, eq
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x16, x11
+; GISEL-NEXT: orr x11, x21, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x2, eq
+; GISEL-NEXT: csel x11, xzr, x30, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x11, x4, x11
-; GISEL-NEXT: ldr x4, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT: orr x11, x24, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x20, eq
+; GISEL-NEXT: csel x11, xzr, x2, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x11, x21, x11
+; GISEL-NEXT: orr x11, x4, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x25, eq
+; GISEL-NEXT: csel x11, xzr, x5, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x23, x11
+; GISEL-NEXT: orr x11, x6, x11
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: ldr x11, [sp, #208] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x28, x10, eq
+; GISEL-NEXT: csel x10, x20, x10, eq
; GISEL-NEXT: cmp x9, #8
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #9
@@ -3235,10 +3265,9 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x10, x11, x10, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x30, eq
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x26, x11
-; GISEL-NEXT: ldp x29, x30, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x23, x11
; GISEL-NEXT: csel x11, x11, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x14, eq
@@ -3246,28 +3275,28 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x13, x15, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x24, eq
+; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x16, x13
+; GISEL-NEXT: orr x13, x21, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x2, eq
+; GISEL-NEXT: csel x13, xzr, x30, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x3, x13
+; GISEL-NEXT: orr x13, x24, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: csel x13, xzr, x2, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x13, x21, x13
+; GISEL-NEXT: orr x13, x4, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: csel x13, xzr, x5, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x23, x13
+; GISEL-NEXT: orr x13, x6, x13
; GISEL-NEXT: csel x11, x13, x11, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: ldr x13, [sp, #224] ; 8-byte Reload
-; GISEL-NEXT: csel x11, x28, x11, eq
+; GISEL-NEXT: ldr x13, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: csel x11, x20, x11, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #8
@@ -3294,28 +3323,28 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x13, x15, x13
; GISEL-NEXT: csel x13, x13, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x24, eq
+; GISEL-NEXT: csel x0, xzr, x16, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x0, x16, x0
+; GISEL-NEXT: orr x0, x21, x0
; GISEL-NEXT: csel x13, x0, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x2, eq
+; GISEL-NEXT: csel x0, xzr, x30, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x0, x3, x0
+; GISEL-NEXT: orr x0, x24, x0
; GISEL-NEXT: csel x13, x0, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x20, eq
+; GISEL-NEXT: csel x0, xzr, x2, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x0, x21, x0
+; GISEL-NEXT: orr x0, x4, x0
; GISEL-NEXT: csel x13, x0, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x25, eq
+; GISEL-NEXT: csel x0, xzr, x5, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x0, x23, x0
+; GISEL-NEXT: orr x0, x6, x0
; GISEL-NEXT: csel x13, x0, x13, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: ldr x0, [sp, #232] ; 8-byte Reload
-; GISEL-NEXT: csel x13, x28, x13, eq
+; GISEL-NEXT: ldr x0, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT: csel x13, x20, x13, eq
; GISEL-NEXT: cmp x9, #6
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #7
@@ -3339,29 +3368,30 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x13, x0, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x24, eq
+; GISEL-NEXT: csel x0, xzr, x16, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x0, x16, x0
-; GISEL-NEXT: ldr x16, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT: ldr x16, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT: orr x0, x21, x0
+; GISEL-NEXT: ldp x22, x21, [sp, #368] ; 16-byte Folded Reload
; GISEL-NEXT: csel x0, x0, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x2, eq
+; GISEL-NEXT: csel x1, xzr, x30, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x1, x3, x1
+; GISEL-NEXT: orr x1, x24, x1
; GISEL-NEXT: csel x0, x1, x0, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x20, eq
+; GISEL-NEXT: csel x1, xzr, x2, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x1, x21, x1
+; GISEL-NEXT: orr x1, x4, x1
; GISEL-NEXT: csel x0, x1, x0, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x25, eq
+; GISEL-NEXT: csel x1, xzr, x5, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x1, x23, x1
+; GISEL-NEXT: orr x1, x6, x1
; GISEL-NEXT: csel x0, x1, x0, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: ldr x1, [sp, #248] ; 8-byte Reload
-; GISEL-NEXT: csel x0, x28, x0, eq
+; GISEL-NEXT: ldr x1, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: csel x0, x20, x0, eq
; GISEL-NEXT: cmp x9, #5
; GISEL-NEXT: csel x0, xzr, x0, eq
; GISEL-NEXT: cmp x9, #6
@@ -3387,23 +3417,25 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x0, x1, x0, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x2, eq
+; GISEL-NEXT: csel x1, xzr, x30, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x1, x3, x1
+; GISEL-NEXT: orr x1, x24, x1
+; GISEL-NEXT: ldp x29, x30, [sp, #400] ; 16-byte Folded Reload
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x20, eq
+; GISEL-NEXT: csel x3, xzr, x2, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x3, x21, x3
+; GISEL-NEXT: orr x3, x4, x3
+; GISEL-NEXT: ldp x24, x23, [sp, #352] ; 16-byte Folded Reload
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x25, eq
+; GISEL-NEXT: csel x3, xzr, x5, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x3, x23, x3
+; GISEL-NEXT: orr x3, x6, x3
; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: ldr x3, [sp, #256] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: ldr x3, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT: csel x1, x20, x1, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x9, #5
@@ -3431,19 +3463,19 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x3, x3, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x20, eq
+; GISEL-NEXT: csel x1, xzr, x2, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x1, x21, x1
-; GISEL-NEXT: ldp x22, x21, [sp, #368] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x1, x4, x1
+; GISEL-NEXT: ldr x4, [sp, #160] ; 8-byte Reload
; GISEL-NEXT: csel x1, x1, xzr, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x2, xzr, x25, eq
+; GISEL-NEXT: csel x2, xzr, x5, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x2, x23, x2
+; GISEL-NEXT: orr x2, x6, x2
; GISEL-NEXT: csel x1, x2, x1, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: ldr x2, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: ldr x2, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT: csel x1, x20, x1, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x9, #4
@@ -3473,14 +3505,13 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x2, x2, x1, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x1, [sp, #264] ; 8-byte Reload
-; GISEL-NEXT: csel x15, xzr, x25, eq
+; GISEL-NEXT: ldr x1, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT: csel x15, xzr, x5, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x15, x23, x15
-; GISEL-NEXT: ldp x24, x23, [sp, #352] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x15, x6, x15
; GISEL-NEXT: csel x15, x15, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x15, x28, x15, eq
+; GISEL-NEXT: csel x15, x20, x15, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #3
@@ -3512,8 +3543,8 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x15, x16, x15, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: ldr x16, [sp, #296] ; 8-byte Reload
-; GISEL-NEXT: csel x14, x28, xzr, eq
+; GISEL-NEXT: ldr x16, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: csel x14, x20, xzr, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #2
@@ -3526,10 +3557,10 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: stp x4, x1, [x16]
; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: ldr x4, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: ldr x4, [sp, #232] ; 8-byte Reload
; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: ldr x1, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: ldr x1, [sp, #304] ; 8-byte Reload
; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: stp x13, x0, [x16, #80]
@@ -3555,11 +3586,9 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x9, xzr, x10, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: ldr x8, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: ldr x8, [sp, #280] ; 8-byte Reload
; GISEL-NEXT: ldp x20, x19, [sp, #384] ; 16-byte Folded Reload
-; GISEL-NEXT: ldp x26, x25, [sp, #336] ; 16-byte Folded Reload
; GISEL-NEXT: csel x8, x8, x9, eq
-; GISEL-NEXT: ldp x28, x27, [sp, #320] ; 16-byte Folded Reload
; GISEL-NEXT: stp x15, x8, [x16, #112]
; GISEL-NEXT: add sp, sp, #416
; GISEL-NEXT: ret
@@ -3726,7 +3755,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: .cfi_offset w26, -80
; GISEL-NEXT: .cfi_offset w27, -88
; GISEL-NEXT: .cfi_offset w28, -96
-; GISEL-NEXT: str x0, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT: str x0, [sp, #256] ; 8-byte Spill
; GISEL-NEXT: mov w8, w2
; GISEL-NEXT: mov w9, #64 ; =0x40
; GISEL-NEXT: ldp x7, x0, [x1]
@@ -3734,118 +3763,119 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: sub x14, x9, x15
; GISEL-NEXT: ldr x28, [x1, #120]
; GISEL-NEXT: lsr x10, x8, #6
-; GISEL-NEXT: ldp x17, x16, [x1, #16]
+; GISEL-NEXT: ldp x16, x17, [x1, #16]
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: lsl x9, x0, x14
; GISEL-NEXT: lsr x12, x7, x15
; GISEL-NEXT: asr x11, x28, #63
; GISEL-NEXT: lsr x20, x0, x15
-; GISEL-NEXT: str x0, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: str x0, [sp, #224] ; 8-byte Spill
; GISEL-NEXT: lsl x27, x28, x14
; GISEL-NEXT: csel x9, xzr, x9, eq
-; GISEL-NEXT: lsl x19, x17, x14
+; GISEL-NEXT: lsl x19, x16, x14
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x12, x9
-; GISEL-NEXT: str x17, [sp, #208] ; 8-byte Spill
-; GISEL-NEXT: lsr x2, x17, x15
+; GISEL-NEXT: str x16, [sp, #200] ; 8-byte Spill
+; GISEL-NEXT: lsr x2, x16, x15
; GISEL-NEXT: csel x9, x9, x11, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x30, x16, x14
+; GISEL-NEXT: lsl x30, x17, x14
; GISEL-NEXT: csel x12, xzr, x19, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: lsr x25, x16, x15
+; GISEL-NEXT: lsr x25, x17, x15
; GISEL-NEXT: orr x12, x20, x12
-; GISEL-NEXT: ldp x13, x17, [x1, #32]
+; GISEL-NEXT: ldp x13, x16, [x1, #32]
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x16, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT: str x17, [sp, #176] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x30, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: str x2, [sp, #88] ; 8-byte Spill
+; GISEL-NEXT: str x2, [sp, #80] ; 8-byte Spill
; GISEL-NEXT: lsl x24, x13, x14
; GISEL-NEXT: orr x12, x2, x12
-; GISEL-NEXT: str x13, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT: str x13, [sp, #160] ; 8-byte Spill
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: lsr x21, x13, x15
; GISEL-NEXT: csel x12, xzr, x24, eq
-; GISEL-NEXT: lsl x0, x17, x14
+; GISEL-NEXT: lsl x17, x16, x14
; GISEL-NEXT: cmp x10, #3
; GISEL-NEXT: orr x12, x25, x12
-; GISEL-NEXT: ldp x16, x13, [x1, #48]
+; GISEL-NEXT: ldp x13, x0, [x1, #48]
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x3, x17, x15
-; GISEL-NEXT: csel x12, xzr, x0, eq
+; GISEL-NEXT: str x17, [sp, #120] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x17, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: str x0, [sp, #128] ; 8-byte Spill
-; GISEL-NEXT: lsl x2, x16, x14
+; GISEL-NEXT: str x16, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT: lsl x17, x13, x14
; GISEL-NEXT: orr x12, x21, x12
-; GISEL-NEXT: mov x0, x16
+; GISEL-NEXT: lsr x16, x16, x15
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x17, [sp, #144] ; 8-byte Spill
-; GISEL-NEXT: csel x12, xzr, x2, eq
-; GISEL-NEXT: str x2, [sp, #304] ; 8-byte Spill
-; GISEL-NEXT: lsl x2, x13, x14
+; GISEL-NEXT: stp x13, x0, [sp, #144] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x12, xzr, x17, eq
+; GISEL-NEXT: str x16, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: lsr x6, x13, x15
+; GISEL-NEXT: orr x12, x16, x12
+; GISEL-NEXT: ldp x16, x13, [x1, #64]
+; GISEL-NEXT: str x17, [sp, #304] ; 8-byte Spill
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x12, x3, x12
-; GISEL-NEXT: ldr x17, [x1, #64]
-; GISEL-NEXT: lsr x6, x0, x15
+; GISEL-NEXT: lsl x17, x0, x14
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x2, eq
-; GISEL-NEXT: stp x16, x13, [sp, #152] ; 16-byte Folded Spill
-; GISEL-NEXT: mov x16, x13
+; GISEL-NEXT: str x28, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x17, eq
+; GISEL-NEXT: lsl x2, x16, x14
; GISEL-NEXT: cmp x10, #6
; GISEL-NEXT: orr x12, x6, x12
-; GISEL-NEXT: lsl x0, x17, x14
+; GISEL-NEXT: str x16, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT: lsl x3, x11, x14
+; GISEL-NEXT: stp x2, x17, [sp, #288] ; 16-byte Folded Spill
+; GISEL-NEXT: mov x17, x16
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x16, x16, x15
-; GISEL-NEXT: ldr x13, [x1, #72]
-; GISEL-NEXT: csel x12, xzr, x0, eq
+; GISEL-NEXT: lsr x16, x0, x15
+; GISEL-NEXT: str x13, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x2, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x12, x16, x12
-; GISEL-NEXT: stp x16, x0, [sp, #288] ; 16-byte Folded Spill
; GISEL-NEXT: lsr x0, x17, x15
+; GISEL-NEXT: orr x12, x16, x12
+; GISEL-NEXT: str x30, [sp, #40] ; 8-byte Spill
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: lsl x12, x13, x14
-; GISEL-NEXT: mov x16, x13
-; GISEL-NEXT: str x13, [sp, #192] ; 8-byte Spill
-; GISEL-NEXT: ldp x13, x5, [x1, #80]
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x17, [sp, #176] ; 8-byte Spill
+; GISEL-NEXT: str x0, [sp, #104] ; 8-byte Spill
+; GISEL-NEXT: stp x12, x16, [sp, #272] ; 16-byte Folded Spill
+; GISEL-NEXT: mov x16, x13
; GISEL-NEXT: csel x17, xzr, x12, eq
-; GISEL-NEXT: str x0, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: ldp x13, x5, [x1, #80]
; GISEL-NEXT: cmp x10, #8
; GISEL-NEXT: orr x17, x0, x17
-; GISEL-NEXT: lsl x0, x13, x14
-; GISEL-NEXT: str x12, [sp, #280] ; 8-byte Spill
+; GISEL-NEXT: stp x25, x24, [sp, #8] ; 16-byte Folded Spill
; GISEL-NEXT: csel x17, x17, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: lsr x9, x16, x15
+; GISEL-NEXT: lsl x0, x13, x14
+; GISEL-NEXT: str x13, [sp, #192] ; 8-byte Spill
+; GISEL-NEXT: lsl x23, x5, x14
+; GISEL-NEXT: lsr x12, x13, x15
; GISEL-NEXT: csel x4, xzr, x0, eq
-; GISEL-NEXT: str x13, [sp, #200] ; 8-byte Spill
+; GISEL-NEXT: stp x9, x0, [sp, #88] ; 16-byte Folded Spill
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: stp x9, x0, [sp, #96] ; 16-byte Folded Spill
; GISEL-NEXT: orr x4, x9, x4
-; GISEL-NEXT: lsl x23, x5, x14
-; GISEL-NEXT: lsr x12, x13, x15
; GISEL-NEXT: ldp x9, x13, [x1, #96]
; GISEL-NEXT: csel x17, x4, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x28, [sp, #256] ; 8-byte Spill
+; GISEL-NEXT: str x23, [sp, #264] ; 8-byte Spill
; GISEL-NEXT: csel x4, xzr, x23, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: str x3, [sp, #120] ; 8-byte Spill
; GISEL-NEXT: orr x4, x12, x4
; GISEL-NEXT: lsl x16, x9, x14
-; GISEL-NEXT: stp x5, x9, [sp, #216] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x5, x9, [sp, #208] ; 16-byte Folded Spill
; GISEL-NEXT: csel x17, x4, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x3, x11, x14
-; GISEL-NEXT: stp x16, x12, [sp, #72] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x16, x12, [sp, #64] ; 16-byte Folded Spill
; GISEL-NEXT: mov x12, x9
; GISEL-NEXT: lsr x9, x5, x15
; GISEL-NEXT: csel x4, xzr, x16, eq
@@ -3853,18 +3883,16 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x10, #11
; GISEL-NEXT: orr x4, x9, x4
; GISEL-NEXT: lsr x12, x12, x15
-; GISEL-NEXT: str x30, [sp, #48] ; 8-byte Spill
-; GISEL-NEXT: stp x16, x9, [sp, #56] ; 16-byte Folded Spill
+; GISEL-NEXT: ldr x5, [sp, #88] ; 8-byte Reload
+; GISEL-NEXT: stp x16, x9, [sp, #48] ; 16-byte Folded Spill
; GISEL-NEXT: ldr x9, [x1, #112]
; GISEL-NEXT: csel x17, x4, x17, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: stp x25, x24, [sp, #16] ; 16-byte Folded Spill
-; GISEL-NEXT: ldr x5, [sp, #96] ; 8-byte Reload
; GISEL-NEXT: csel x1, xzr, x16, eq
; GISEL-NEXT: lsl x16, x9, x14
; GISEL-NEXT: cmp x10, #12
; GISEL-NEXT: orr x1, x12, x1
-; GISEL-NEXT: stp x13, x9, [sp, #240] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x13, x9, [sp, #232] ; 16-byte Folded Spill
; GISEL-NEXT: stp x16, x12, [sp, #320] ; 16-byte Folded Spill
; GISEL-NEXT: mov x12, x9
; GISEL-NEXT: csel x1, x1, x17, eq
@@ -3873,7 +3901,6 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: lsr x26, x12, x15
; GISEL-NEXT: csel x17, xzr, x16, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: str x23, [sp, #272] ; 8-byte Spill
; GISEL-NEXT: orr x13, x9, x17
; GISEL-NEXT: str x9, [sp, #312] ; 8-byte Spill
; GISEL-NEXT: mov x9, x28
@@ -3882,35 +3909,33 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: lsr x22, x9, x15
; GISEL-NEXT: csel x28, xzr, x27, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: str x2, [sp, #8] ; 8-byte Spill
; GISEL-NEXT: orr x28, x26, x28
-; GISEL-NEXT: ldp x0, x16, [sp, #120] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x0, x16, [sp, #112] ; 16-byte Folded Reload
; GISEL-NEXT: csel x12, x28, x13, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x13, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: stp x22, x3, [sp, #24] ; 16-byte Folded Spill
; GISEL-NEXT: csel x28, xzr, x3, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: stp x22, x3, [sp, #32] ; 16-byte Folded Spill
; GISEL-NEXT: orr x28, x22, x28
-; GISEL-NEXT: ldp x15, x14, [sp, #72] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x2, x13, [sp, #296] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, x28, x12, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: mov x28, x24
; GISEL-NEXT: csel x9, x7, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x7, [sp, #88] ; 8-byte Reload
-; GISEL-NEXT: str x9, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT: ldr x7, [sp, #80] ; 8-byte Reload
+; GISEL-NEXT: str x9, [sp, #128] ; 8-byte Spill
; GISEL-NEXT: csel x9, xzr, x19, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x20, x9
-; GISEL-NEXT: ldr x12, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #272] ; 8-byte Reload
; GISEL-NEXT: csel x9, x9, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x30, eq
; GISEL-NEXT: cmp x10, #1
; GISEL-NEXT: mov x30, x25
; GISEL-NEXT: orr x20, x7, x20
-; GISEL-NEXT: ldp x4, x19, [sp, #104] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x4, x19, [sp, #96] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x24, eq
@@ -3923,18 +3948,19 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x20, xzr, x16, eq
; GISEL-NEXT: cmp x10, #3
; GISEL-NEXT: orr x20, x21, x20
-; GISEL-NEXT: ldp x1, x17, [sp, #56] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x15, x14, [sp, #64] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x13, eq
; GISEL-NEXT: cmp x10, #4
; GISEL-NEXT: orr x20, x0, x20
+; GISEL-NEXT: ldp x1, x17, [sp, #48] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x2, eq
; GISEL-NEXT: cmp x10, #5
; GISEL-NEXT: orr x20, x6, x20
-; GISEL-NEXT: ldp x21, x6, [sp, #288] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x21, x6, [sp, #280] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x6, eq
@@ -3978,12 +4004,12 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x20, xzr, x27, eq
; GISEL-NEXT: cmp x10, #13
; GISEL-NEXT: orr x20, x26, x20
-; GISEL-NEXT: ldr x26, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT: ldr x26, [sp, #264] ; 8-byte Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x3, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: ldr x3, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT: ldr x3, [sp, #224] ; 8-byte Reload
; GISEL-NEXT: orr x20, x22, x20
; GISEL-NEXT: mov x22, x23
; GISEL-NEXT: csel x9, x20, x9, eq
@@ -3993,8 +4019,8 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x9, x3, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: mov x3, x16
-; GISEL-NEXT: str x9, [sp, #232] ; 8-byte Spill
-; GISEL-NEXT: ldr x9, [sp, #48] ; 8-byte Reload
+; GISEL-NEXT: str x9, [sp, #224] ; 8-byte Spill
+; GISEL-NEXT: ldr x9, [sp, #40] ; 8-byte Reload
; GISEL-NEXT: csel x9, xzr, x9, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x7, x9
@@ -4034,7 +4060,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x12, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: ldr x12, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #200] ; 8-byte Reload
; GISEL-NEXT: orr x20, x19, x20
; GISEL-NEXT: mov x19, x27
; GISEL-NEXT: csel x9, x20, x9, eq
@@ -4069,7 +4095,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x20, xzr, x27, eq
; GISEL-NEXT: cmp x10, #12
; GISEL-NEXT: orr x20, x23, x20
-; GISEL-NEXT: ldp x27, x23, [sp, #32] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x27, x23, [sp, #24] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x23, eq
@@ -4083,25 +4109,24 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x9, [sp, #208] ; 8-byte Spill
-; GISEL-NEXT: ldp x12, x9, [sp, #16] ; 16-byte Folded Reload
+; GISEL-NEXT: str x9, [sp, #200] ; 8-byte Spill
+; GISEL-NEXT: ldp x12, x9, [sp, #8] ; 16-byte Folded Reload
; GISEL-NEXT: csel x9, xzr, x9, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x12, x9
-; GISEL-NEXT: ldr x12, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #176] ; 8-byte Reload
; GISEL-NEXT: csel x9, x9, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x3, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: ldr x3, [sp, #296] ; 8-byte Reload
; GISEL-NEXT: orr x20, x25, x20
-; GISEL-NEXT: ldr x25, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT: ldr x25, [sp, #272] ; 8-byte Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x13, eq
-; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: ldr x13, [sp, #8] ; 8-byte Reload
+; GISEL-NEXT: ldp x3, x13, [sp, #288] ; 16-byte Folded Reload
; GISEL-NEXT: orr x20, x16, x20
+; GISEL-NEXT: cmp x10, #2
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x13, eq
@@ -4148,7 +4173,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x30, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: ldr x30, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT: ldr x30, [sp, #264] ; 8-byte Reload
; GISEL-NEXT: orr x20, x7, x20
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
@@ -4170,8 +4195,8 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x12, [sp, #168] ; 8-byte Reload
-; GISEL-NEXT: str x9, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT: ldr x12, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT: str x9, [sp, #176] ; 8-byte Spill
; GISEL-NEXT: csel x9, xzr, x5, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x21, x9
@@ -4188,7 +4213,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x20, xzr, x13, eq
; GISEL-NEXT: cmp x10, #2
; GISEL-NEXT: orr x20, x24, x20
-; GISEL-NEXT: ldr x24, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: ldr x24, [sp, #280] ; 8-byte Reload
; GISEL-NEXT: csel x9, x20, x9, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x20, xzr, x3, eq
@@ -4246,8 +4271,8 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x12, [sp, #144] ; 8-byte Reload
-; GISEL-NEXT: str x9, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT: ldr x12, [sp, #136] ; 8-byte Reload
+; GISEL-NEXT: str x9, [sp, #160] ; 8-byte Spill
; GISEL-NEXT: csel x9, xzr, x5, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x28, x9
@@ -4320,7 +4345,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x12, [sp, #152] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #144] ; 8-byte Reload
; GISEL-NEXT: str x9, [sp, #304] ; 8-byte Spill
; GISEL-NEXT: csel x9, xzr, x13, eq
; GISEL-NEXT: cmp x10, #0
@@ -4388,7 +4413,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x20, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x12, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #152] ; 8-byte Reload
; GISEL-NEXT: csel x9, xzr, x28, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x24, x9
@@ -4451,11 +4476,11 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x2, x12, x9, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x12, [sp, #176] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #168] ; 8-byte Reload
; GISEL-NEXT: csel x9, xzr, x25, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x9, x16, x9
-; GISEL-NEXT: ldr x16, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: ldr x16, [sp, #208] ; 8-byte Reload
; GISEL-NEXT: csel x9, x9, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x13, xzr, x3, eq
@@ -4546,7 +4571,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x12, x27, x12
; GISEL-NEXT: csel x9, x12, x9, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: ldr x12, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT: ldr x12, [sp, #184] ; 8-byte Reload
; GISEL-NEXT: csel x9, x11, x9, eq
; GISEL-NEXT: cmp x10, #8
; GISEL-NEXT: csel x9, x11, x9, eq
@@ -4599,7 +4624,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: orr x13, x27, x13
; GISEL-NEXT: csel x12, x13, x12, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: ldr x13, [sp, #200] ; 8-byte Reload
+; GISEL-NEXT: ldr x13, [sp, #192] ; 8-byte Reload
; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #7
; GISEL-NEXT: csel x12, x11, x12, eq
@@ -4624,9 +4649,9 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x14, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: ldr x14, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT: ldr x14, [sp, #256] ; 8-byte Reload
; GISEL-NEXT: orr x12, x15, x12
-; GISEL-NEXT: ldr x15, [sp, #136] ; 8-byte Reload
+; GISEL-NEXT: ldr x15, [sp, #128] ; 8-byte Reload
; GISEL-NEXT: csel x12, x12, x11, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: stp x9, x13, [x14, #72]
@@ -4634,7 +4659,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x10, #1
; GISEL-NEXT: str x15, [x14]
; GISEL-NEXT: orr x0, x1, x0
-; GISEL-NEXT: ldr x15, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT: ldr x15, [sp, #224] ; 8-byte Reload
; GISEL-NEXT: stp x2, x6, [x14, #56]
; GISEL-NEXT: csel x12, x0, x12, eq
; GISEL-NEXT: tst x8, #0x3f
@@ -4642,21 +4667,21 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x10, #2
; GISEL-NEXT: str x15, [x14, #8]
; GISEL-NEXT: orr x0, x5, x0
-; GISEL-NEXT: ldr x15, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT: ldr x15, [sp, #200] ; 8-byte Reload
; GISEL-NEXT: csel x12, x0, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x0, xzr, x7, eq
; GISEL-NEXT: cmp x10, #3
; GISEL-NEXT: str x15, [x14, #16]
; GISEL-NEXT: orr x0, x19, x0
-; GISEL-NEXT: ldr x15, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT: ldr x15, [sp, #176] ; 8-byte Reload
; GISEL-NEXT: csel x12, x0, x12, eq
; GISEL-NEXT: tst x8, #0x3f
; GISEL-NEXT: csel x0, xzr, x23, eq
; GISEL-NEXT: cmp x10, #4
; GISEL-NEXT: str x15, [x14, #24]
; GISEL-NEXT: orr x0, x27, x0
-; GISEL-NEXT: ldr x15, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT: ldr x15, [sp, #160] ; 8-byte Reload
; GISEL-NEXT: csel x12, x0, x12, eq
; GISEL-NEXT: cmp x10, #5
; GISEL-NEXT: csel x12, x11, x12, eq
@@ -4686,7 +4711,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x0, x16, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x16, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT: ldr x16, [sp, #216] ; 8-byte Reload
; GISEL-NEXT: csel x12, xzr, x17, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x12, x1, x12
@@ -4734,7 +4759,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x3, x16, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x16, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: ldr x16, [sp, #232] ; 8-byte Reload
; GISEL-NEXT: csel x12, xzr, x4, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: stp x0, x3, [x14, #88]
@@ -4779,7 +4804,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x4, x16, x12, eq
; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x16, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT: ldr x16, [sp, #240] ; 8-byte Reload
; GISEL-NEXT: csel x12, xzr, x7, eq
; GISEL-NEXT: cmp x10, #0
; GISEL-NEXT: orr x12, x19, x12
@@ -4858,7 +4883,7 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x10, #15
; GISEL-NEXT: csel x9, x11, x9, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: ldr x8, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT: ldr x8, [sp, #248] ; 8-byte Reload
; GISEL-NEXT: ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
; GISEL-NEXT: csel x8, x8, x9, eq
; GISEL-NEXT: str x8, [x14, #120]
diff --git a/llvm/test/CodeGen/AArch64/clmul-fixed.ll b/llvm/test/CodeGen/AArch64/clmul-fixed.ll
index 799b1319e185b..a924bf4cdf07a 100644
--- a/llvm/test/CodeGen/AArch64/clmul-fixed.ll
+++ b/llvm/test/CodeGen/AArch64/clmul-fixed.ll
@@ -174,7 +174,6 @@ define <4 x i32> @clmul_v4i32_neon(<4 x i32> %x, <4 x i32> %y) {
; CHECK-NEON-NEXT: orr v0.16b, v0.16b, v1.16b
; CHECK-NEON-NEXT: ret
;
-
; CHECK-AES-LABEL: clmul_v4i32_neon:
; CHECK-AES: // %bb.0:
; CHECK-AES-NEXT: ushll2 v2.2d, v1.4s, #0
@@ -189,6 +188,7 @@ define <4 x i32> @clmul_v4i32_neon(<4 x i32> %x, <4 x i32> %y) {
; CHECK-AES-NEXT: mov v0.d[1], v3.d[0]
; CHECK-AES-NEXT: uzp1 v0.4s, v0.4s, v2.4s
; CHECK-AES-NEXT: ret
+
%a = call <4 x i32> @llvm.clmul.v4i32(<4 x i32> %x, <4 x i32> %y)
ret <4 x i32> %a
}
@@ -328,101 +328,101 @@ define <2 x i64> @clmul_v2i64_neon(<2 x i64> %x, <2 x i64> %y) {
; CHECK-NEON-NEXT: and v1.16b, v1.16b, v5.16b
; CHECK-NEON-NEXT: and v0.16b, v0.16b, v4.16b
; CHECK-NEON-NEXT: fmov x10, d6
-; CHECK-NEON-NEXT: fmov x20, d7
-; CHECK-NEON-NEXT: fmov x0, d16
-; CHECK-NEON-NEXT: fmov x18, d17
-; CHECK-NEON-NEXT: fmov x5, d18
-; CHECK-NEON-NEXT: fmov x7, d19
-; CHECK-NEON-NEXT: fmov x26, d0
-; CHECK-NEON-NEXT: mov x9, v6.d[1]
-; CHECK-NEON-NEXT: mov x15, v7.d[1]
-; CHECK-NEON-NEXT: mul x11, x20, x10
-; CHECK-NEON-NEXT: mov x17, v16.d[1]
+; CHECK-NEON-NEXT: fmov x5, d7
+; CHECK-NEON-NEXT: fmov x18, d16
+; CHECK-NEON-NEXT: fmov x16, d17
+; CHECK-NEON-NEXT: fmov x19, d18
+; CHECK-NEON-NEXT: fmov x20, d19
+; CHECK-NEON-NEXT: mov x15, v6.d[1]
+; CHECK-NEON-NEXT: mov x13, v17.d[1]
; CHECK-NEON-NEXT: mov x14, v18.d[1]
-; CHECK-NEON-NEXT: mov x4, v19.d[1]
-; CHECK-NEON-NEXT: mov x21, v1.d[1]
-; CHECK-NEON-NEXT: mov x13, v0.d[1]
-; CHECK-NEON-NEXT: mul x8, x18, x0
-; CHECK-NEON-NEXT: mul x24, x20, x5
-; CHECK-NEON-NEXT: mul x12, x20, x0
-; CHECK-NEON-NEXT: stp x8, x11, [sp] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: fmov x8, d1
-; CHECK-NEON-NEXT: mov x11, v17.d[1]
-; CHECK-NEON-NEXT: mul x16, x7, x5
+; CHECK-NEON-NEXT: mul x9, x5, x10
+; CHECK-NEON-NEXT: mov x25, v19.d[1]
+; CHECK-NEON-NEXT: fmov x30, d1
+; CHECK-NEON-NEXT: fmov x23, d0
+; CHECK-NEON-NEXT: mov x12, v7.d[1]
+; CHECK-NEON-NEXT: mov x3, v16.d[1]
+; CHECK-NEON-NEXT: mul x8, x16, x18
+; CHECK-NEON-NEXT: mov x6, v1.d[1]
+; CHECK-NEON-NEXT: mov x11, v0.d[1]
+; CHECK-NEON-NEXT: mul x17, x20, x19
+; CHECK-NEON-NEXT: mul x22, x16, x10
+; CHECK-NEON-NEXT: stp x8, x9, [sp] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x8, x25, x14
; CHECK-NEON-NEXT: ldp d1, d0, [sp] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: fmov d16, x24
-; CHECK-NEON-NEXT: mul x19, x26, x8
-; CHECK-NEON-NEXT: fmov d20, x12
-; CHECK-NEON-NEXT: mul x29, x7, x8
-; CHECK-NEON-NEXT: fmov d6, x16
-; CHECK-NEON-NEXT: mul x20, x20, x8
-; CHECK-NEON-NEXT: fmov d7, x19
-; CHECK-NEON-NEXT: mul x8, x18, x8
-; CHECK-NEON-NEXT: fmov d18, x29
-; CHECK-NEON-NEXT: mul x25, x18, x10
-; CHECK-NEON-NEXT: fmov d24, x20
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x30, x26, x0
-; CHECK-NEON-NEXT: fmov d21, x8
-; CHECK-NEON-NEXT: mul x0, x7, x0
-; CHECK-NEON-NEXT: fmov d17, x25
-; CHECK-NEON-NEXT: mul x7, x7, x10
-; CHECK-NEON-NEXT: fmov d19, x30
+; CHECK-NEON-NEXT: fmov d6, x17
+; CHECK-NEON-NEXT: mul x9, x13, x15
+; CHECK-NEON-NEXT: fmov d17, x22
+; CHECK-NEON-NEXT: mul x4, x23, x30
+; CHECK-NEON-NEXT: mov v6.d[1], x8
+; CHECK-NEON-NEXT: mul x21, x5, x19
+; CHECK-NEON-NEXT: mov v17.d[1], x9
+; CHECK-NEON-NEXT: mul x27, x20, x30
+; CHECK-NEON-NEXT: fmov d7, x4
+; CHECK-NEON-NEXT: mul x28, x23, x18
+; CHECK-NEON-NEXT: fmov d16, x21
+; CHECK-NEON-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x29, x5, x18
+; CHECK-NEON-NEXT: fmov d18, x27
+; CHECK-NEON-NEXT: mul x5, x5, x30
+; CHECK-NEON-NEXT: fmov d19, x28
+; CHECK-NEON-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x30, x16, x30
+; CHECK-NEON-NEXT: fmov d20, x29
+; CHECK-NEON-NEXT: mul x18, x20, x18
+; CHECK-NEON-NEXT: fmov d24, x5
+; CHECK-NEON-NEXT: mul x20, x20, x10
+; CHECK-NEON-NEXT: fmov d21, x30
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x18, x18, x5
-; CHECK-NEON-NEXT: fmov d26, x0
-; CHECK-NEON-NEXT: mul x5, x26, x5
-; CHECK-NEON-NEXT: fmov d22, x7
-; CHECK-NEON-NEXT: mul x10, x26, x10
-; CHECK-NEON-NEXT: fmov d25, x18
-; CHECK-NEON-NEXT: mul x3, x15, x9
-; CHECK-NEON-NEXT: fmov d23, x5
-; CHECK-NEON-NEXT: mul x6, x11, x17
+; CHECK-NEON-NEXT: mul x16, x16, x19
+; CHECK-NEON-NEXT: fmov d26, x18
+; CHECK-NEON-NEXT: mul x19, x23, x19
+; CHECK-NEON-NEXT: fmov d22, x20
+; CHECK-NEON-NEXT: mul x10, x23, x10
+; CHECK-NEON-NEXT: fmov d25, x16
+; CHECK-NEON-NEXT: mul x1, x12, x15
+; CHECK-NEON-NEXT: fmov d23, x19
+; CHECK-NEON-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x2, x13, x3
; CHECK-NEON-NEXT: fmov d27, x10
-; CHECK-NEON-NEXT: mul x1, x4, x14
-; CHECK-NEON-NEXT: mov v0.d[1], x3
-; CHECK-NEON-NEXT: mul x2, x13, x21
-; CHECK-NEON-NEXT: mov v1.d[1], x6
-; CHECK-NEON-NEXT: mul x22, x15, x14
-; CHECK-NEON-NEXT: mov v6.d[1], x1
-; CHECK-NEON-NEXT: mul x23, x11, x9
-; CHECK-NEON-NEXT: mov v7.d[1], x2
+; CHECK-NEON-NEXT: mul x0, x11, x6
+; CHECK-NEON-NEXT: mov v0.d[1], x1
+; CHECK-NEON-NEXT: mul x7, x12, x14
+; CHECK-NEON-NEXT: mov v1.d[1], x2
+; CHECK-NEON-NEXT: mul x24, x25, x6
+; CHECK-NEON-NEXT: mov v7.d[1], x0
+; CHECK-NEON-NEXT: mul x26, x11, x3
+; CHECK-NEON-NEXT: mov v16.d[1], x7
; CHECK-NEON-NEXT: eor v0.16b, v1.16b, v0.16b
-; CHECK-NEON-NEXT: mul x27, x4, x21
-; CHECK-NEON-NEXT: mov v16.d[1], x22
-; CHECK-NEON-NEXT: mul x28, x13, x17
-; CHECK-NEON-NEXT: mov v17.d[1], x23
+; CHECK-NEON-NEXT: mul x23, x12, x3
+; CHECK-NEON-NEXT: mov v18.d[1], x24
; CHECK-NEON-NEXT: eor v1.16b, v6.16b, v7.16b
-; CHECK-NEON-NEXT: mul x26, x15, x17
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v18.d[1], x27
-; CHECK-NEON-NEXT: mul x15, x15, x21
-; CHECK-NEON-NEXT: eor v0.16b, v0.16b, v1.16b
-; CHECK-NEON-NEXT: mov v19.d[1], x28
+; CHECK-NEON-NEXT: mul x12, x12, x6
+; CHECK-NEON-NEXT: mov v19.d[1], x26
; CHECK-NEON-NEXT: eor v6.16b, v17.16b, v16.16b
-; CHECK-NEON-NEXT: mul x21, x11, x21
-; CHECK-NEON-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v20.d[1], x26
-; CHECK-NEON-NEXT: and v0.16b, v0.16b, v3.16b
-; CHECK-NEON-NEXT: mul x17, x4, x17
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v24.d[1], x15
+; CHECK-NEON-NEXT: mul x6, x13, x6
+; CHECK-NEON-NEXT: eor v0.16b, v0.16b, v1.16b
+; CHECK-NEON-NEXT: mov v20.d[1], x23
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x3, x25, x3
+; CHECK-NEON-NEXT: mov v24.d[1], x12
; CHECK-NEON-NEXT: eor v7.16b, v18.16b, v19.16b
-; CHECK-NEON-NEXT: mul x4, x4, x9
-; CHECK-NEON-NEXT: mov v21.d[1], x21
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x11, x11, x14
+; CHECK-NEON-NEXT: and v0.16b, v0.16b, v3.16b
+; CHECK-NEON-NEXT: mul x25, x25, x15
+; CHECK-NEON-NEXT: mov v21.d[1], x6
+; CHECK-NEON-NEXT: mul x13, x13, x14
; CHECK-NEON-NEXT: eor v1.16b, v6.16b, v7.16b
-; CHECK-NEON-NEXT: mov v26.d[1], x17
-; CHECK-NEON-NEXT: mul x14, x13, x14
-; CHECK-NEON-NEXT: mov v22.d[1], x4
+; CHECK-NEON-NEXT: mov v26.d[1], x3
+; CHECK-NEON-NEXT: mul x8, x11, x14
+; CHECK-NEON-NEXT: mov v22.d[1], x25
; CHECK-NEON-NEXT: eor v16.16b, v21.16b, v20.16b
; CHECK-NEON-NEXT: and v1.16b, v1.16b, v2.16b
-; CHECK-NEON-NEXT: mul x8, x13, x9
-; CHECK-NEON-NEXT: mov v25.d[1], x11
+; CHECK-NEON-NEXT: mul x9, x11, x15
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mov v25.d[1], x13
; CHECK-NEON-NEXT: orr v0.16b, v1.16b, v0.16b
-; CHECK-NEON-NEXT: mov v23.d[1], x14
-; CHECK-NEON-NEXT: mov v27.d[1], x8
+; CHECK-NEON-NEXT: mov v23.d[1], x8
+; CHECK-NEON-NEXT: mov v27.d[1], x9
; CHECK-NEON-NEXT: eor v18.16b, v25.16b, v24.16b
; CHECK-NEON-NEXT: eor v17.16b, v22.16b, v23.16b
; CHECK-NEON-NEXT: eor v19.16b, v26.16b, v27.16b
@@ -553,60 +553,54 @@ define <1 x i128> @clmul_v1i128_neon(<1 x i128> %x, <1 x i128> %y) {
; CHECK-NEON-NEXT: .cfi_offset w28, -80
; CHECK-NEON-NEXT: .cfi_offset w30, -88
; CHECK-NEON-NEXT: .cfi_offset w29, -96
+; CHECK-NEON-NEXT: mov x9, x3
+; CHECK-NEON-NEXT: and x3, x2, #0x1111111111111111
+; CHECK-NEON-NEXT: and x20, x1, #0x2222222222222222
; CHECK-NEON-NEXT: and x10, x2, #0x2222222222222222
; CHECK-NEON-NEXT: and x12, x1, #0x1111111111111111
-; CHECK-NEON-NEXT: and x11, x2, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x8, x12, x10
-; CHECK-NEON-NEXT: and x5, x1, #0x4444444444444444
-; CHECK-NEON-NEXT: and x21, x1, #0x2222222222222222
-; CHECK-NEON-NEXT: and x6, x2, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x11, x20, x3
; CHECK-NEON-NEXT: rbit x13, x0
-; CHECK-NEON-NEXT: and x29, x0, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x14, x21, x10
+; CHECK-NEON-NEXT: and x30, x0, #0x2222222222222222
+; CHECK-NEON-NEXT: and x19, x9, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x8, x12, x10
; CHECK-NEON-NEXT: and x15, x13, #0x2222222222222222
; CHECK-NEON-NEXT: and x17, x13, #0x1111111111111111
; CHECK-NEON-NEXT: and x4, x13, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x14, x20, x10
; CHECK-NEON-NEXT: and x13, x13, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x26, x12, x11
-; CHECK-NEON-NEXT: str x8, [sp, #248] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x5, x11
+; CHECK-NEON-NEXT: mul x24, x30, x19
+; CHECK-NEON-NEXT: stp x8, x11, [sp, #240] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: and x11, x2, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x8, x20, x11
; CHECK-NEON-NEXT: str x14, [sp, #88] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x9, x21, x6
-; CHECK-NEON-NEXT: mul x20, x5, x6
-; CHECK-NEON-NEXT: str x8, [sp, #240] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x21, x11
-; CHECK-NEON-NEXT: mul x22, x5, x10
+; CHECK-NEON-NEXT: mul x27, x12, x11
; CHECK-NEON-NEXT: str x8, [sp, #232] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x12, x6
+; CHECK-NEON-NEXT: mul x8, x12, x3
; CHECK-NEON-NEXT: str x8, [sp, #224] // 8-byte Spill
; CHECK-NEON-NEXT: rbit x8, x2
; CHECK-NEON-NEXT: and x14, x8, #0x1111111111111111
+; CHECK-NEON-NEXT: and x18, x8, #0x8888888888888888
; CHECK-NEON-NEXT: mul x16, x15, x14
+; CHECK-NEON-NEXT: mul x5, x4, x18
; CHECK-NEON-NEXT: str x16, [sp, #216] // 8-byte Spill
; CHECK-NEON-NEXT: and x16, x8, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x18, x17, x16
-; CHECK-NEON-NEXT: str x18, [sp, #208] // 8-byte Spill
-; CHECK-NEON-NEXT: and x18, x8, #0x8888888888888888
; CHECK-NEON-NEXT: and x8, x8, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x7, x4, x18
-; CHECK-NEON-NEXT: str x7, [sp, #200] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x13, x8
-; CHECK-NEON-NEXT: str x7, [sp, #192] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x15, x18
-; CHECK-NEON-NEXT: str x7, [sp, #184] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x17, x14
-; CHECK-NEON-NEXT: str x7, [sp, #176] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x4, x8
-; CHECK-NEON-NEXT: str x7, [sp, #168] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x13, x16
-; CHECK-NEON-NEXT: str x7, [sp, #160] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x15, x16
+; CHECK-NEON-NEXT: mul x6, x17, x16
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #200] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x6, x13, x8
+; CHECK-NEON-NEXT: mul x5, x15, x18
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #184] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x6, x17, x14
+; CHECK-NEON-NEXT: mul x5, x4, x8
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #168] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x5, x15, x16
; CHECK-NEON-NEXT: mul x15, x15, x8
; CHECK-NEON-NEXT: mul x8, x17, x8
-; CHECK-NEON-NEXT: stp x15, x7, [sp, #144] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x6, x13, x16
; CHECK-NEON-NEXT: str x8, [sp, #128] // 8-byte Spill
; CHECK-NEON-NEXT: mul x8, x4, x16
-; CHECK-NEON-NEXT: str x8, [sp, #136] // 8-byte Spill
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #152] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x8, x15, [sp, #136] // 16-byte Folded Spill
; CHECK-NEON-NEXT: mul x8, x4, x14
; CHECK-NEON-NEXT: str x8, [sp, #104] // 8-byte Spill
; CHECK-NEON-NEXT: mul x8, x17, x18
@@ -617,144 +611,145 @@ define <1 x i128> @clmul_v1i128_neon(<1 x i128> %x, <1 x i128> %y) {
; CHECK-NEON-NEXT: str x8, [sp, #112] // 8-byte Spill
; CHECK-NEON-NEXT: and x8, x2, #0x4444444444444444
; CHECK-NEON-NEXT: and x2, x0, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x24, x12, x8
+; CHECK-NEON-NEXT: mul x25, x12, x8
+; CHECK-NEON-NEXT: and x12, x1, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x18, x12, x11
+; CHECK-NEON-NEXT: mul x6, x12, x8
+; CHECK-NEON-NEXT: mul x22, x12, x3
+; CHECK-NEON-NEXT: mul x23, x12, x10
; CHECK-NEON-NEXT: and x12, x1, #0x8888888888888888
; CHECK-NEON-NEXT: and x1, x0, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x27, x21, x8
-; CHECK-NEON-NEXT: and x21, x0, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x29, x20, x8
+; CHECK-NEON-NEXT: and x20, x0, #0x4444444444444444
; CHECK-NEON-NEXT: mul x14, x12, x8
; CHECK-NEON-NEXT: mul x15, x12, x10
-; CHECK-NEON-NEXT: mul x18, x12, x11
-; CHECK-NEON-NEXT: mul x4, x12, x6
-; CHECK-NEON-NEXT: and x12, x3, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x30, x1, x12
-; CHECK-NEON-NEXT: eor x18, x20, x18
-; CHECK-NEON-NEXT: eor x20, x26, x27
-; CHECK-NEON-NEXT: mul x28, x21, x12
+; CHECK-NEON-NEXT: mul x4, x12, x11
+; CHECK-NEON-NEXT: eor x18, x18, x14
+; CHECK-NEON-NEXT: mul x5, x12, x3
+; CHECK-NEON-NEXT: and x12, x9, #0x4444444444444444
+; CHECK-NEON-NEXT: eor x15, x6, x15
+; CHECK-NEON-NEXT: mul x28, x1, x12
; CHECK-NEON-NEXT: eor x4, x22, x4
+; CHECK-NEON-NEXT: eor x22, x27, x29
+; CHECK-NEON-NEXT: mul x26, x20, x12
+; CHECK-NEON-NEXT: eor x5, x23, x5
; CHECK-NEON-NEXT: mul x13, x2, x12
-; CHECK-NEON-NEXT: mul x12, x29, x12
-; CHECK-NEON-NEXT: mul x19, x5, x8
-; CHECK-NEON-NEXT: and x5, x3, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x16, x2, x5
+; CHECK-NEON-NEXT: mul x12, x30, x12
+; CHECK-NEON-NEXT: mul x16, x2, x19
+; CHECK-NEON-NEXT: mul x17, x1, x19
; CHECK-NEON-NEXT: stp x13, x12, [sp, #48] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: and x12, x3, #0x8888888888888888
-; CHECK-NEON-NEXT: and x3, x3, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x0, x21, x12
-; CHECK-NEON-NEXT: eor x15, x19, x15
-; CHECK-NEON-NEXT: mul x7, x29, x12
+; CHECK-NEON-NEXT: and x12, x9, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x0, x20, x12
+; CHECK-NEON-NEXT: mul x7, x30, x12
+; CHECK-NEON-NEXT: eor x17, x26, x17
; CHECK-NEON-NEXT: mul x13, x1, x12
; CHECK-NEON-NEXT: mul x12, x2, x12
-; CHECK-NEON-NEXT: mul x17, x1, x5
-; CHECK-NEON-NEXT: mul x25, x29, x5
+; CHECK-NEON-NEXT: mul x14, x1, x8
; CHECK-NEON-NEXT: str x12, [sp, #40] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x12, x21, x5
-; CHECK-NEON-NEXT: eor x17, x28, x17
-; CHECK-NEON-NEXT: ldp x28, x27, [sp, #272] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x5, x21, x3
-; CHECK-NEON-NEXT: mul x23, x1, x3
+; CHECK-NEON-NEXT: mul x12, x20, x19
+; CHECK-NEON-NEXT: and x19, x9, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x9, x30, x3
+; CHECK-NEON-NEXT: mul x21, x20, x19
; CHECK-NEON-NEXT: stp x12, x13, [sp, #16] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x12, x29, x3
-; CHECK-NEON-NEXT: mul x13, x2, x3
-; CHECK-NEON-NEXT: mul x3, x29, x6
+; CHECK-NEON-NEXT: mul x12, x30, x19
+; CHECK-NEON-NEXT: str x9, [sp, #80] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x9, x30, x11
+; CHECK-NEON-NEXT: mul x13, x2, x19
; CHECK-NEON-NEXT: eor x12, x16, x12
-; CHECK-NEON-NEXT: eor x16, x0, x30
+; CHECK-NEON-NEXT: eor x16, x0, x28
+; CHECK-NEON-NEXT: mul x19, x1, x19
; CHECK-NEON-NEXT: eor x12, x12, x16
-; CHECK-NEON-NEXT: mul x0, x1, x10
-; CHECK-NEON-NEXT: eor x13, x13, x7
+; CHECK-NEON-NEXT: str x9, [sp, #72] // 8-byte Spill
; CHECK-NEON-NEXT: and x12, x12, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x9, x30, x10
+; CHECK-NEON-NEXT: ldp x28, x27, [sp, #272] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x13, x13, x7
; CHECK-NEON-NEXT: eor x13, x13, x17
-; CHECK-NEON-NEXT: str x3, [sp, #80] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x3, x29, x11
+; CHECK-NEON-NEXT: mul x0, x1, x10
; CHECK-NEON-NEXT: and x13, x13, #0x1111111111111111
; CHECK-NEON-NEXT: orr x12, x13, x12
; CHECK-NEON-NEXT: ldp x17, x13, [sp, #40] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x13, x13, x25
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #288] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: str x3, [sp, #72] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x3, x29, x10
-; CHECK-NEON-NEXT: str x3, [sp, #64] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x3, x29, x8
-; CHECK-NEON-NEXT: str x3, [sp, #32] // 8-byte Spill
-; CHECK-NEON-NEXT: ldr x3, [sp, #248] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x3, x3, x9
-; CHECK-NEON-NEXT: ldr x9, [sp, #240] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x9, x9, x14
-; CHECK-NEON-NEXT: mul x14, x1, x8
-; CHECK-NEON-NEXT: eor x9, x3, x9
-; CHECK-NEON-NEXT: ldp x29, x3, [sp, #224] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: str x9, [sp, #64] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x9, x30, x8
+; CHECK-NEON-NEXT: eor x13, x13, x24
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #304] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: str x9, [sp, #32] // 8-byte Spill
+; CHECK-NEON-NEXT: ldp x30, x9, [sp, #240] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x9, x30, x9
+; CHECK-NEON-NEXT: eor x9, x9, x18
+; CHECK-NEON-NEXT: ldp x30, x18, [sp, #224] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x9, x9, #0x2222222222222222
-; CHECK-NEON-NEXT: eor x3, x29, x3
+; CHECK-NEON-NEXT: eor x18, x30, x18
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #256] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x3, x3, x15
+; CHECK-NEON-NEXT: eor x18, x18, x15
; CHECK-NEON-NEXT: ldr x15, [sp, #88] // 8-byte Reload
-; CHECK-NEON-NEXT: and x3, x3, #0x1111111111111111
-; CHECK-NEON-NEXT: eor x19, x24, x15
-; CHECK-NEON-NEXT: orr x9, x3, x9
-; CHECK-NEON-NEXT: eor x3, x20, x4
-; CHECK-NEON-NEXT: eor x18, x19, x18
-; CHECK-NEON-NEXT: and x3, x3, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x15, x21, x8
+; CHECK-NEON-NEXT: and x18, x18, #0x1111111111111111
+; CHECK-NEON-NEXT: eor x6, x25, x15
+; CHECK-NEON-NEXT: orr x9, x18, x9
+; CHECK-NEON-NEXT: mul x15, x20, x8
+; CHECK-NEON-NEXT: eor x18, x6, x4
+; CHECK-NEON-NEXT: eor x4, x22, x5
; CHECK-NEON-NEXT: and x18, x18, #0x4444444444444444
-; CHECK-NEON-NEXT: orr x18, x18, x3
-; CHECK-NEON-NEXT: mul x4, x2, x10
+; CHECK-NEON-NEXT: and x4, x4, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x5, x2, x10
+; CHECK-NEON-NEXT: orr x18, x18, x4
+; CHECK-NEON-NEXT: ldp x6, x4, [sp, #208] // 16-byte Folded Reload
; CHECK-NEON-NEXT: orr x9, x9, x18
; CHECK-NEON-NEXT: ldp x18, x16, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x10, x21, x10
-; CHECK-NEON-NEXT: eor x16, x5, x16
-; CHECK-NEON-NEXT: ldp x5, x3, [sp, #208] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x10, x20, x10
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #288] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x4, x6, x4
+; CHECK-NEON-NEXT: ldp x7, x6, [sp, #192] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x18, x18, x19
+; CHECK-NEON-NEXT: eor x16, x21, x16
+; CHECK-NEON-NEXT: mul x8, x2, x8
; CHECK-NEON-NEXT: eor x13, x13, x16
; CHECK-NEON-NEXT: ldr x16, [sp, #56] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x18, x18, x23
-; CHECK-NEON-NEXT: and x13, x13, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x8, x2, x8
-; CHECK-NEON-NEXT: eor x3, x5, x3
-; CHECK-NEON-NEXT: ldp x7, x5, [sp, #192] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x6, x6, x7
+; CHECK-NEON-NEXT: ldp x19, x7, [sp, #176] // 16-byte Folded Reload
; CHECK-NEON-NEXT: eor x16, x17, x16
-; CHECK-NEON-NEXT: mul x17, x21, x11
+; CHECK-NEON-NEXT: mul x17, x20, x11
+; CHECK-NEON-NEXT: and x13, x13, #0x4444444444444444
; CHECK-NEON-NEXT: eor x16, x16, x18
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #304] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x5, x5, x7
-; CHECK-NEON-NEXT: ldp x19, x7, [sp, #176] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x18, x3, x5
-; CHECK-NEON-NEXT: ldr x5, [sp, #152] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x18, x4, x6
+; CHECK-NEON-NEXT: ldr x6, [sp, #152] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x7, x19, x7
+; CHECK-NEON-NEXT: ldp x21, x19, [sp, #160] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x16, x16, #0x8888888888888888
; CHECK-NEON-NEXT: and x18, x18, #0x2222222222222222
; CHECK-NEON-NEXT: orr x13, x13, x16
-; CHECK-NEON-NEXT: eor x7, x19, x7
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #160] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x19, x19, x21
; CHECK-NEON-NEXT: orr x12, x12, x13
; CHECK-NEON-NEXT: eor x14, x17, x14
-; CHECK-NEON-NEXT: eor x9, x12, x9
-; CHECK-NEON-NEXT: eor x19, x19, x20
-; CHECK-NEON-NEXT: mul x20, x2, x6
-; CHECK-NEON-NEXT: eor x3, x7, x19
+; CHECK-NEON-NEXT: eor x4, x7, x19
; CHECK-NEON-NEXT: ldr x7, [sp, #128] // 8-byte Reload
-; CHECK-NEON-NEXT: and x3, x3, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x2, x2, x11
-; CHECK-NEON-NEXT: eor x5, x7, x5
+; CHECK-NEON-NEXT: eor x9, x12, x9
+; CHECK-NEON-NEXT: and x4, x4, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x21, x2, x3
+; CHECK-NEON-NEXT: eor x6, x7, x6
; CHECK-NEON-NEXT: ldp x19, x7, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: orr x16, x3, x18
-; CHECK-NEON-NEXT: mul x11, x1, x11
+; CHECK-NEON-NEXT: orr x16, x4, x18
+; CHECK-NEON-NEXT: mul x2, x2, x11
; CHECK-NEON-NEXT: eor x7, x7, x19
-; CHECK-NEON-NEXT: mul x19, x21, x6
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #112] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x5, x5, x7
+; CHECK-NEON-NEXT: mul x19, x20, x3
+; CHECK-NEON-NEXT: ldp x22, x20, [sp, #112] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x6, x6, x7
; CHECK-NEON-NEXT: ldr x7, [sp, #144] // 8-byte Reload
-; CHECK-NEON-NEXT: and x5, x5, #0x4444444444444444
-; CHECK-NEON-NEXT: eor x7, x21, x7
-; CHECK-NEON-NEXT: ldr x21, [sp, #136] // 8-byte Reload
+; CHECK-NEON-NEXT: and x6, x6, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x11, x1, x11
+; CHECK-NEON-NEXT: eor x7, x20, x7
+; CHECK-NEON-NEXT: ldr x20, [sp, #136] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x20, x20, x22
+; CHECK-NEON-NEXT: eor x7, x7, x20
; CHECK-NEON-NEXT: eor x11, x19, x11
-; CHECK-NEON-NEXT: eor x21, x21, x22
-; CHECK-NEON-NEXT: eor x7, x7, x21
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #320] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x7, x7, #0x8888888888888888
-; CHECK-NEON-NEXT: orr x18, x5, x7
+; CHECK-NEON-NEXT: ldp x20, x19, [sp, #336] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: orr x18, x6, x7
; CHECK-NEON-NEXT: orr x13, x16, x18
; CHECK-NEON-NEXT: ldr x18, [sp, #80] // 8-byte Reload
-; CHECK-NEON-NEXT: mul x16, x1, x6
+; CHECK-NEON-NEXT: mul x16, x1, x3
; CHECK-NEON-NEXT: rbit x13, x13
-; CHECK-NEON-NEXT: eor x18, x4, x18
+; CHECK-NEON-NEXT: eor x18, x5, x18
; CHECK-NEON-NEXT: eor x12, x18, x14
; CHECK-NEON-NEXT: eor x1, x9, x13, lsr #1
; CHECK-NEON-NEXT: eor x13, x15, x0
@@ -763,14 +758,14 @@ define <1 x i128> @clmul_v1i128_neon(<1 x i128> %x, <1 x i128> %y) {
; CHECK-NEON-NEXT: eor x10, x10, x16
; CHECK-NEON-NEXT: eor x8, x8, x14
; CHECK-NEON-NEXT: ldr x14, [sp, #32] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x12, x20, x12
+; CHECK-NEON-NEXT: eor x12, x21, x12
; CHECK-NEON-NEXT: eor x12, x12, x13
; CHECK-NEON-NEXT: eor x8, x8, x11
; CHECK-NEON-NEXT: eor x14, x2, x14
; CHECK-NEON-NEXT: and x11, x12, #0x1111111111111111
; CHECK-NEON-NEXT: and x8, x8, #0x4444444444444444
; CHECK-NEON-NEXT: eor x10, x14, x10
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #336] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: ldp x22, x21, [sp, #320] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x10, x10, #0x8888888888888888
; CHECK-NEON-NEXT: orr x9, x11, x9
; CHECK-NEON-NEXT: orr x8, x8, x10
@@ -1386,110 +1381,109 @@ define <1 x i128> @clmul_v1i128_neon_zext(<1 x i64> %x, <1 x i64> %y) {
; CHECK-NEON-NEXT: .cfi_offset w29, -96
; CHECK-NEON-NEXT: // kill: def $d1 killed $d1 def $q1
; CHECK-NEON-NEXT: // kill: def $d0 killed $d0 def $q0
-; CHECK-NEON-NEXT: fmov x4, d0
-; CHECK-NEON-NEXT: fmov x5, d1
-; CHECK-NEON-NEXT: and x12, x5, #0x1111111111111111
-; CHECK-NEON-NEXT: and x13, x4, #0x2222222222222222
-; CHECK-NEON-NEXT: and x14, x5, #0x2222222222222222
-; CHECK-NEON-NEXT: and x11, x4, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x8, x13, x12
-; CHECK-NEON-NEXT: and x10, x5, #0x8888888888888888
-; CHECK-NEON-NEXT: and x16, x4, #0x4444444444444444
-; CHECK-NEON-NEXT: and x0, x5, #0x4444444444444444
-; CHECK-NEON-NEXT: rbit x5, x5
-; CHECK-NEON-NEXT: mul x9, x11, x14
-; CHECK-NEON-NEXT: and x7, x5, #0x1111111111111111
-; CHECK-NEON-NEXT: and x21, x5, #0x2222222222222222
-; CHECK-NEON-NEXT: and x24, x5, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x2, x11, x12
-; CHECK-NEON-NEXT: and x5, x5, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x3, x16, x0
-; CHECK-NEON-NEXT: stp x8, x9, [sp, #32] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: and x9, x4, #0x8888888888888888
-; CHECK-NEON-NEXT: rbit x4, x4
-; CHECK-NEON-NEXT: mul x8, x16, x10
-; CHECK-NEON-NEXT: and x19, x4, #0x2222222222222222
-; CHECK-NEON-NEXT: and x22, x4, #0x1111111111111111
-; CHECK-NEON-NEXT: and x25, x4, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x6, x9, x14
-; CHECK-NEON-NEXT: and x4, x4, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x20, x19, x7
-; CHECK-NEON-NEXT: str x8, [sp, #24] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x9, x0
-; CHECK-NEON-NEXT: mul x23, x22, x21
-; CHECK-NEON-NEXT: mul x26, x25, x24
-; CHECK-NEON-NEXT: str x8, [sp, #16] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x13, x10
-; CHECK-NEON-NEXT: mul x27, x4, x5
-; CHECK-NEON-NEXT: mul x28, x19, x24
+; CHECK-NEON-NEXT: fmov x2, d0
+; CHECK-NEON-NEXT: fmov x3, d1
+; CHECK-NEON-NEXT: and x17, x3, #0x1111111111111111
+; CHECK-NEON-NEXT: and x15, x2, #0x2222222222222222
+; CHECK-NEON-NEXT: and x13, x3, #0x2222222222222222
+; CHECK-NEON-NEXT: and x11, x2, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x9, x15, x17
+; CHECK-NEON-NEXT: and x12, x3, #0x8888888888888888
+; CHECK-NEON-NEXT: and x16, x2, #0x4444444444444444
+; CHECK-NEON-NEXT: and x1, x3, #0x4444444444444444
+; CHECK-NEON-NEXT: and x14, x2, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x8, x11, x13
+; CHECK-NEON-NEXT: rbit x3, x3
+; CHECK-NEON-NEXT: rbit x2, x2
+; CHECK-NEON-NEXT: and x5, x3, #0x1111111111111111
+; CHECK-NEON-NEXT: and x6, x2, #0x2222222222222222
+; CHECK-NEON-NEXT: and x19, x3, #0x2222222222222222
+; CHECK-NEON-NEXT: and x20, x2, #0x1111111111111111
+; CHECK-NEON-NEXT: and x22, x3, #0x8888888888888888
+; CHECK-NEON-NEXT: and x23, x2, #0x4444444444444444
+; CHECK-NEON-NEXT: and x3, x3, #0x4444444444444444
+; CHECK-NEON-NEXT: and x2, x2, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x4, x16, x1
+; CHECK-NEON-NEXT: stp x9, x8, [sp, #32] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x9, x16, x12
+; CHECK-NEON-NEXT: ldp x18, x10, [sp, #32] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x8, x14, x1
+; CHECK-NEON-NEXT: eor x10, x10, x18
+; CHECK-NEON-NEXT: mul x7, x6, x5
+; CHECK-NEON-NEXT: mul x21, x20, x19
+; CHECK-NEON-NEXT: stp x8, x9, [sp, #16] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x8, x15, x12
+; CHECK-NEON-NEXT: ldp x0, x18, [sp, #16] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x24, x23, x22
+; CHECK-NEON-NEXT: eor x18, x18, x0
+; CHECK-NEON-NEXT: mul x25, x2, x3
+; CHECK-NEON-NEXT: eor x10, x10, x18
; CHECK-NEON-NEXT: str x8, [sp, #8] // 8-byte Spill
-; CHECK-NEON-NEXT: ldp x18, x8, [sp, #32] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x29, x22, x7
-; CHECK-NEON-NEXT: eor x8, x8, x18
-; CHECK-NEON-NEXT: ldp x1, x18, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x30, x25, x5
-; CHECK-NEON-NEXT: mul x17, x4, x21
-; CHECK-NEON-NEXT: eor x18, x18, x1
-; CHECK-NEON-NEXT: ldr x1, [sp, #8] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x8, x8, x18
-; CHECK-NEON-NEXT: mul x15, x19, x21
-; CHECK-NEON-NEXT: eor x1, x2, x1
-; CHECK-NEON-NEXT: eor x2, x3, x6
-; CHECK-NEON-NEXT: eor x3, x23, x20
-; CHECK-NEON-NEXT: eor x6, x26, x27
-; CHECK-NEON-NEXT: eor x18, x1, x2
-; CHECK-NEON-NEXT: mul x19, x19, x5
-; CHECK-NEON-NEXT: eor x2, x29, x28
-; CHECK-NEON-NEXT: eor x1, x3, x6
-; CHECK-NEON-NEXT: eor x17, x30, x17
-; CHECK-NEON-NEXT: and x1, x1, #0x2222222222222222
-; CHECK-NEON-NEXT: and x8, x8, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x5, x22, x5
-; CHECK-NEON-NEXT: eor x17, x2, x17
-; CHECK-NEON-NEXT: and x17, x17, #0x1111111111111111
+; CHECK-NEON-NEXT: and x10, x10, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x8, x11, x17
+; CHECK-NEON-NEXT: ldr x0, [sp, #8] // 8-byte Reload
+; CHECK-NEON-NEXT: mul x9, x14, x13
+; CHECK-NEON-NEXT: mul x26, x6, x22
+; CHECK-NEON-NEXT: eor x8, x8, x0
+; CHECK-NEON-NEXT: eor x0, x21, x7
+; CHECK-NEON-NEXT: mul x27, x20, x5
+; CHECK-NEON-NEXT: eor x9, x4, x9
+; CHECK-NEON-NEXT: eor x4, x24, x25
+; CHECK-NEON-NEXT: mul x28, x23, x3
+; CHECK-NEON-NEXT: eor x8, x8, x9
+; CHECK-NEON-NEXT: eor x9, x0, x4
+; CHECK-NEON-NEXT: and x9, x9, #0x2222222222222222
+; CHECK-NEON-NEXT: and x8, x8, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x29, x2, x19
+; CHECK-NEON-NEXT: orr x8, x8, x10
+; CHECK-NEON-NEXT: eor x18, x27, x26
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #80] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x30, x6, x19
+; CHECK-NEON-NEXT: mul x6, x6, x3
+; CHECK-NEON-NEXT: eor x0, x28, x29
; CHECK-NEON-NEXT: ldp x28, x27, [sp, #64] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x21, x25, x21
-; CHECK-NEON-NEXT: orr x17, x17, x1
+; CHECK-NEON-NEXT: mul x3, x20, x3
+; CHECK-NEON-NEXT: eor x18, x18, x0
+; CHECK-NEON-NEXT: and x18, x18, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x19, x23, x19
+; CHECK-NEON-NEXT: orr x9, x18, x9
+; CHECK-NEON-NEXT: mul x23, x23, x5
+; CHECK-NEON-NEXT: eor x0, x3, x30
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x25, x25, x7
-; CHECK-NEON-NEXT: eor x15, x5, x15
-; CHECK-NEON-NEXT: mul x22, x22, x24
-; CHECK-NEON-NEXT: mul x24, x4, x24
-; CHECK-NEON-NEXT: mul x4, x4, x7
-; CHECK-NEON-NEXT: eor x3, x22, x19
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #128] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x7, x13, x14
-; CHECK-NEON-NEXT: eor x2, x25, x24
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x13, x13, x0
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #80] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x4, x21, x4
+; CHECK-NEON-NEXT: mul x20, x20, x22
+; CHECK-NEON-NEXT: mul x22, x2, x22
+; CHECK-NEON-NEXT: mul x2, x2, x5
+; CHECK-NEON-NEXT: eor x4, x20, x6
+; CHECK-NEON-NEXT: mul x5, x15, x13
+; CHECK-NEON-NEXT: eor x3, x23, x22
; CHECK-NEON-NEXT: ldp x22, x21, [sp, #112] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x0, x11, x0
-; CHECK-NEON-NEXT: mul x14, x16, x14
-; CHECK-NEON-NEXT: mul x16, x16, x12
-; CHECK-NEON-NEXT: mul x11, x11, x10
-; CHECK-NEON-NEXT: mul x10, x9, x10
-; CHECK-NEON-NEXT: mul x9, x9, x12
-; CHECK-NEON-NEXT: eor x12, x15, x2
-; CHECK-NEON-NEXT: eor x15, x3, x4
+; CHECK-NEON-NEXT: mul x15, x15, x1
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #96] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x2, x19, x2
+; CHECK-NEON-NEXT: ldp x20, x19, [sp, #128] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x1, x11, x1
+; CHECK-NEON-NEXT: mul x13, x16, x13
+; CHECK-NEON-NEXT: mul x16, x16, x17
+; CHECK-NEON-NEXT: eor x18, x1, x5
+; CHECK-NEON-NEXT: mul x11, x11, x12
+; CHECK-NEON-NEXT: mul x12, x14, x12
+; CHECK-NEON-NEXT: mul x14, x14, x17
+; CHECK-NEON-NEXT: eor x17, x0, x3
+; CHECK-NEON-NEXT: eor x0, x4, x2
+; CHECK-NEON-NEXT: and x17, x17, #0x4444444444444444
+; CHECK-NEON-NEXT: and x0, x0, #0x8888888888888888
+; CHECK-NEON-NEXT: eor x11, x11, x15
+; CHECK-NEON-NEXT: orr x17, x17, x0
+; CHECK-NEON-NEXT: eor x12, x16, x12
+; CHECK-NEON-NEXT: orr x9, x9, x17
+; CHECK-NEON-NEXT: rbit x9, x9
+; CHECK-NEON-NEXT: eor x12, x18, x12
+; CHECK-NEON-NEXT: eor x13, x13, x14
; CHECK-NEON-NEXT: and x12, x12, #0x4444444444444444
-; CHECK-NEON-NEXT: and x15, x15, #0x8888888888888888
; CHECK-NEON-NEXT: eor x11, x11, x13
-; CHECK-NEON-NEXT: orr x12, x12, x15
-; CHECK-NEON-NEXT: eor x15, x0, x7
-; CHECK-NEON-NEXT: and x13, x18, #0x1111111111111111
-; CHECK-NEON-NEXT: eor x10, x16, x10
-; CHECK-NEON-NEXT: orr x12, x17, x12
-; CHECK-NEON-NEXT: orr x8, x13, x8
-; CHECK-NEON-NEXT: eor x10, x15, x10
-; CHECK-NEON-NEXT: rbit x12, x12
-; CHECK-NEON-NEXT: eor x9, x14, x9
-; CHECK-NEON-NEXT: and x10, x10, #0x4444444444444444
-; CHECK-NEON-NEXT: eor x9, x11, x9
-; CHECK-NEON-NEXT: lsr x1, x12, #1
-; CHECK-NEON-NEXT: and x9, x9, #0x8888888888888888
-; CHECK-NEON-NEXT: orr x9, x10, x9
+; CHECK-NEON-NEXT: lsr x1, x9, #1
+; CHECK-NEON-NEXT: and x11, x11, #0x8888888888888888
+; CHECK-NEON-NEXT: orr x9, x12, x11
; CHECK-NEON-NEXT: orr x0, x8, x9
; CHECK-NEON-NEXT: add sp, sp, #144
; CHECK-NEON-NEXT: ret
@@ -1559,7 +1553,7 @@ define <2 x i128> @clmul_v2i128_neon_zext(<2 x i64> %x, <2 x i64> %y) {
; CHECK-NEON-NEXT: stp x18, x0, [sp, #304] // 16-byte Folded Spill
; CHECK-NEON-NEXT: mul x0, x14, x9
; CHECK-NEON-NEXT: mul x18, x16, x17
-; CHECK-NEON-NEXT: mul x27, x16, x15
+; CHECK-NEON-NEXT: mul x24, x16, x15
; CHECK-NEON-NEXT: stp x18, x0, [sp, #288] // 16-byte Folded Spill
; CHECK-NEON-NEXT: mul x0, x11, x13
; CHECK-NEON-NEXT: mul x18, x12, x13
@@ -1571,115 +1565,117 @@ define <2 x i128> @clmul_v2i128_neon_zext(<2 x i64> %x, <2 x i64> %y) {
; CHECK-NEON-NEXT: stp x18, x0, [sp, #256] // 16-byte Folded Spill
; CHECK-NEON-NEXT: mul x18, x11, x15
; CHECK-NEON-NEXT: and x11, x8, #0x2222222222222222
-; CHECK-NEON-NEXT: str x9, [sp, #128] // 8-byte Spill
+; CHECK-NEON-NEXT: str x9, [sp, #152] // 8-byte Spill
; CHECK-NEON-NEXT: and x9, x10, #0x1111111111111111
; CHECK-NEON-NEXT: stp x12, x18, [sp, #240] // 16-byte Folded Spill
; CHECK-NEON-NEXT: mul x12, x14, x15
-; CHECK-NEON-NEXT: and x15, x8, #0x4444444444444444
+; CHECK-NEON-NEXT: and x15, x8, #0x8888888888888888
; CHECK-NEON-NEXT: mul x14, x16, x13
; CHECK-NEON-NEXT: and x13, x8, #0x1111111111111111
-; CHECK-NEON-NEXT: and x8, x8, #0x8888888888888888
+; CHECK-NEON-NEXT: and x8, x8, #0x4444444444444444
; CHECK-NEON-NEXT: str x12, [sp, #232] // 8-byte Spill
; CHECK-NEON-NEXT: mul x12, x11, x9
; CHECK-NEON-NEXT: stp x12, x14, [sp, #216] // 16-byte Folded Spill
; CHECK-NEON-NEXT: and x12, x10, #0x2222222222222222
; CHECK-NEON-NEXT: mul x14, x13, x12
; CHECK-NEON-NEXT: str x14, [sp, #208] // 8-byte Spill
-; CHECK-NEON-NEXT: and x14, x10, #0x8888888888888888
-; CHECK-NEON-NEXT: and x10, x10, #0x4444444444444444
+; CHECK-NEON-NEXT: and x14, x10, #0x4444444444444444
+; CHECK-NEON-NEXT: and x10, x10, #0x8888888888888888
; CHECK-NEON-NEXT: mul x16, x15, x14
-; CHECK-NEON-NEXT: mul x17, x8, x10
+; CHECK-NEON-NEXT: mul x17, x11, x10
; CHECK-NEON-NEXT: str x16, [sp, #200] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x16, x11, x14
-; CHECK-NEON-NEXT: stp x16, x17, [sp, #176] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x17, x13, x9
-; CHECK-NEON-NEXT: mul x16, x15, x10
-; CHECK-NEON-NEXT: stp x16, x17, [sp, #152] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x17, x8, x12
-; CHECK-NEON-NEXT: mul x16, x11, x12
-; CHECK-NEON-NEXT: mul x11, x11, x10
+; CHECK-NEON-NEXT: mul x16, x8, x14
; CHECK-NEON-NEXT: str x16, [sp, #168] // 8-byte Spill
-; CHECK-NEON-NEXT: stp x11, x17, [sp, #136] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x11, x13, x10
-; CHECK-NEON-NEXT: mul x10, x15, x12
-; CHECK-NEON-NEXT: stp x11, x10, [sp, #112] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x11, x15, x9
-; CHECK-NEON-NEXT: mov x15, v0.d[1]
-; CHECK-NEON-NEXT: mul x10, x13, x14
-; CHECK-NEON-NEXT: and x29, x15, #0x8888888888888888
-; CHECK-NEON-NEXT: and x6, x15, #0x4444444444444444
-; CHECK-NEON-NEXT: and x4, x15, #0x1111111111111111
-; CHECK-NEON-NEXT: stp x10, x11, [sp, #96] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x11, x8, x14
-; CHECK-NEON-NEXT: mov x10, v1.d[1]
+; CHECK-NEON-NEXT: mul x16, x15, x12
+; CHECK-NEON-NEXT: str x16, [sp, #160] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x16, x11, x12
+; CHECK-NEON-NEXT: mul x11, x11, x14
+; CHECK-NEON-NEXT: stp x16, x17, [sp, #176] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: str x11, [sp, #144] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x11, x13, x14
+; CHECK-NEON-NEXT: str x11, [sp, #128] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x11, x8, x12
+; CHECK-NEON-NEXT: str x11, [sp, #136] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x11, x8, x10
; CHECK-NEON-NEXT: mul x8, x8, x9
-; CHECK-NEON-NEXT: and x21, x10, #0x1111111111111111
-; CHECK-NEON-NEXT: and x7, x10, #0x8888888888888888
-; CHECK-NEON-NEXT: and x20, x10, #0x2222222222222222
-; CHECK-NEON-NEXT: rbit x14, x10
-; CHECK-NEON-NEXT: mul x3, x6, x7
-; CHECK-NEON-NEXT: stp x11, x8, [sp, #80] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: str x8, [sp, #120] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x8, x13, x9
+; CHECK-NEON-NEXT: mul x9, x15, x9
+; CHECK-NEON-NEXT: stp x8, x11, [sp, #80] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x11, x13, x10
+; CHECK-NEON-NEXT: mov x8, v0.d[1]
+; CHECK-NEON-NEXT: mov x13, v1.d[1]
+; CHECK-NEON-NEXT: mul x10, x15, x10
+; CHECK-NEON-NEXT: and x28, x8, #0x8888888888888888
+; CHECK-NEON-NEXT: and x6, x8, #0x4444444444444444
+; CHECK-NEON-NEXT: rbit x15, x8
+; CHECK-NEON-NEXT: stp x9, x11, [sp, #104] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: and x21, x13, #0x1111111111111111
+; CHECK-NEON-NEXT: and x9, x8, #0x2222222222222222
+; CHECK-NEON-NEXT: and x7, x13, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x11, x9, x21
+; CHECK-NEON-NEXT: and x30, x13, #0x2222222222222222
+; CHECK-NEON-NEXT: str x10, [sp, #96] // 8-byte Spill
+; CHECK-NEON-NEXT: and x14, x13, #0x4444444444444444
+; CHECK-NEON-NEXT: rbit x13, x13
+; CHECK-NEON-NEXT: mul x10, x9, x7
+; CHECK-NEON-NEXT: and x4, x8, #0x1111111111111111
; CHECK-NEON-NEXT: and x8, x15, #0x2222222222222222
-; CHECK-NEON-NEXT: rbit x15, x15
-; CHECK-NEON-NEXT: mul x11, x8, x21
-; CHECK-NEON-NEXT: and x1, x14, #0x1111111111111111
-; CHECK-NEON-NEXT: and x16, x14, #0x8888888888888888
-; CHECK-NEON-NEXT: and x0, x14, #0x2222222222222222
-; CHECK-NEON-NEXT: and x18, x14, #0x4444444444444444
+; CHECK-NEON-NEXT: and x0, x13, #0x1111111111111111
+; CHECK-NEON-NEXT: and x16, x13, #0x8888888888888888
+; CHECK-NEON-NEXT: and x18, x13, #0x2222222222222222
+; CHECK-NEON-NEXT: and x17, x13, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x2, x6, x7
+; CHECK-NEON-NEXT: mul x29, x8, x17
+; CHECK-NEON-NEXT: stp x10, x11, [sp, #48] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x10, x9, x30
+; CHECK-NEON-NEXT: mul x9, x9, x14
+; CHECK-NEON-NEXT: mul x11, x28, x14
+; CHECK-NEON-NEXT: mul x3, x4, x21
+; CHECK-NEON-NEXT: str x9, [sp, #192] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x9, x6, x14
+; CHECK-NEON-NEXT: mul x1, x28, x30
+; CHECK-NEON-NEXT: stp x9, x11, [sp, #32] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x9, x8, x0
+; CHECK-NEON-NEXT: mul x11, x4, x14
; CHECK-NEON-NEXT: and x14, x15, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x9, x8, x7
-; CHECK-NEON-NEXT: mul x24, x14, x18
-; CHECK-NEON-NEXT: mul x23, x14, x0
-; CHECK-NEON-NEXT: stp x9, x11, [sp, #48] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: and x9, x10, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x11, x8, x20
-; CHECK-NEON-NEXT: mul x8, x8, x9
-; CHECK-NEON-NEXT: mul x10, x4, x9
-; CHECK-NEON-NEXT: mul x2, x29, x20
-; CHECK-NEON-NEXT: str x8, [sp, #192] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x29, x9
-; CHECK-NEON-NEXT: mul x17, x29, x7
-; CHECK-NEON-NEXT: str x8, [sp, #40] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x6, x9
-; CHECK-NEON-NEXT: str x8, [sp, #32] // 8-byte Spill
-; CHECK-NEON-NEXT: and x8, x15, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x9, x8, x1
-; CHECK-NEON-NEXT: mul x30, x8, x18
-; CHECK-NEON-NEXT: stp x9, x11, [sp, #64] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x23, x14, x18
+; CHECK-NEON-NEXT: stp x9, x10, [sp, #64] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: and x10, x15, #0x1111111111111111
; CHECK-NEON-NEXT: mul x9, x8, x16
-; CHECK-NEON-NEXT: eor x11, x19, x5
-; CHECK-NEON-NEXT: ldr x19, [sp, #128] // 8-byte Reload
-; CHECK-NEON-NEXT: mul x5, x6, x21
+; CHECK-NEON-NEXT: mul x20, x10, x18
+; CHECK-NEON-NEXT: mul x22, x14, x17
; CHECK-NEON-NEXT: str x9, [sp, #24] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x9, x8, x0
+; CHECK-NEON-NEXT: mul x9, x8, x18
; CHECK-NEON-NEXT: and x8, x15, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x26, x8, x18
-; CHECK-NEON-NEXT: eor x17, x5, x17
-; CHECK-NEON-NEXT: mul x25, x8, x0
-; CHECK-NEON-NEXT: stp x10, x9, [sp, #8] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x25, x8, x18
+; CHECK-NEON-NEXT: mul x18, x4, x30
+; CHECK-NEON-NEXT: stp x11, x9, [sp, #8] // 16-byte Folded Spill
; CHECK-NEON-NEXT: ldr x9, [sp, #312] // 8-byte Reload
-; CHECK-NEON-NEXT: and x10, x15, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x28, x10, x18
-; CHECK-NEON-NEXT: eor x9, x27, x9
+; CHECK-NEON-NEXT: eor x11, x19, x5
+; CHECK-NEON-NEXT: ldr x19, [sp, #152] // 8-byte Reload
+; CHECK-NEON-NEXT: mul x26, x8, x17
+; CHECK-NEON-NEXT: eor x9, x24, x9
; CHECK-NEON-NEXT: eor x15, x11, x9
; CHECK-NEON-NEXT: ldp x11, x9, [sp, #296] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x18, x4, x21
; CHECK-NEON-NEXT: and x15, x15, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x27, x10, x17
; CHECK-NEON-NEXT: eor x11, x11, x9
; CHECK-NEON-NEXT: ldp x12, x9, [sp, #280] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x22, x10, x0
-; CHECK-NEON-NEXT: eor x27, x9, x12
+; CHECK-NEON-NEXT: mul x5, x6, x21
+; CHECK-NEON-NEXT: eor x24, x9, x12
; CHECK-NEON-NEXT: ldp x12, x9, [sp, #264] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x11, x11, x27
-; CHECK-NEON-NEXT: mul x0, x4, x20
+; CHECK-NEON-NEXT: eor x11, x11, x24
+; CHECK-NEON-NEXT: mul x17, x28, x7
; CHECK-NEON-NEXT: and x11, x11, #0x1111111111111111
-; CHECK-NEON-NEXT: eor x27, x12, x9
+; CHECK-NEON-NEXT: eor x24, x12, x9
; CHECK-NEON-NEXT: ldp x12, x9, [sp, #248] // 16-byte Folded Reload
; CHECK-NEON-NEXT: orr x11, x11, x15
; CHECK-NEON-NEXT: mul x4, x4, x7
; CHECK-NEON-NEXT: eor x13, x9, x12
; CHECK-NEON-NEXT: ldp x12, x9, [sp, #232] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x13, x27, x13
+; CHECK-NEON-NEXT: eor x13, x24, x13
+; CHECK-NEON-NEXT: eor x17, x5, x17
; CHECK-NEON-NEXT: eor x12, x12, x9
; CHECK-NEON-NEXT: ldr x9, [sp, #224] // 8-byte Reload
; CHECK-NEON-NEXT: eor x9, x9, x19
@@ -1687,19 +1683,18 @@ define <2 x i128> @clmul_v2i128_neon_zext(<2 x i64> %x, <2 x i64> %y) {
; CHECK-NEON-NEXT: eor x9, x12, x9
; CHECK-NEON-NEXT: and x12, x13, #0x4444444444444444
; CHECK-NEON-NEXT: and x9, x9, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x13, x8, x1
+; CHECK-NEON-NEXT: mul x13, x8, x0
; CHECK-NEON-NEXT: orr x8, x12, x9
; CHECK-NEON-NEXT: ldp x15, x9, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: ldr x12, [sp, #40] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x19, x19, x24
-; CHECK-NEON-NEXT: eor x15, x18, x15
-; CHECK-NEON-NEXT: ldr x18, [sp, #32] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x9, x0, x9
-; CHECK-NEON-NEXT: eor x12, x3, x12
-; CHECK-NEON-NEXT: ldp x3, x5, [sp, #176] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x18, x18, x2
+; CHECK-NEON-NEXT: eor x19, x19, x22
+; CHECK-NEON-NEXT: eor x9, x18, x9
+; CHECK-NEON-NEXT: ldp x18, x12, [sp, #32] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x15, x3, x15
+; CHECK-NEON-NEXT: ldp x5, x3, [sp, #80] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x12, x2, x12
+; CHECK-NEON-NEXT: eor x18, x18, x1
+; CHECK-NEON-NEXT: mul x1, x10, x0
; CHECK-NEON-NEXT: eor x9, x9, x12
-; CHECK-NEON-NEXT: mul x0, x10, x1
; CHECK-NEON-NEXT: eor x12, x15, x18
; CHECK-NEON-NEXT: ldr x15, [sp, #72] // 8-byte Reload
; CHECK-NEON-NEXT: ldr x18, [sp, #8] // 8-byte Reload
@@ -1714,57 +1709,57 @@ define <2 x i128> @clmul_v2i128_neon_zext(<2 x i64> %x, <2 x i64> %y) {
; CHECK-NEON-NEXT: and x15, x15, #0x4444444444444444
; CHECK-NEON-NEXT: eor x18, x2, x18
; CHECK-NEON-NEXT: ldr x2, [sp, #200] // 8-byte Reload
-; CHECK-NEON-NEXT: mul x14, x14, x1
-; CHECK-NEON-NEXT: eor x10, x10, x30
-; CHECK-NEON-NEXT: eor x2, x2, x5
-; CHECK-NEON-NEXT: ldr x5, [sp, #160] // 8-byte Reload
+; CHECK-NEON-NEXT: mul x14, x14, x0
+; CHECK-NEON-NEXT: eor x10, x10, x29
+; CHECK-NEON-NEXT: eor x2, x3, x2
+; CHECK-NEON-NEXT: ldr x3, [sp, #184] // 8-byte Reload
; CHECK-NEON-NEXT: eor x18, x18, x2
; CHECK-NEON-NEXT: eor x13, x13, x16
-; CHECK-NEON-NEXT: mul x16, x29, x21
+; CHECK-NEON-NEXT: mul x16, x28, x21
; CHECK-NEON-NEXT: eor x3, x5, x3
-; CHECK-NEON-NEXT: ldp x27, x5, [sp, #144] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: ldp x24, x5, [sp, #160] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x17, x18, #0x2222222222222222
; CHECK-NEON-NEXT: eor x14, x25, x14
; CHECK-NEON-NEXT: eor x10, x10, x14
-; CHECK-NEON-NEXT: ldp x29, x30, [sp, #320] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x5, x5, x27
+; CHECK-NEON-NEXT: ldp x22, x21, [sp, #384] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x5, x5, x24
; CHECK-NEON-NEXT: and x10, x10, #0x8888888888888888
; CHECK-NEON-NEXT: eor x2, x3, x5
-; CHECK-NEON-NEXT: ldp x3, x1, [sp, #96] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: ldp x3, x0, [sp, #112] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x18, x2, #0x1111111111111111
-; CHECK-NEON-NEXT: ldr x2, [sp, #112] // 8-byte Reload
+; CHECK-NEON-NEXT: ldr x2, [sp, #128] // 8-byte Reload
; CHECK-NEON-NEXT: orr x17, x18, x17
-; CHECK-NEON-NEXT: ldr x18, [sp, #168] // 8-byte Reload
+; CHECK-NEON-NEXT: ldr x18, [sp, #176] // 8-byte Reload
; CHECK-NEON-NEXT: eor x18, x2, x18
-; CHECK-NEON-NEXT: ldp x2, x5, [sp, #80] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x1, x1, x2
-; CHECK-NEON-NEXT: ldr x2, [sp, #136] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x18, x18, x1
+; CHECK-NEON-NEXT: ldp x2, x5, [sp, #96] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x0, x0, x2
+; CHECK-NEON-NEXT: ldr x2, [sp, #144] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x18, x18, x0
; CHECK-NEON-NEXT: eor x2, x3, x2
-; CHECK-NEON-NEXT: ldr x3, [sp, #120] // 8-byte Reload
+; CHECK-NEON-NEXT: ldr x3, [sp, #136] // 8-byte Reload
; CHECK-NEON-NEXT: and x18, x18, #0x4444444444444444
; CHECK-NEON-NEXT: eor x3, x3, x5
; CHECK-NEON-NEXT: ldr x5, [sp, #64] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x1, x2, x3
+; CHECK-NEON-NEXT: eor x0, x2, x3
; CHECK-NEON-NEXT: ldr x3, [sp, #24] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x5, x22, x5
-; CHECK-NEON-NEXT: and x1, x1, #0x8888888888888888
-; CHECK-NEON-NEXT: eor x0, x0, x3
+; CHECK-NEON-NEXT: eor x5, x20, x5
+; CHECK-NEON-NEXT: and x0, x0, #0x8888888888888888
+; CHECK-NEON-NEXT: eor x1, x1, x3
; CHECK-NEON-NEXT: eor x3, x26, x23
; CHECK-NEON-NEXT: eor x2, x5, x19
-; CHECK-NEON-NEXT: eor x0, x0, x3
+; CHECK-NEON-NEXT: eor x1, x1, x3
; CHECK-NEON-NEXT: ldr x3, [sp, #16] // 8-byte Reload
-; CHECK-NEON-NEXT: mul x5, x6, x20
+; CHECK-NEON-NEXT: mul x5, x6, x30
; CHECK-NEON-NEXT: and x2, x2, #0x2222222222222222
-; CHECK-NEON-NEXT: and x14, x0, #0x1111111111111111
-; CHECK-NEON-NEXT: orr x18, x18, x1
-; CHECK-NEON-NEXT: eor x3, x28, x3
+; CHECK-NEON-NEXT: and x14, x1, #0x1111111111111111
+; CHECK-NEON-NEXT: orr x18, x18, x0
+; CHECK-NEON-NEXT: eor x3, x27, x3
; CHECK-NEON-NEXT: orr x14, x14, x2
; CHECK-NEON-NEXT: orr x17, x17, x18
; CHECK-NEON-NEXT: eor x13, x3, x13
; CHECK-NEON-NEXT: ldp x20, x19, [sp, #400] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x13, x13, #0x4444444444444444
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #384] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #368] // 16-byte Folded Reload
; CHECK-NEON-NEXT: orr x10, x13, x10
; CHECK-NEON-NEXT: ldr x13, [sp, #192] // 8-byte Reload
; CHECK-NEON-NEXT: orr x0, x11, x8
@@ -1774,10 +1769,10 @@ define <2 x i128> @clmul_v2i128_neon_zext(<2 x i64> %x, <2 x i64> %y) {
; CHECK-NEON-NEXT: eor x13, x4, x13
; CHECK-NEON-NEXT: rbit x10, x10
; CHECK-NEON-NEXT: eor x13, x13, x14
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #368] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: and x13, x13, #0x8888888888888888
; CHECK-NEON-NEXT: ldp x26, x25, [sp, #352] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: and x13, x13, #0x8888888888888888
; CHECK-NEON-NEXT: ldp x28, x27, [sp, #336] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: ldp x29, x30, [sp, #320] // 16-byte Folded Reload
; CHECK-NEON-NEXT: lsr x3, x10, #1
; CHECK-NEON-NEXT: orr x10, x15, x13
; CHECK-NEON-NEXT: lsr x1, x16, #1
@@ -2169,17 +2164,17 @@ define <2 x i64> @clmulr_v2i64_neon(<2 x i64> %a, <2 x i64> %b) nounwind {
; CHECK-NEON-NEXT: sub sp, sp, #112
; CHECK-NEON-NEXT: rev64 v2.16b, v1.16b
; CHECK-NEON-NEXT: rev64 v3.16b, v0.16b
-; CHECK-NEON-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill
; CHECK-NEON-NEXT: movi v0.16b, #17
; CHECK-NEON-NEXT: movi v1.16b, #34
-; CHECK-NEON-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
; CHECK-NEON-NEXT: stp x26, x25, [sp, #48] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
; CHECK-NEON-NEXT: rbit v4.16b, v2.16b
; CHECK-NEON-NEXT: rbit v5.16b, v3.16b
; CHECK-NEON-NEXT: movi v2.16b, #136
; CHECK-NEON-NEXT: movi v3.16b, #68
-; CHECK-NEON-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill
; CHECK-NEON-NEXT: stp x28, x27, [sp, #32] // 16-byte Folded Spill
; CHECK-NEON-NEXT: and v6.16b, v4.16b, v0.16b
; CHECK-NEON-NEXT: and v7.16b, v5.16b, v1.16b
@@ -2190,101 +2185,101 @@ define <2 x i64> @clmulr_v2i64_neon(<2 x i64> %a, <2 x i64> %b) nounwind {
; CHECK-NEON-NEXT: and v4.16b, v4.16b, v3.16b
; CHECK-NEON-NEXT: and v5.16b, v5.16b, v2.16b
; CHECK-NEON-NEXT: fmov x10, d6
-; CHECK-NEON-NEXT: fmov x1, d7
+; CHECK-NEON-NEXT: fmov x3, d7
; CHECK-NEON-NEXT: fmov x15, d16
-; CHECK-NEON-NEXT: fmov x12, d17
-; CHECK-NEON-NEXT: fmov x7, d18
-; CHECK-NEON-NEXT: fmov x21, d19
-; CHECK-NEON-NEXT: fmov x20, d5
-; CHECK-NEON-NEXT: mov x0, v7.d[1]
-; CHECK-NEON-NEXT: mov x4, v16.d[1]
-; CHECK-NEON-NEXT: mul x9, x1, x10
+; CHECK-NEON-NEXT: fmov x14, d17
+; CHECK-NEON-NEXT: fmov x6, d18
+; CHECK-NEON-NEXT: fmov x20, d19
+; CHECK-NEON-NEXT: mov x12, v6.d[1]
; CHECK-NEON-NEXT: mov x17, v17.d[1]
-; CHECK-NEON-NEXT: mov x14, v18.d[1]
-; CHECK-NEON-NEXT: mov x6, v19.d[1]
-; CHECK-NEON-NEXT: mov x23, v4.d[1]
+; CHECK-NEON-NEXT: mov x16, v18.d[1]
+; CHECK-NEON-NEXT: mul x9, x3, x10
+; CHECK-NEON-NEXT: mov x25, v19.d[1]
+; CHECK-NEON-NEXT: fmov x29, d4
+; CHECK-NEON-NEXT: fmov x19, d5
+; CHECK-NEON-NEXT: mov x1, v7.d[1]
+; CHECK-NEON-NEXT: mov x4, v16.d[1]
+; CHECK-NEON-NEXT: mul x8, x14, x15
+; CHECK-NEON-NEXT: mov x21, v4.d[1]
; CHECK-NEON-NEXT: mov x11, v5.d[1]
-; CHECK-NEON-NEXT: mul x8, x12, x15
-; CHECK-NEON-NEXT: mul x16, x21, x7
-; CHECK-NEON-NEXT: mul x25, x1, x7
+; CHECK-NEON-NEXT: mul x13, x20, x6
+; CHECK-NEON-NEXT: mul x23, x14, x10
; CHECK-NEON-NEXT: stp x8, x9, [sp] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: fmov x8, d4
-; CHECK-NEON-NEXT: mov x9, v6.d[1]
-; CHECK-NEON-NEXT: mul x13, x1, x15
+; CHECK-NEON-NEXT: mul x8, x25, x16
; CHECK-NEON-NEXT: ldp d5, d4, [sp] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: fmov d6, x16
-; CHECK-NEON-NEXT: mul x18, x20, x8
-; CHECK-NEON-NEXT: fmov d16, x25
-; CHECK-NEON-NEXT: mul x29, x21, x8
-; CHECK-NEON-NEXT: fmov d20, x13
-; CHECK-NEON-NEXT: mul x1, x1, x8
+; CHECK-NEON-NEXT: fmov d6, x13
+; CHECK-NEON-NEXT: mul x9, x17, x12
+; CHECK-NEON-NEXT: fmov d17, x23
+; CHECK-NEON-NEXT: mul x18, x19, x29
+; CHECK-NEON-NEXT: mov v6.d[1], x8
+; CHECK-NEON-NEXT: mul x22, x3, x6
+; CHECK-NEON-NEXT: mov v17.d[1], x9
+; CHECK-NEON-NEXT: mul x27, x20, x29
; CHECK-NEON-NEXT: fmov d7, x18
-; CHECK-NEON-NEXT: mul x8, x12, x8
-; CHECK-NEON-NEXT: fmov d18, x29
-; CHECK-NEON-NEXT: mul x26, x12, x10
-; CHECK-NEON-NEXT: fmov d24, x1
-; CHECK-NEON-NEXT: mul x30, x20, x15
-; CHECK-NEON-NEXT: fmov d21, x8
-; CHECK-NEON-NEXT: mul x15, x21, x15
-; CHECK-NEON-NEXT: fmov d17, x26
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x21, x21, x10
-; CHECK-NEON-NEXT: fmov d19, x30
+; CHECK-NEON-NEXT: mul x28, x19, x15
+; CHECK-NEON-NEXT: fmov d16, x22
+; CHECK-NEON-NEXT: mul x30, x3, x15
+; CHECK-NEON-NEXT: fmov d18, x27
+; CHECK-NEON-NEXT: mul x3, x3, x29
+; CHECK-NEON-NEXT: fmov d19, x28
+; CHECK-NEON-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x29, x14, x29
+; CHECK-NEON-NEXT: fmov d20, x30
+; CHECK-NEON-NEXT: mul x15, x20, x15
+; CHECK-NEON-NEXT: fmov d24, x3
+; CHECK-NEON-NEXT: mul x20, x20, x10
+; CHECK-NEON-NEXT: fmov d21, x29
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x12, x12, x7
+; CHECK-NEON-NEXT: mul x14, x14, x6
; CHECK-NEON-NEXT: fmov d26, x15
-; CHECK-NEON-NEXT: mul x7, x20, x7
-; CHECK-NEON-NEXT: fmov d22, x21
-; CHECK-NEON-NEXT: mul x10, x20, x10
-; CHECK-NEON-NEXT: fmov d25, x12
-; CHECK-NEON-NEXT: mul x5, x0, x9
-; CHECK-NEON-NEXT: fmov d23, x7
-; CHECK-NEON-NEXT: mul x19, x17, x4
+; CHECK-NEON-NEXT: mul x6, x19, x6
+; CHECK-NEON-NEXT: fmov d22, x20
+; CHECK-NEON-NEXT: mul x10, x19, x10
+; CHECK-NEON-NEXT: fmov d25, x14
+; CHECK-NEON-NEXT: mul x2, x1, x12
+; CHECK-NEON-NEXT: fmov d23, x6
+; CHECK-NEON-NEXT: mul x5, x17, x4
; CHECK-NEON-NEXT: fmov d27, x10
-; CHECK-NEON-NEXT: mul x2, x6, x14
-; CHECK-NEON-NEXT: mov v4.d[1], x5
-; CHECK-NEON-NEXT: mul x3, x11, x23
-; CHECK-NEON-NEXT: mov v5.d[1], x19
-; CHECK-NEON-NEXT: mul x22, x0, x14
-; CHECK-NEON-NEXT: mov v6.d[1], x2
-; CHECK-NEON-NEXT: mul x24, x17, x9
-; CHECK-NEON-NEXT: mov v7.d[1], x3
+; CHECK-NEON-NEXT: mul x0, x11, x21
+; CHECK-NEON-NEXT: mov v4.d[1], x2
+; CHECK-NEON-NEXT: mul x7, x1, x16
+; CHECK-NEON-NEXT: mov v5.d[1], x5
+; CHECK-NEON-NEXT: mul x24, x25, x21
+; CHECK-NEON-NEXT: mov v7.d[1], x0
+; CHECK-NEON-NEXT: mul x26, x11, x4
+; CHECK-NEON-NEXT: mov v16.d[1], x7
; CHECK-NEON-NEXT: eor v4.16b, v5.16b, v4.16b
-; CHECK-NEON-NEXT: mul x27, x6, x23
-; CHECK-NEON-NEXT: mov v16.d[1], x22
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x28, x11, x4
-; CHECK-NEON-NEXT: mov v17.d[1], x24
+; CHECK-NEON-NEXT: mul x19, x1, x4
+; CHECK-NEON-NEXT: mov v18.d[1], x24
; CHECK-NEON-NEXT: eor v5.16b, v6.16b, v7.16b
-; CHECK-NEON-NEXT: mul x20, x0, x4
-; CHECK-NEON-NEXT: mov v18.d[1], x27
-; CHECK-NEON-NEXT: mul x0, x0, x23
-; CHECK-NEON-NEXT: eor v4.16b, v4.16b, v5.16b
-; CHECK-NEON-NEXT: mov v19.d[1], x28
+; CHECK-NEON-NEXT: mul x1, x1, x21
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mov v19.d[1], x26
; CHECK-NEON-NEXT: eor v6.16b, v17.16b, v16.16b
-; CHECK-NEON-NEXT: mul x23, x17, x23
-; CHECK-NEON-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v20.d[1], x20
-; CHECK-NEON-NEXT: and v1.16b, v4.16b, v1.16b
-; CHECK-NEON-NEXT: mul x4, x6, x4
+; CHECK-NEON-NEXT: mul x21, x17, x21
+; CHECK-NEON-NEXT: eor v4.16b, v4.16b, v5.16b
+; CHECK-NEON-NEXT: mov v20.d[1], x19
; CHECK-NEON-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v24.d[1], x0
+; CHECK-NEON-NEXT: mul x4, x25, x4
+; CHECK-NEON-NEXT: mov v24.d[1], x1
; CHECK-NEON-NEXT: eor v7.16b, v18.16b, v19.16b
-; CHECK-NEON-NEXT: mul x6, x6, x9
-; CHECK-NEON-NEXT: mov v21.d[1], x23
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x16, x17, x14
+; CHECK-NEON-NEXT: and v1.16b, v4.16b, v1.16b
+; CHECK-NEON-NEXT: mul x25, x25, x12
+; CHECK-NEON-NEXT: mov v21.d[1], x21
+; CHECK-NEON-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x13, x17, x16
; CHECK-NEON-NEXT: eor v5.16b, v6.16b, v7.16b
; CHECK-NEON-NEXT: mov v26.d[1], x4
-; CHECK-NEON-NEXT: mul x14, x11, x14
-; CHECK-NEON-NEXT: mov v22.d[1], x6
+; CHECK-NEON-NEXT: mul x8, x11, x16
+; CHECK-NEON-NEXT: mov v22.d[1], x25
; CHECK-NEON-NEXT: eor v16.16b, v21.16b, v20.16b
; CHECK-NEON-NEXT: and v0.16b, v5.16b, v0.16b
-; CHECK-NEON-NEXT: mul x8, x11, x9
-; CHECK-NEON-NEXT: mov v25.d[1], x16
+; CHECK-NEON-NEXT: mul x9, x11, x12
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mov v25.d[1], x13
; CHECK-NEON-NEXT: orr v0.16b, v0.16b, v1.16b
-; CHECK-NEON-NEXT: mov v23.d[1], x14
-; CHECK-NEON-NEXT: mov v27.d[1], x8
+; CHECK-NEON-NEXT: mov v23.d[1], x8
+; CHECK-NEON-NEXT: mov v27.d[1], x9
; CHECK-NEON-NEXT: eor v18.16b, v25.16b, v24.16b
; CHECK-NEON-NEXT: eor v17.16b, v22.16b, v23.16b
; CHECK-NEON-NEXT: eor v19.16b, v26.16b, v27.16b
@@ -2770,17 +2765,17 @@ define <2 x i64> @clmulh_v2i64_neon(<2 x i64> %a, <2 x i64> %b) nounwind {
; CHECK-NEON-NEXT: sub sp, sp, #112
; CHECK-NEON-NEXT: rev64 v2.16b, v1.16b
; CHECK-NEON-NEXT: rev64 v3.16b, v0.16b
-; CHECK-NEON-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill
; CHECK-NEON-NEXT: movi v0.16b, #17
; CHECK-NEON-NEXT: movi v1.16b, #34
-; CHECK-NEON-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
; CHECK-NEON-NEXT: stp x26, x25, [sp, #48] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
; CHECK-NEON-NEXT: rbit v4.16b, v2.16b
; CHECK-NEON-NEXT: rbit v5.16b, v3.16b
; CHECK-NEON-NEXT: movi v2.16b, #136
; CHECK-NEON-NEXT: movi v3.16b, #68
-; CHECK-NEON-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill
; CHECK-NEON-NEXT: stp x28, x27, [sp, #32] // 16-byte Folded Spill
; CHECK-NEON-NEXT: and v6.16b, v4.16b, v0.16b
; CHECK-NEON-NEXT: and v7.16b, v5.16b, v1.16b
@@ -2791,101 +2786,101 @@ define <2 x i64> @clmulh_v2i64_neon(<2 x i64> %a, <2 x i64> %b) nounwind {
; CHECK-NEON-NEXT: and v4.16b, v4.16b, v3.16b
; CHECK-NEON-NEXT: and v5.16b, v5.16b, v2.16b
; CHECK-NEON-NEXT: fmov x10, d6
-; CHECK-NEON-NEXT: fmov x1, d7
+; CHECK-NEON-NEXT: fmov x3, d7
; CHECK-NEON-NEXT: fmov x15, d16
-; CHECK-NEON-NEXT: fmov x12, d17
-; CHECK-NEON-NEXT: fmov x7, d18
-; CHECK-NEON-NEXT: fmov x21, d19
-; CHECK-NEON-NEXT: fmov x20, d5
-; CHECK-NEON-NEXT: mov x0, v7.d[1]
-; CHECK-NEON-NEXT: mov x4, v16.d[1]
-; CHECK-NEON-NEXT: mul x9, x1, x10
+; CHECK-NEON-NEXT: fmov x14, d17
+; CHECK-NEON-NEXT: fmov x6, d18
+; CHECK-NEON-NEXT: fmov x20, d19
+; CHECK-NEON-NEXT: mov x12, v6.d[1]
; CHECK-NEON-NEXT: mov x17, v17.d[1]
-; CHECK-NEON-NEXT: mov x14, v18.d[1]
-; CHECK-NEON-NEXT: mov x6, v19.d[1]
-; CHECK-NEON-NEXT: mov x23, v4.d[1]
+; CHECK-NEON-NEXT: mov x16, v18.d[1]
+; CHECK-NEON-NEXT: mul x9, x3, x10
+; CHECK-NEON-NEXT: mov x25, v19.d[1]
+; CHECK-NEON-NEXT: fmov x29, d4
+; CHECK-NEON-NEXT: fmov x19, d5
+; CHECK-NEON-NEXT: mov x1, v7.d[1]
+; CHECK-NEON-NEXT: mov x4, v16.d[1]
+; CHECK-NEON-NEXT: mul x8, x14, x15
+; CHECK-NEON-NEXT: mov x21, v4.d[1]
; CHECK-NEON-NEXT: mov x11, v5.d[1]
-; CHECK-NEON-NEXT: mul x8, x12, x15
-; CHECK-NEON-NEXT: mul x16, x21, x7
-; CHECK-NEON-NEXT: mul x25, x1, x7
+; CHECK-NEON-NEXT: mul x13, x20, x6
+; CHECK-NEON-NEXT: mul x23, x14, x10
; CHECK-NEON-NEXT: stp x8, x9, [sp] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: fmov x8, d4
-; CHECK-NEON-NEXT: mov x9, v6.d[1]
-; CHECK-NEON-NEXT: mul x13, x1, x15
+; CHECK-NEON-NEXT: mul x8, x25, x16
; CHECK-NEON-NEXT: ldp d5, d4, [sp] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: fmov d6, x16
-; CHECK-NEON-NEXT: mul x18, x20, x8
-; CHECK-NEON-NEXT: fmov d16, x25
-; CHECK-NEON-NEXT: mul x29, x21, x8
-; CHECK-NEON-NEXT: fmov d20, x13
-; CHECK-NEON-NEXT: mul x1, x1, x8
+; CHECK-NEON-NEXT: fmov d6, x13
+; CHECK-NEON-NEXT: mul x9, x17, x12
+; CHECK-NEON-NEXT: fmov d17, x23
+; CHECK-NEON-NEXT: mul x18, x19, x29
+; CHECK-NEON-NEXT: mov v6.d[1], x8
+; CHECK-NEON-NEXT: mul x22, x3, x6
+; CHECK-NEON-NEXT: mov v17.d[1], x9
+; CHECK-NEON-NEXT: mul x27, x20, x29
; CHECK-NEON-NEXT: fmov d7, x18
-; CHECK-NEON-NEXT: mul x8, x12, x8
-; CHECK-NEON-NEXT: fmov d18, x29
-; CHECK-NEON-NEXT: mul x26, x12, x10
-; CHECK-NEON-NEXT: fmov d24, x1
-; CHECK-NEON-NEXT: mul x30, x20, x15
-; CHECK-NEON-NEXT: fmov d21, x8
-; CHECK-NEON-NEXT: mul x15, x21, x15
-; CHECK-NEON-NEXT: fmov d17, x26
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x21, x21, x10
-; CHECK-NEON-NEXT: fmov d19, x30
+; CHECK-NEON-NEXT: mul x28, x19, x15
+; CHECK-NEON-NEXT: fmov d16, x22
+; CHECK-NEON-NEXT: mul x30, x3, x15
+; CHECK-NEON-NEXT: fmov d18, x27
+; CHECK-NEON-NEXT: mul x3, x3, x29
+; CHECK-NEON-NEXT: fmov d19, x28
+; CHECK-NEON-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x29, x14, x29
+; CHECK-NEON-NEXT: fmov d20, x30
+; CHECK-NEON-NEXT: mul x15, x20, x15
+; CHECK-NEON-NEXT: fmov d24, x3
+; CHECK-NEON-NEXT: mul x20, x20, x10
+; CHECK-NEON-NEXT: fmov d21, x29
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x12, x12, x7
+; CHECK-NEON-NEXT: mul x14, x14, x6
; CHECK-NEON-NEXT: fmov d26, x15
-; CHECK-NEON-NEXT: mul x7, x20, x7
-; CHECK-NEON-NEXT: fmov d22, x21
-; CHECK-NEON-NEXT: mul x10, x20, x10
-; CHECK-NEON-NEXT: fmov d25, x12
-; CHECK-NEON-NEXT: mul x5, x0, x9
-; CHECK-NEON-NEXT: fmov d23, x7
-; CHECK-NEON-NEXT: mul x19, x17, x4
+; CHECK-NEON-NEXT: mul x6, x19, x6
+; CHECK-NEON-NEXT: fmov d22, x20
+; CHECK-NEON-NEXT: mul x10, x19, x10
+; CHECK-NEON-NEXT: fmov d25, x14
+; CHECK-NEON-NEXT: mul x2, x1, x12
+; CHECK-NEON-NEXT: fmov d23, x6
+; CHECK-NEON-NEXT: mul x5, x17, x4
; CHECK-NEON-NEXT: fmov d27, x10
-; CHECK-NEON-NEXT: mul x2, x6, x14
-; CHECK-NEON-NEXT: mov v4.d[1], x5
-; CHECK-NEON-NEXT: mul x3, x11, x23
-; CHECK-NEON-NEXT: mov v5.d[1], x19
-; CHECK-NEON-NEXT: mul x22, x0, x14
-; CHECK-NEON-NEXT: mov v6.d[1], x2
-; CHECK-NEON-NEXT: mul x24, x17, x9
-; CHECK-NEON-NEXT: mov v7.d[1], x3
+; CHECK-NEON-NEXT: mul x0, x11, x21
+; CHECK-NEON-NEXT: mov v4.d[1], x2
+; CHECK-NEON-NEXT: mul x7, x1, x16
+; CHECK-NEON-NEXT: mov v5.d[1], x5
+; CHECK-NEON-NEXT: mul x24, x25, x21
+; CHECK-NEON-NEXT: mov v7.d[1], x0
+; CHECK-NEON-NEXT: mul x26, x11, x4
+; CHECK-NEON-NEXT: mov v16.d[1], x7
; CHECK-NEON-NEXT: eor v4.16b, v5.16b, v4.16b
-; CHECK-NEON-NEXT: mul x27, x6, x23
-; CHECK-NEON-NEXT: mov v16.d[1], x22
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x28, x11, x4
-; CHECK-NEON-NEXT: mov v17.d[1], x24
+; CHECK-NEON-NEXT: mul x19, x1, x4
+; CHECK-NEON-NEXT: mov v18.d[1], x24
; CHECK-NEON-NEXT: eor v5.16b, v6.16b, v7.16b
-; CHECK-NEON-NEXT: mul x20, x0, x4
-; CHECK-NEON-NEXT: mov v18.d[1], x27
-; CHECK-NEON-NEXT: mul x0, x0, x23
-; CHECK-NEON-NEXT: eor v4.16b, v4.16b, v5.16b
-; CHECK-NEON-NEXT: mov v19.d[1], x28
+; CHECK-NEON-NEXT: mul x1, x1, x21
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mov v19.d[1], x26
; CHECK-NEON-NEXT: eor v6.16b, v17.16b, v16.16b
-; CHECK-NEON-NEXT: mul x23, x17, x23
-; CHECK-NEON-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v20.d[1], x20
-; CHECK-NEON-NEXT: and v1.16b, v4.16b, v1.16b
-; CHECK-NEON-NEXT: mul x4, x6, x4
+; CHECK-NEON-NEXT: mul x21, x17, x21
+; CHECK-NEON-NEXT: eor v4.16b, v4.16b, v5.16b
+; CHECK-NEON-NEXT: mov v20.d[1], x19
; CHECK-NEON-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mov v24.d[1], x0
+; CHECK-NEON-NEXT: mul x4, x25, x4
+; CHECK-NEON-NEXT: mov v24.d[1], x1
; CHECK-NEON-NEXT: eor v7.16b, v18.16b, v19.16b
-; CHECK-NEON-NEXT: mul x6, x6, x9
-; CHECK-NEON-NEXT: mov v21.d[1], x23
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x16, x17, x14
+; CHECK-NEON-NEXT: and v1.16b, v4.16b, v1.16b
+; CHECK-NEON-NEXT: mul x25, x25, x12
+; CHECK-NEON-NEXT: mov v21.d[1], x21
+; CHECK-NEON-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x13, x17, x16
; CHECK-NEON-NEXT: eor v5.16b, v6.16b, v7.16b
; CHECK-NEON-NEXT: mov v26.d[1], x4
-; CHECK-NEON-NEXT: mul x14, x11, x14
-; CHECK-NEON-NEXT: mov v22.d[1], x6
+; CHECK-NEON-NEXT: mul x8, x11, x16
+; CHECK-NEON-NEXT: mov v22.d[1], x25
; CHECK-NEON-NEXT: eor v16.16b, v21.16b, v20.16b
; CHECK-NEON-NEXT: and v0.16b, v5.16b, v0.16b
-; CHECK-NEON-NEXT: mul x8, x11, x9
-; CHECK-NEON-NEXT: mov v25.d[1], x16
+; CHECK-NEON-NEXT: mul x9, x11, x12
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mov v25.d[1], x13
; CHECK-NEON-NEXT: orr v0.16b, v0.16b, v1.16b
-; CHECK-NEON-NEXT: mov v23.d[1], x14
-; CHECK-NEON-NEXT: mov v27.d[1], x8
+; CHECK-NEON-NEXT: mov v23.d[1], x8
+; CHECK-NEON-NEXT: mov v27.d[1], x9
; CHECK-NEON-NEXT: eor v18.16b, v25.16b, v24.16b
; CHECK-NEON-NEXT: eor v17.16b, v22.16b, v23.16b
; CHECK-NEON-NEXT: eor v19.16b, v26.16b, v27.16b
diff --git a/llvm/test/CodeGen/AArch64/clmul.ll b/llvm/test/CodeGen/AArch64/clmul.ll
index 48cfae3eaef0d..20f03ff4a08d5 100644
--- a/llvm/test/CodeGen/AArch64/clmul.ll
+++ b/llvm/test/CodeGen/AArch64/clmul.ll
@@ -918,60 +918,54 @@ define i128 @clmul_i128(i128 %x, i128 %y) {
; CHECK-NEON-NEXT: .cfi_offset w28, -80
; CHECK-NEON-NEXT: .cfi_offset w30, -88
; CHECK-NEON-NEXT: .cfi_offset w29, -96
+; CHECK-NEON-NEXT: mov x9, x3
+; CHECK-NEON-NEXT: and x3, x2, #0x1111111111111111
+; CHECK-NEON-NEXT: and x20, x1, #0x2222222222222222
; CHECK-NEON-NEXT: and x10, x2, #0x2222222222222222
; CHECK-NEON-NEXT: and x12, x1, #0x1111111111111111
-; CHECK-NEON-NEXT: and x11, x2, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x8, x12, x10
-; CHECK-NEON-NEXT: and x5, x1, #0x4444444444444444
-; CHECK-NEON-NEXT: and x21, x1, #0x2222222222222222
-; CHECK-NEON-NEXT: and x6, x2, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x11, x20, x3
; CHECK-NEON-NEXT: rbit x13, x0
-; CHECK-NEON-NEXT: and x29, x0, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x14, x21, x10
+; CHECK-NEON-NEXT: and x30, x0, #0x2222222222222222
+; CHECK-NEON-NEXT: and x19, x9, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x8, x12, x10
; CHECK-NEON-NEXT: and x15, x13, #0x2222222222222222
; CHECK-NEON-NEXT: and x17, x13, #0x1111111111111111
; CHECK-NEON-NEXT: and x4, x13, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x14, x20, x10
; CHECK-NEON-NEXT: and x13, x13, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x26, x12, x11
-; CHECK-NEON-NEXT: str x8, [sp, #248] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x5, x11
+; CHECK-NEON-NEXT: mul x24, x30, x19
+; CHECK-NEON-NEXT: stp x8, x11, [sp, #240] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: and x11, x2, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x8, x20, x11
; CHECK-NEON-NEXT: str x14, [sp, #88] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x9, x21, x6
-; CHECK-NEON-NEXT: mul x20, x5, x6
-; CHECK-NEON-NEXT: str x8, [sp, #240] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x21, x11
-; CHECK-NEON-NEXT: mul x22, x5, x10
+; CHECK-NEON-NEXT: mul x27, x12, x11
; CHECK-NEON-NEXT: str x8, [sp, #232] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x12, x6
+; CHECK-NEON-NEXT: mul x8, x12, x3
; CHECK-NEON-NEXT: str x8, [sp, #224] // 8-byte Spill
; CHECK-NEON-NEXT: rbit x8, x2
; CHECK-NEON-NEXT: and x14, x8, #0x1111111111111111
+; CHECK-NEON-NEXT: and x18, x8, #0x8888888888888888
; CHECK-NEON-NEXT: mul x16, x15, x14
+; CHECK-NEON-NEXT: mul x5, x4, x18
; CHECK-NEON-NEXT: str x16, [sp, #216] // 8-byte Spill
; CHECK-NEON-NEXT: and x16, x8, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x18, x17, x16
-; CHECK-NEON-NEXT: str x18, [sp, #208] // 8-byte Spill
-; CHECK-NEON-NEXT: and x18, x8, #0x8888888888888888
; CHECK-NEON-NEXT: and x8, x8, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x7, x4, x18
-; CHECK-NEON-NEXT: str x7, [sp, #200] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x13, x8
-; CHECK-NEON-NEXT: str x7, [sp, #192] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x15, x18
-; CHECK-NEON-NEXT: str x7, [sp, #184] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x17, x14
-; CHECK-NEON-NEXT: str x7, [sp, #176] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x4, x8
-; CHECK-NEON-NEXT: str x7, [sp, #168] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x13, x16
-; CHECK-NEON-NEXT: str x7, [sp, #160] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x7, x15, x16
+; CHECK-NEON-NEXT: mul x6, x17, x16
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #200] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x6, x13, x8
+; CHECK-NEON-NEXT: mul x5, x15, x18
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #184] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x6, x17, x14
+; CHECK-NEON-NEXT: mul x5, x4, x8
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #168] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x5, x15, x16
; CHECK-NEON-NEXT: mul x15, x15, x8
; CHECK-NEON-NEXT: mul x8, x17, x8
-; CHECK-NEON-NEXT: stp x15, x7, [sp, #144] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x6, x13, x16
; CHECK-NEON-NEXT: str x8, [sp, #128] // 8-byte Spill
; CHECK-NEON-NEXT: mul x8, x4, x16
-; CHECK-NEON-NEXT: str x8, [sp, #136] // 8-byte Spill
+; CHECK-NEON-NEXT: stp x5, x6, [sp, #152] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: stp x8, x15, [sp, #136] // 16-byte Folded Spill
; CHECK-NEON-NEXT: mul x8, x4, x14
; CHECK-NEON-NEXT: str x8, [sp, #104] // 8-byte Spill
; CHECK-NEON-NEXT: mul x8, x17, x18
@@ -982,144 +976,145 @@ define i128 @clmul_i128(i128 %x, i128 %y) {
; CHECK-NEON-NEXT: str x8, [sp, #112] // 8-byte Spill
; CHECK-NEON-NEXT: and x8, x2, #0x4444444444444444
; CHECK-NEON-NEXT: and x2, x0, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x24, x12, x8
+; CHECK-NEON-NEXT: mul x25, x12, x8
+; CHECK-NEON-NEXT: and x12, x1, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x18, x12, x11
+; CHECK-NEON-NEXT: mul x6, x12, x8
+; CHECK-NEON-NEXT: mul x22, x12, x3
+; CHECK-NEON-NEXT: mul x23, x12, x10
; CHECK-NEON-NEXT: and x12, x1, #0x8888888888888888
; CHECK-NEON-NEXT: and x1, x0, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x27, x21, x8
-; CHECK-NEON-NEXT: and x21, x0, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x29, x20, x8
+; CHECK-NEON-NEXT: and x20, x0, #0x4444444444444444
; CHECK-NEON-NEXT: mul x14, x12, x8
; CHECK-NEON-NEXT: mul x15, x12, x10
-; CHECK-NEON-NEXT: mul x18, x12, x11
-; CHECK-NEON-NEXT: mul x4, x12, x6
-; CHECK-NEON-NEXT: and x12, x3, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x30, x1, x12
-; CHECK-NEON-NEXT: eor x18, x20, x18
-; CHECK-NEON-NEXT: eor x20, x26, x27
-; CHECK-NEON-NEXT: mul x28, x21, x12
+; CHECK-NEON-NEXT: mul x4, x12, x11
+; CHECK-NEON-NEXT: eor x18, x18, x14
+; CHECK-NEON-NEXT: mul x5, x12, x3
+; CHECK-NEON-NEXT: and x12, x9, #0x4444444444444444
+; CHECK-NEON-NEXT: eor x15, x6, x15
+; CHECK-NEON-NEXT: mul x28, x1, x12
; CHECK-NEON-NEXT: eor x4, x22, x4
+; CHECK-NEON-NEXT: eor x22, x27, x29
+; CHECK-NEON-NEXT: mul x26, x20, x12
+; CHECK-NEON-NEXT: eor x5, x23, x5
; CHECK-NEON-NEXT: mul x13, x2, x12
-; CHECK-NEON-NEXT: mul x12, x29, x12
-; CHECK-NEON-NEXT: mul x19, x5, x8
-; CHECK-NEON-NEXT: and x5, x3, #0x2222222222222222
-; CHECK-NEON-NEXT: mul x16, x2, x5
+; CHECK-NEON-NEXT: mul x12, x30, x12
+; CHECK-NEON-NEXT: mul x16, x2, x19
+; CHECK-NEON-NEXT: mul x17, x1, x19
; CHECK-NEON-NEXT: stp x13, x12, [sp, #48] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: and x12, x3, #0x8888888888888888
-; CHECK-NEON-NEXT: and x3, x3, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x0, x21, x12
-; CHECK-NEON-NEXT: eor x15, x19, x15
-; CHECK-NEON-NEXT: mul x7, x29, x12
+; CHECK-NEON-NEXT: and x12, x9, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x0, x20, x12
+; CHECK-NEON-NEXT: mul x7, x30, x12
+; CHECK-NEON-NEXT: eor x17, x26, x17
; CHECK-NEON-NEXT: mul x13, x1, x12
; CHECK-NEON-NEXT: mul x12, x2, x12
-; CHECK-NEON-NEXT: mul x17, x1, x5
-; CHECK-NEON-NEXT: mul x25, x29, x5
+; CHECK-NEON-NEXT: mul x14, x1, x8
; CHECK-NEON-NEXT: str x12, [sp, #40] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x12, x21, x5
-; CHECK-NEON-NEXT: eor x17, x28, x17
-; CHECK-NEON-NEXT: ldp x28, x27, [sp, #272] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x5, x21, x3
-; CHECK-NEON-NEXT: mul x23, x1, x3
+; CHECK-NEON-NEXT: mul x12, x20, x19
+; CHECK-NEON-NEXT: and x19, x9, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x9, x30, x3
+; CHECK-NEON-NEXT: mul x21, x20, x19
; CHECK-NEON-NEXT: stp x12, x13, [sp, #16] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: mul x12, x29, x3
-; CHECK-NEON-NEXT: mul x13, x2, x3
-; CHECK-NEON-NEXT: mul x3, x29, x6
+; CHECK-NEON-NEXT: mul x12, x30, x19
+; CHECK-NEON-NEXT: str x9, [sp, #80] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x9, x30, x11
+; CHECK-NEON-NEXT: mul x13, x2, x19
; CHECK-NEON-NEXT: eor x12, x16, x12
-; CHECK-NEON-NEXT: eor x16, x0, x30
+; CHECK-NEON-NEXT: eor x16, x0, x28
+; CHECK-NEON-NEXT: mul x19, x1, x19
; CHECK-NEON-NEXT: eor x12, x12, x16
-; CHECK-NEON-NEXT: mul x0, x1, x10
-; CHECK-NEON-NEXT: eor x13, x13, x7
+; CHECK-NEON-NEXT: str x9, [sp, #72] // 8-byte Spill
; CHECK-NEON-NEXT: and x12, x12, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x9, x30, x10
+; CHECK-NEON-NEXT: ldp x28, x27, [sp, #272] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x13, x13, x7
; CHECK-NEON-NEXT: eor x13, x13, x17
-; CHECK-NEON-NEXT: str x3, [sp, #80] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x3, x29, x11
+; CHECK-NEON-NEXT: mul x0, x1, x10
; CHECK-NEON-NEXT: and x13, x13, #0x1111111111111111
; CHECK-NEON-NEXT: orr x12, x13, x12
; CHECK-NEON-NEXT: ldp x17, x13, [sp, #40] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x13, x13, x25
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #288] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: str x3, [sp, #72] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x3, x29, x10
-; CHECK-NEON-NEXT: str x3, [sp, #64] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x3, x29, x8
-; CHECK-NEON-NEXT: str x3, [sp, #32] // 8-byte Spill
-; CHECK-NEON-NEXT: ldr x3, [sp, #248] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x3, x3, x9
-; CHECK-NEON-NEXT: ldr x9, [sp, #240] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x9, x9, x14
-; CHECK-NEON-NEXT: mul x14, x1, x8
-; CHECK-NEON-NEXT: eor x9, x3, x9
-; CHECK-NEON-NEXT: ldp x29, x3, [sp, #224] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: str x9, [sp, #64] // 8-byte Spill
+; CHECK-NEON-NEXT: mul x9, x30, x8
+; CHECK-NEON-NEXT: eor x13, x13, x24
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #304] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: str x9, [sp, #32] // 8-byte Spill
+; CHECK-NEON-NEXT: ldp x30, x9, [sp, #240] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x9, x30, x9
+; CHECK-NEON-NEXT: eor x9, x9, x18
+; CHECK-NEON-NEXT: ldp x30, x18, [sp, #224] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x9, x9, #0x2222222222222222
-; CHECK-NEON-NEXT: eor x3, x29, x3
+; CHECK-NEON-NEXT: eor x18, x30, x18
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #256] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x3, x3, x15
+; CHECK-NEON-NEXT: eor x18, x18, x15
; CHECK-NEON-NEXT: ldr x15, [sp, #88] // 8-byte Reload
-; CHECK-NEON-NEXT: and x3, x3, #0x1111111111111111
-; CHECK-NEON-NEXT: eor x19, x24, x15
-; CHECK-NEON-NEXT: orr x9, x3, x9
-; CHECK-NEON-NEXT: eor x3, x20, x4
-; CHECK-NEON-NEXT: eor x18, x19, x18
-; CHECK-NEON-NEXT: and x3, x3, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x15, x21, x8
+; CHECK-NEON-NEXT: and x18, x18, #0x1111111111111111
+; CHECK-NEON-NEXT: eor x6, x25, x15
+; CHECK-NEON-NEXT: orr x9, x18, x9
+; CHECK-NEON-NEXT: mul x15, x20, x8
+; CHECK-NEON-NEXT: eor x18, x6, x4
+; CHECK-NEON-NEXT: eor x4, x22, x5
; CHECK-NEON-NEXT: and x18, x18, #0x4444444444444444
-; CHECK-NEON-NEXT: orr x18, x18, x3
-; CHECK-NEON-NEXT: mul x4, x2, x10
+; CHECK-NEON-NEXT: and x4, x4, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x5, x2, x10
+; CHECK-NEON-NEXT: orr x18, x18, x4
+; CHECK-NEON-NEXT: ldp x6, x4, [sp, #208] // 16-byte Folded Reload
; CHECK-NEON-NEXT: orr x9, x9, x18
; CHECK-NEON-NEXT: ldp x18, x16, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x10, x21, x10
-; CHECK-NEON-NEXT: eor x16, x5, x16
-; CHECK-NEON-NEXT: ldp x5, x3, [sp, #208] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x10, x20, x10
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #288] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x4, x6, x4
+; CHECK-NEON-NEXT: ldp x7, x6, [sp, #192] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x18, x18, x19
+; CHECK-NEON-NEXT: eor x16, x21, x16
+; CHECK-NEON-NEXT: mul x8, x2, x8
; CHECK-NEON-NEXT: eor x13, x13, x16
; CHECK-NEON-NEXT: ldr x16, [sp, #56] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x18, x18, x23
-; CHECK-NEON-NEXT: and x13, x13, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x8, x2, x8
-; CHECK-NEON-NEXT: eor x3, x5, x3
-; CHECK-NEON-NEXT: ldp x7, x5, [sp, #192] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x6, x6, x7
+; CHECK-NEON-NEXT: ldp x19, x7, [sp, #176] // 16-byte Folded Reload
; CHECK-NEON-NEXT: eor x16, x17, x16
-; CHECK-NEON-NEXT: mul x17, x21, x11
+; CHECK-NEON-NEXT: mul x17, x20, x11
+; CHECK-NEON-NEXT: and x13, x13, #0x4444444444444444
; CHECK-NEON-NEXT: eor x16, x16, x18
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #304] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x5, x5, x7
-; CHECK-NEON-NEXT: ldp x19, x7, [sp, #176] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x18, x3, x5
-; CHECK-NEON-NEXT: ldr x5, [sp, #152] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x18, x4, x6
+; CHECK-NEON-NEXT: ldr x6, [sp, #152] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x7, x19, x7
+; CHECK-NEON-NEXT: ldp x21, x19, [sp, #160] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x16, x16, #0x8888888888888888
; CHECK-NEON-NEXT: and x18, x18, #0x2222222222222222
; CHECK-NEON-NEXT: orr x13, x13, x16
-; CHECK-NEON-NEXT: eor x7, x19, x7
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #160] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x19, x19, x21
; CHECK-NEON-NEXT: orr x12, x12, x13
; CHECK-NEON-NEXT: eor x14, x17, x14
-; CHECK-NEON-NEXT: eor x9, x12, x9
-; CHECK-NEON-NEXT: eor x19, x19, x20
-; CHECK-NEON-NEXT: mul x20, x2, x6
-; CHECK-NEON-NEXT: eor x3, x7, x19
+; CHECK-NEON-NEXT: eor x4, x7, x19
; CHECK-NEON-NEXT: ldr x7, [sp, #128] // 8-byte Reload
-; CHECK-NEON-NEXT: and x3, x3, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x2, x2, x11
-; CHECK-NEON-NEXT: eor x5, x7, x5
+; CHECK-NEON-NEXT: eor x9, x12, x9
+; CHECK-NEON-NEXT: and x4, x4, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x21, x2, x3
+; CHECK-NEON-NEXT: eor x6, x7, x6
; CHECK-NEON-NEXT: ldp x19, x7, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: orr x16, x3, x18
-; CHECK-NEON-NEXT: mul x11, x1, x11
+; CHECK-NEON-NEXT: orr x16, x4, x18
+; CHECK-NEON-NEXT: mul x2, x2, x11
; CHECK-NEON-NEXT: eor x7, x7, x19
-; CHECK-NEON-NEXT: mul x19, x21, x6
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #112] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x5, x5, x7
+; CHECK-NEON-NEXT: mul x19, x20, x3
+; CHECK-NEON-NEXT: ldp x22, x20, [sp, #112] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x6, x6, x7
; CHECK-NEON-NEXT: ldr x7, [sp, #144] // 8-byte Reload
-; CHECK-NEON-NEXT: and x5, x5, #0x4444444444444444
-; CHECK-NEON-NEXT: eor x7, x21, x7
-; CHECK-NEON-NEXT: ldr x21, [sp, #136] // 8-byte Reload
+; CHECK-NEON-NEXT: and x6, x6, #0x4444444444444444
+; CHECK-NEON-NEXT: mul x11, x1, x11
+; CHECK-NEON-NEXT: eor x7, x20, x7
+; CHECK-NEON-NEXT: ldr x20, [sp, #136] // 8-byte Reload
+; CHECK-NEON-NEXT: eor x20, x20, x22
+; CHECK-NEON-NEXT: eor x7, x7, x20
; CHECK-NEON-NEXT: eor x11, x19, x11
-; CHECK-NEON-NEXT: eor x21, x21, x22
-; CHECK-NEON-NEXT: eor x7, x7, x21
-; CHECK-NEON-NEXT: ldp x22, x21, [sp, #320] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x7, x7, #0x8888888888888888
-; CHECK-NEON-NEXT: orr x18, x5, x7
+; CHECK-NEON-NEXT: ldp x20, x19, [sp, #336] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: orr x18, x6, x7
; CHECK-NEON-NEXT: orr x13, x16, x18
; CHECK-NEON-NEXT: ldr x18, [sp, #80] // 8-byte Reload
-; CHECK-NEON-NEXT: mul x16, x1, x6
+; CHECK-NEON-NEXT: mul x16, x1, x3
; CHECK-NEON-NEXT: rbit x13, x13
-; CHECK-NEON-NEXT: eor x18, x4, x18
+; CHECK-NEON-NEXT: eor x18, x5, x18
; CHECK-NEON-NEXT: eor x12, x18, x14
; CHECK-NEON-NEXT: eor x1, x9, x13, lsr #1
; CHECK-NEON-NEXT: eor x13, x15, x0
@@ -1128,14 +1123,14 @@ define i128 @clmul_i128(i128 %x, i128 %y) {
; CHECK-NEON-NEXT: eor x10, x10, x16
; CHECK-NEON-NEXT: eor x8, x8, x14
; CHECK-NEON-NEXT: ldr x14, [sp, #32] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x12, x20, x12
+; CHECK-NEON-NEXT: eor x12, x21, x12
; CHECK-NEON-NEXT: eor x12, x12, x13
; CHECK-NEON-NEXT: eor x8, x8, x11
; CHECK-NEON-NEXT: eor x14, x2, x14
; CHECK-NEON-NEXT: and x11, x12, #0x1111111111111111
; CHECK-NEON-NEXT: and x8, x8, #0x4444444444444444
; CHECK-NEON-NEXT: eor x10, x14, x10
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #336] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: ldp x22, x21, [sp, #320] // 16-byte Folded Reload
; CHECK-NEON-NEXT: and x10, x10, #0x8888888888888888
; CHECK-NEON-NEXT: orr x9, x11, x9
; CHECK-NEON-NEXT: orr x8, x8, x10
@@ -1368,108 +1363,107 @@ define i128 @clmul_i128_zext(i64 %x, i64 %y) {
; CHECK-NEON-NEXT: .cfi_offset w28, -80
; CHECK-NEON-NEXT: .cfi_offset w30, -88
; CHECK-NEON-NEXT: .cfi_offset w29, -96
-; CHECK-NEON-NEXT: and x12, x1, #0x1111111111111111
-; CHECK-NEON-NEXT: and x13, x0, #0x2222222222222222
-; CHECK-NEON-NEXT: and x14, x1, #0x2222222222222222
+; CHECK-NEON-NEXT: and x17, x1, #0x1111111111111111
+; CHECK-NEON-NEXT: and x15, x0, #0x2222222222222222
+; CHECK-NEON-NEXT: and x13, x1, #0x2222222222222222
; CHECK-NEON-NEXT: and x11, x0, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x8, x13, x12
-; CHECK-NEON-NEXT: and x10, x1, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x9, x15, x17
+; CHECK-NEON-NEXT: and x12, x1, #0x8888888888888888
; CHECK-NEON-NEXT: and x16, x0, #0x4444444444444444
-; CHECK-NEON-NEXT: and x2, x1, #0x4444444444444444
+; CHECK-NEON-NEXT: and x3, x1, #0x4444444444444444
+; CHECK-NEON-NEXT: and x14, x0, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x8, x11, x13
; CHECK-NEON-NEXT: rbit x1, x1
-; CHECK-NEON-NEXT: mul x9, x11, x14
-; CHECK-NEON-NEXT: and x7, x1, #0x1111111111111111
-; CHECK-NEON-NEXT: and x21, x1, #0x2222222222222222
-; CHECK-NEON-NEXT: and x24, x1, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x4, x11, x12
-; CHECK-NEON-NEXT: and x1, x1, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x5, x16, x2
-; CHECK-NEON-NEXT: stp x8, x9, [sp, #32] // 16-byte Folded Spill
-; CHECK-NEON-NEXT: and x9, x0, #0x8888888888888888
; CHECK-NEON-NEXT: rbit x0, x0
-; CHECK-NEON-NEXT: mul x8, x16, x10
-; CHECK-NEON-NEXT: and x19, x0, #0x2222222222222222
-; CHECK-NEON-NEXT: and x22, x0, #0x1111111111111111
-; CHECK-NEON-NEXT: and x25, x0, #0x4444444444444444
-; CHECK-NEON-NEXT: mul x6, x9, x14
+; CHECK-NEON-NEXT: and x5, x1, #0x1111111111111111
+; CHECK-NEON-NEXT: and x6, x0, #0x2222222222222222
+; CHECK-NEON-NEXT: and x19, x1, #0x2222222222222222
+; CHECK-NEON-NEXT: and x20, x0, #0x1111111111111111
+; CHECK-NEON-NEXT: and x22, x1, #0x8888888888888888
+; CHECK-NEON-NEXT: and x23, x0, #0x4444444444444444
+; CHECK-NEON-NEXT: and x1, x1, #0x4444444444444444
; CHECK-NEON-NEXT: and x0, x0, #0x8888888888888888
-; CHECK-NEON-NEXT: mul x28, x19, x24
-; CHECK-NEON-NEXT: str x8, [sp, #24] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x9, x2
-; CHECK-NEON-NEXT: mul x29, x22, x7
-; CHECK-NEON-NEXT: mul x30, x25, x1
-; CHECK-NEON-NEXT: str x8, [sp, #16] // 8-byte Spill
-; CHECK-NEON-NEXT: mul x8, x13, x10
-; CHECK-NEON-NEXT: mul x17, x0, x21
-; CHECK-NEON-NEXT: mul x20, x19, x7
+; CHECK-NEON-NEXT: mul x4, x16, x3
+; CHECK-NEON-NEXT: stp x9, x8, [sp, #32] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x9, x16, x12
+; CHECK-NEON-NEXT: ldp x18, x10, [sp, #32] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x8, x14, x3
+; CHECK-NEON-NEXT: eor x10, x10, x18
+; CHECK-NEON-NEXT: mul x7, x6, x5
+; CHECK-NEON-NEXT: mul x21, x20, x19
+; CHECK-NEON-NEXT: stp x8, x9, [sp, #16] // 16-byte Folded Spill
+; CHECK-NEON-NEXT: mul x8, x15, x12
+; CHECK-NEON-NEXT: ldp x2, x18, [sp, #16] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x24, x23, x22
+; CHECK-NEON-NEXT: eor x18, x18, x2
+; CHECK-NEON-NEXT: mul x25, x0, x1
+; CHECK-NEON-NEXT: eor x10, x10, x18
; CHECK-NEON-NEXT: str x8, [sp, #8] // 8-byte Spill
-; CHECK-NEON-NEXT: ldp x18, x8, [sp, #32] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x23, x22, x21
-; CHECK-NEON-NEXT: eor x17, x30, x17
-; CHECK-NEON-NEXT: eor x8, x8, x18
-; CHECK-NEON-NEXT: ldp x3, x18, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x26, x25, x24
-; CHECK-NEON-NEXT: mul x27, x0, x1
-; CHECK-NEON-NEXT: eor x18, x18, x3
-; CHECK-NEON-NEXT: ldr x3, [sp, #8] // 8-byte Reload
-; CHECK-NEON-NEXT: eor x8, x8, x18
-; CHECK-NEON-NEXT: mul x15, x19, x21
-; CHECK-NEON-NEXT: eor x3, x4, x3
-; CHECK-NEON-NEXT: eor x4, x5, x6
-; CHECK-NEON-NEXT: eor x18, x3, x4
-; CHECK-NEON-NEXT: eor x4, x29, x28
-; CHECK-NEON-NEXT: eor x5, x23, x20
-; CHECK-NEON-NEXT: mul x19, x19, x1
-; CHECK-NEON-NEXT: eor x17, x4, x17
-; CHECK-NEON-NEXT: and x8, x8, #0x2222222222222222
-; CHECK-NEON-NEXT: eor x6, x26, x27
-; CHECK-NEON-NEXT: and x17, x17, #0x1111111111111111
-; CHECK-NEON-NEXT: mul x1, x22, x1
-; CHECK-NEON-NEXT: eor x3, x5, x6
+; CHECK-NEON-NEXT: and x10, x10, #0x2222222222222222
+; CHECK-NEON-NEXT: mul x8, x11, x17
+; CHECK-NEON-NEXT: ldr x2, [sp, #8] // 8-byte Reload
+; CHECK-NEON-NEXT: mul x9, x14, x13
+; CHECK-NEON-NEXT: mul x26, x6, x22
+; CHECK-NEON-NEXT: eor x8, x8, x2
+; CHECK-NEON-NEXT: eor x2, x21, x7
+; CHECK-NEON-NEXT: mul x27, x20, x5
+; CHECK-NEON-NEXT: eor x9, x4, x9
+; CHECK-NEON-NEXT: eor x4, x24, x25
+; CHECK-NEON-NEXT: mul x28, x23, x1
+; CHECK-NEON-NEXT: eor x8, x8, x9
+; CHECK-NEON-NEXT: eor x9, x2, x4
+; CHECK-NEON-NEXT: and x9, x9, #0x2222222222222222
+; CHECK-NEON-NEXT: and x8, x8, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x29, x0, x19
+; CHECK-NEON-NEXT: orr x8, x8, x10
+; CHECK-NEON-NEXT: eor x18, x27, x26
+; CHECK-NEON-NEXT: ldp x26, x25, [sp, #80] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x30, x6, x19
+; CHECK-NEON-NEXT: mul x6, x6, x1
+; CHECK-NEON-NEXT: eor x2, x28, x29
; CHECK-NEON-NEXT: ldp x28, x27, [sp, #64] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x21, x25, x21
+; CHECK-NEON-NEXT: mul x1, x20, x1
+; CHECK-NEON-NEXT: eor x18, x18, x2
+; CHECK-NEON-NEXT: and x18, x18, #0x1111111111111111
+; CHECK-NEON-NEXT: mul x19, x23, x19
+; CHECK-NEON-NEXT: orr x9, x18, x9
+; CHECK-NEON-NEXT: mul x23, x23, x5
+; CHECK-NEON-NEXT: eor x1, x1, x30
; CHECK-NEON-NEXT: ldp x29, x30, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x25, x25, x7
-; CHECK-NEON-NEXT: eor x15, x1, x15
-; CHECK-NEON-NEXT: mul x22, x22, x24
-; CHECK-NEON-NEXT: mul x24, x0, x24
-; CHECK-NEON-NEXT: mul x0, x0, x7
-; CHECK-NEON-NEXT: eor x4, x22, x19
-; CHECK-NEON-NEXT: ldp x20, x19, [sp, #128] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x7, x13, x14
-; CHECK-NEON-NEXT: eor x1, x25, x24
-; CHECK-NEON-NEXT: ldp x24, x23, [sp, #96] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x13, x13, x2
-; CHECK-NEON-NEXT: ldp x26, x25, [sp, #80] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: eor x0, x21, x0
+; CHECK-NEON-NEXT: mul x20, x20, x22
+; CHECK-NEON-NEXT: mul x22, x0, x22
+; CHECK-NEON-NEXT: mul x0, x0, x5
+; CHECK-NEON-NEXT: eor x4, x20, x6
+; CHECK-NEON-NEXT: mul x5, x15, x13
+; CHECK-NEON-NEXT: eor x2, x23, x22
; CHECK-NEON-NEXT: ldp x22, x21, [sp, #112] // 16-byte Folded Reload
-; CHECK-NEON-NEXT: mul x2, x11, x2
-; CHECK-NEON-NEXT: mul x14, x16, x14
-; CHECK-NEON-NEXT: mul x16, x16, x12
-; CHECK-NEON-NEXT: mul x11, x11, x10
-; CHECK-NEON-NEXT: mul x10, x9, x10
-; CHECK-NEON-NEXT: mul x9, x9, x12
-; CHECK-NEON-NEXT: eor x12, x15, x1
-; CHECK-NEON-NEXT: eor x15, x4, x0
-; CHECK-NEON-NEXT: and x0, x3, #0x2222222222222222
-; CHECK-NEON-NEXT: and x12, x12, #0x4444444444444444
-; CHECK-NEON-NEXT: and x15, x15, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x15, x15, x3
+; CHECK-NEON-NEXT: ldp x24, x23, [sp, #96] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: eor x0, x19, x0
+; CHECK-NEON-NEXT: ldp x20, x19, [sp, #128] // 16-byte Folded Reload
+; CHECK-NEON-NEXT: mul x3, x11, x3
+; CHECK-NEON-NEXT: eor x0, x4, x0
+; CHECK-NEON-NEXT: and x0, x0, #0x8888888888888888
+; CHECK-NEON-NEXT: mul x13, x16, x13
+; CHECK-NEON-NEXT: mul x16, x16, x17
+; CHECK-NEON-NEXT: eor x18, x3, x5
+; CHECK-NEON-NEXT: mul x11, x11, x12
+; CHECK-NEON-NEXT: mul x12, x14, x12
+; CHECK-NEON-NEXT: mul x14, x14, x17
+; CHECK-NEON-NEXT: eor x17, x1, x2
+; CHECK-NEON-NEXT: and x17, x17, #0x4444444444444444
+; CHECK-NEON-NEXT: eor x11, x11, x15
; CHECK-NEON-NEXT: orr x17, x17, x0
-; CHECK-NEON-NEXT: orr x12, x12, x15
-; CHECK-NEON-NEXT: eor x15, x2, x7
-; CHECK-NEON-NEXT: eor x10, x16, x10
+; CHECK-NEON-NEXT: eor x12, x16, x12
+; CHECK-NEON-NEXT: orr x9, x9, x17
+; CHECK-NEON-NEXT: rbit x9, x9
+; CHECK-NEON-NEXT: eor x12, x18, x12
+; CHECK-NEON-NEXT: eor x13, x13, x14
+; CHECK-NEON-NEXT: and x12, x12, #0x4444444444444444
; CHECK-NEON-NEXT: eor x11, x11, x13
-; CHECK-NEON-NEXT: orr x12, x17, x12
-; CHECK-NEON-NEXT: eor x10, x15, x10
-; CHECK-NEON-NEXT: rbit x12, x12
-; CHECK-NEON-NEXT: and x13, x18, #0x1111111111111111
-; CHECK-NEON-NEXT: eor x9, x14, x9
-; CHECK-NEON-NEXT: and x10, x10, #0x4444444444444444
-; CHECK-NEON-NEXT: orr x8, x13, x8
-; CHECK-NEON-NEXT: eor x9, x11, x9
-; CHECK-NEON-NEXT: lsr x1, x12, #1
-; CHECK-NEON-NEXT: and x9, x9, #0x8888888888888888
-; CHECK-NEON-NEXT: orr x9, x10, x9
+; CHECK-NEON-NEXT: lsr x1, x9, #1
+; CHECK-NEON-NEXT: and x11, x11, #0x8888888888888888
+; CHECK-NEON-NEXT: orr x9, x12, x11
; CHECK-NEON-NEXT: orr x0, x8, x9
; CHECK-NEON-NEXT: add sp, sp, #144
; CHECK-NEON-NEXT: ret
diff --git a/llvm/test/CodeGen/AArch64/misched-reg-pressure-limits.mir b/llvm/test/CodeGen/AArch64/misched-reg-pressure-limits.mir
new file mode 100644
index 0000000000000..335d0b91f5ade
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/misched-reg-pressure-limits.mir
@@ -0,0 +1,36 @@
+# REQUIRES: asserts
+# RUN: llc -mtriple=aarch64 -run-pass=machine-scheduler \
+# RUN: -debug-only=machine-scheduler -o /dev/null %s 2>&1 | FileCheck %s
+
+# Exceed the GPR32 pressure limit so the scheduler prints the limit diagnostic.
+# CHECK: Max Pressure: GPR32=34
+# CHECK: GPR32 Limit 31 Actual 34
+
+---
+name: gpr_pressure
+tracksRegLiveness: true
+# Keep X29 (FP) allocatable by providing the known max call frame size.
+frameInfo:
+ maxCallFrameSize: 0
+body: |
+ bb.0:
+ %0:gpr32 = IMPLICIT_DEF implicit-def %1:gpr32
+ %2:gpr32 = IMPLICIT_DEF implicit-def %3:gpr32
+ %4:gpr32 = IMPLICIT_DEF implicit-def %5:gpr32
+ %6:gpr32 = IMPLICIT_DEF implicit-def %7:gpr32
+ %8:gpr32 = IMPLICIT_DEF implicit-def %9:gpr32
+ %10:gpr32 = IMPLICIT_DEF implicit-def %11:gpr32
+ %12:gpr32 = IMPLICIT_DEF implicit-def %13:gpr32
+ %14:gpr32 = IMPLICIT_DEF implicit-def %15:gpr32
+ %16:gpr32 = IMPLICIT_DEF implicit-def %17:gpr32
+ %18:gpr32 = IMPLICIT_DEF implicit-def %19:gpr32
+ %20:gpr32 = IMPLICIT_DEF implicit-def %21:gpr32
+ %22:gpr32 = IMPLICIT_DEF implicit-def %23:gpr32
+ %24:gpr32 = IMPLICIT_DEF implicit-def %25:gpr32
+ %26:gpr32 = IMPLICIT_DEF implicit-def %27:gpr32
+ %28:gpr32 = IMPLICIT_DEF implicit-def %29:gpr32
+ %30:gpr32 = IMPLICIT_DEF implicit-def %31:gpr32
+ %32:gpr32 = IMPLICIT_DEF implicit-def %33:gpr32
+ FAKE_USE %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18, %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30, %31, %32, %33
+ RET_ReallyLR
+...
diff --git a/llvm/test/CodeGen/AArch64/neon-dotreduce.ll b/llvm/test/CodeGen/AArch64/neon-dotreduce.ll
index e3e314eb9e977..f5312828cfd78 100644
--- a/llvm/test/CodeGen/AArch64/neon-dotreduce.ll
+++ b/llvm/test/CodeGen/AArch64/neon-dotreduce.ll
@@ -2358,220 +2358,219 @@ define i32 @test_udot_v25i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: mov b7, v2.b[4]
; CHECK-GI-NEXT: mov b16, v2.b[5]
; CHECK-GI-NEXT: mov b19, v2.b[8]
-; CHECK-GI-NEXT: mov b4, v2.b[1]
; CHECK-GI-NEXT: mov b5, v2.b[2]
; CHECK-GI-NEXT: mov b17, v2.b[6]
; CHECK-GI-NEXT: mov b18, v2.b[7]
-; CHECK-GI-NEXT: mov b20, v2.b[9]
; CHECK-GI-NEXT: mov b21, v2.b[10]
; CHECK-GI-NEXT: mov b22, v2.b[11]
-; CHECK-GI-NEXT: fmov w7, s2
-; CHECK-GI-NEXT: fmov w13, s6
+; CHECK-GI-NEXT: mov b23, v2.b[15]
+; CHECK-GI-NEXT: mov b3, v2.b[1]
+; CHECK-GI-NEXT: mov b20, v2.b[9]
+; CHECK-GI-NEXT: fmov w14, s6
; CHECK-GI-NEXT: mov b6, v2.b[12]
-; CHECK-GI-NEXT: fmov w2, s7
+; CHECK-GI-NEXT: fmov w10, s7
; CHECK-GI-NEXT: mov b7, v2.b[13]
; CHECK-GI-NEXT: fmov w11, s16
; CHECK-GI-NEXT: mov b16, v2.b[14]
-; CHECK-GI-NEXT: mov b23, v2.b[15]
-; CHECK-GI-NEXT: ldp q3, q2, [x0]
+; CHECK-GI-NEXT: fmov w19, s2
+; CHECK-GI-NEXT: ldp q4, q2, [x0]
; CHECK-GI-NEXT: fmov w26, s19
-; CHECK-GI-NEXT: fmov w19, s4
-; CHECK-GI-NEXT: stp s17, s18, [sp, #4] // 8-byte Folded Spill
-; CHECK-GI-NEXT: fmov w29, s5
-; CHECK-GI-NEXT: fmov w24, s20
-; CHECK-GI-NEXT: uxtb w8, w7
-; CHECK-GI-NEXT: mov b4, v3.b[2]
-; CHECK-GI-NEXT: mov b5, v3.b[1]
-; CHECK-GI-NEXT: uxtb w13, w13
+; CHECK-GI-NEXT: fmov w7, s5
+; CHECK-GI-NEXT: uxtb w14, w14
+; CHECK-GI-NEXT: fmov w9, s17
+; CHECK-GI-NEXT: fmov w2, s18
+; CHECK-GI-NEXT: uxtb w10, w10
+; CHECK-GI-NEXT: mov b5, v4.b[1]
; CHECK-GI-NEXT: mov b17, v1.b[1]
+; CHECK-GI-NEXT: uxtb w28, w19
; CHECK-GI-NEXT: fmov w22, s21
-; CHECK-GI-NEXT: uxtb w26, w26
; CHECK-GI-NEXT: mov b18, v1.b[2]
+; CHECK-GI-NEXT: uxtb w26, w26
; CHECK-GI-NEXT: fmov w18, s22
-; CHECK-GI-NEXT: uxtb w24, w24
; CHECK-GI-NEXT: mov b19, v1.b[3]
+; CHECK-GI-NEXT: uxtb w7, w7
; CHECK-GI-NEXT: fmov w16, s6
-; CHECK-GI-NEXT: uxtb w19, w19
; CHECK-GI-NEXT: mov b21, v1.b[4]
+; CHECK-GI-NEXT: uxtb w11, w11
; CHECK-GI-NEXT: fmov w15, s7
-; CHECK-GI-NEXT: uxtb w22, w22
; CHECK-GI-NEXT: mov b7, v1.b[5]
-; CHECK-GI-NEXT: mov b6, v3.b[3]
-; CHECK-GI-NEXT: uxtb w11, w11
+; CHECK-GI-NEXT: uxtb w22, w22
+; CHECK-GI-NEXT: fmov w13, s16
+; CHECK-GI-NEXT: mov b6, v4.b[3]
+; CHECK-GI-NEXT: uxtb w18, w18
; CHECK-GI-NEXT: fmov w12, s23
; CHECK-GI-NEXT: mov b22, v1.b[6]
+; CHECK-GI-NEXT: uxtb w16, w16
; CHECK-GI-NEXT: mov b23, v1.b[7]
-; CHECK-GI-NEXT: mov b20, v3.b[4]
-; CHECK-GI-NEXT: fmov w28, s4
-; CHECK-GI-NEXT: fmov s4, w26
-; CHECK-GI-NEXT: fmov w14, s16
+; CHECK-GI-NEXT: mov b16, v4.b[6]
+; CHECK-GI-NEXT: uxtb w9, w9
+; CHECK-GI-NEXT: fmov w25, s20
+; CHECK-GI-NEXT: fmov w6, s3
+; CHECK-GI-NEXT: mov b3, v4.b[2]
; CHECK-GI-NEXT: fmov w27, s17
-; CHECK-GI-NEXT: fmov w5, s18
; CHECK-GI-NEXT: uxtb w12, w12
+; CHECK-GI-NEXT: fmov w5, s18
+; CHECK-GI-NEXT: mov b20, v4.b[4]
; CHECK-GI-NEXT: fmov w4, s19
-; CHECK-GI-NEXT: mov b19, v3.b[5]
-; CHECK-GI-NEXT: uxtb w28, w28
+; CHECK-GI-NEXT: mov b19, v4.b[5]
+; CHECK-GI-NEXT: uxtb w25, w25
+; CHECK-GI-NEXT: uxtb w6, w6
; CHECK-GI-NEXT: fmov w3, s21
-; CHECK-GI-NEXT: mov b18, v3.b[6]
-; CHECK-GI-NEXT: uxtb w27, w27
-; CHECK-GI-NEXT: uxtb w5, w5
; CHECK-GI-NEXT: fmov w1, s7
-; CHECK-GI-NEXT: mov b16, v3.b[7]
+; CHECK-GI-NEXT: mov b18, v4.b[7]
; CHECK-GI-NEXT: fmov w0, s22
-; CHECK-GI-NEXT: mov b17, v3.b[8]
+; CHECK-GI-NEXT: mov b17, v4.b[8]
; CHECK-GI-NEXT: fmov w17, s23
-; CHECK-GI-NEXT: mov b7, v3.b[9]
-; CHECK-GI-NEXT: fmov w30, s5
-; CHECK-GI-NEXT: mov b5, v3.b[10]
-; CHECK-GI-NEXT: mov b21, v3.b[11]
-; CHECK-GI-NEXT: fmov w25, s6
-; CHECK-GI-NEXT: mov b6, v3.b[12]
-; CHECK-GI-NEXT: fmov w23, s20
-; CHECK-GI-NEXT: mov b20, v3.b[13]
-; CHECK-GI-NEXT: mov b22, v3.b[14]
-; CHECK-GI-NEXT: fmov w6, s3
-; CHECK-GI-NEXT: mov b23, v3.b[15]
-; CHECK-GI-NEXT: fmov s3, w8
-; CHECK-GI-NEXT: fmov w8, s1
-; CHECK-GI-NEXT: mov v4.h[1], w24
-; CHECK-GI-NEXT: fmov w21, s19
-; CHECK-GI-NEXT: mov b19, v2.b[1]
-; CHECK-GI-NEXT: fmov w9, s17
-; CHECK-GI-NEXT: fmov w24, s6
-; CHECK-GI-NEXT: fmov w7, s16
-; CHECK-GI-NEXT: mov b16, v2.b[2]
-; CHECK-GI-NEXT: uxtb w8, w8
-; CHECK-GI-NEXT: mov v3.h[1], w19
-; CHECK-GI-NEXT: uxtb w19, w29
-; CHECK-GI-NEXT: uxtb w9, w9
+; CHECK-GI-NEXT: mov b7, v4.b[9]
; CHECK-GI-NEXT: fmov w29, s5
-; CHECK-GI-NEXT: mov v4.h[2], w22
-; CHECK-GI-NEXT: uxtb w22, w6
-; CHECK-GI-NEXT: fmov s5, w8
-; CHECK-GI-NEXT: fmov w10, s7
-; CHECK-GI-NEXT: fmov s7, w9
-; CHECK-GI-NEXT: fmov w9, s16
-; CHECK-GI-NEXT: fmov w20, s18
+; CHECK-GI-NEXT: mov b5, v4.b[10]
+; CHECK-GI-NEXT: mov b22, v4.b[11]
+; CHECK-GI-NEXT: fmov w23, s6
+; CHECK-GI-NEXT: mov b6, v4.b[12]
+; CHECK-GI-NEXT: mov b23, v4.b[13]
+; CHECK-GI-NEXT: mov b21, v4.b[14]
+; CHECK-GI-NEXT: fmov w19, s16
+; CHECK-GI-NEXT: fmov w30, s4
; CHECK-GI-NEXT: uxtb w29, w29
-; CHECK-GI-NEXT: fmov s6, w22
-; CHECK-GI-NEXT: fmov w22, s2
-; CHECK-GI-NEXT: uxtb w10, w10
-; CHECK-GI-NEXT: mov v5.h[1], w27
-; CHECK-GI-NEXT: uxtb w27, w30
-; CHECK-GI-NEXT: uxtb w9, w9
+; CHECK-GI-NEXT: mov b16, v4.b[15]
+; CHECK-GI-NEXT: fmov s4, w26
+; CHECK-GI-NEXT: uxtb w23, w23
+; CHECK-GI-NEXT: fmov w24, s3
+; CHECK-GI-NEXT: fmov s3, w28
+; CHECK-GI-NEXT: fmov w26, s17
+; CHECK-GI-NEXT: fmov w28, s5
+; CHECK-GI-NEXT: fmov w21, s20
+; CHECK-GI-NEXT: mov v4.h[1], w25
+; CHECK-GI-NEXT: fmov w25, s1
+; CHECK-GI-NEXT: mov b20, v2.b[1]
+; CHECK-GI-NEXT: uxtb w24, w24
+; CHECK-GI-NEXT: mov v3.h[1], w6
+; CHECK-GI-NEXT: fmov w8, s7
+; CHECK-GI-NEXT: uxtb w28, w28
+; CHECK-GI-NEXT: mov b17, v2.b[2]
+; CHECK-GI-NEXT: fmov w6, s18
+; CHECK-GI-NEXT: uxtb w25, w25
; CHECK-GI-NEXT: mov b18, v2.b[3]
-; CHECK-GI-NEXT: mov v3.h[2], w19
-; CHECK-GI-NEXT: uxtb w22, w22
-; CHECK-GI-NEXT: mov v6.h[1], w27
-; CHECK-GI-NEXT: fmov w27, s19
-; CHECK-GI-NEXT: mov v7.h[1], w10
-; CHECK-GI-NEXT: fmov w26, s21
-; CHECK-GI-NEXT: mov b17, v2.b[4]
-; CHECK-GI-NEXT: fmov s16, w22
-; CHECK-GI-NEXT: mov v5.h[2], w5
-; CHECK-GI-NEXT: uxtb w5, w25
-; CHECK-GI-NEXT: uxtb w27, w27
-; CHECK-GI-NEXT: fmov w10, s18
-; CHECK-GI-NEXT: mov v3.h[3], w13
-; CHECK-GI-NEXT: uxtb w13, w4
-; CHECK-GI-NEXT: mov v6.h[2], w28
-; CHECK-GI-NEXT: fmov w8, s20
-; CHECK-GI-NEXT: mov v16.h[1], w27
-; CHECK-GI-NEXT: mov v7.h[2], w29
+; CHECK-GI-NEXT: fmov w20, s19
+; CHECK-GI-NEXT: uxtb w8, w8
+; CHECK-GI-NEXT: mov v4.h[2], w22
+; CHECK-GI-NEXT: fmov w22, s6
+; CHECK-GI-NEXT: fmov s5, w25
+; CHECK-GI-NEXT: uxtb w25, w30
+; CHECK-GI-NEXT: uxtb w30, w26
+; CHECK-GI-NEXT: mov v3.h[2], w7
+; CHECK-GI-NEXT: uxtb w7, w27
+; CHECK-GI-NEXT: fmov w27, s22
+; CHECK-GI-NEXT: fmov s6, w25
+; CHECK-GI-NEXT: fmov w25, s2
+; CHECK-GI-NEXT: fmov s7, w30
+; CHECK-GI-NEXT: uxtb w30, w5
+; CHECK-GI-NEXT: fmov w5, s16
+; CHECK-GI-NEXT: mov v5.h[1], w7
+; CHECK-GI-NEXT: mov b19, v2.b[4]
+; CHECK-GI-NEXT: mov v4.h[3], w18
+; CHECK-GI-NEXT: uxtb w18, w27
+; CHECK-GI-NEXT: uxtb w25, w25
+; CHECK-GI-NEXT: mov v6.h[1], w29
+; CHECK-GI-NEXT: fmov w29, s20
+; CHECK-GI-NEXT: mov v7.h[1], w8
+; CHECK-GI-NEXT: mov v3.h[3], w14
+; CHECK-GI-NEXT: uxtb w14, w4
+; CHECK-GI-NEXT: fmov s16, w25
+; CHECK-GI-NEXT: fmov w25, s17
+; CHECK-GI-NEXT: mov v5.h[2], w30
+; CHECK-GI-NEXT: uxtb w8, w29
+; CHECK-GI-NEXT: fmov w29, s18
; CHECK-GI-NEXT: mov b20, v2.b[5]
-; CHECK-GI-NEXT: uxtb w10, w10
+; CHECK-GI-NEXT: mov v6.h[2], w24
+; CHECK-GI-NEXT: fmov w7, s23
+; CHECK-GI-NEXT: mov b17, v2.b[6]
+; CHECK-GI-NEXT: uxtb w25, w25
+; CHECK-GI-NEXT: mov v16.h[1], w8
+; CHECK-GI-NEXT: mov v7.h[2], w28
+; CHECK-GI-NEXT: uxtb w4, w29
; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-GI-NEXT: uxtb w8, w8
-; CHECK-GI-NEXT: fmov w22, s17
-; CHECK-GI-NEXT: mov v5.h[3], w13
-; CHECK-GI-NEXT: uxtb w13, w2
-; CHECK-GI-NEXT: mov v6.h[3], w5
-; CHECK-GI-NEXT: mov b21, v2.b[6]
-; CHECK-GI-NEXT: mov v16.h[2], w9
-; CHECK-GI-NEXT: uxtb w9, w18
-; CHECK-GI-NEXT: uxtb w18, w23
-; CHECK-GI-NEXT: mov v3.h[4], w13
-; CHECK-GI-NEXT: uxtb w13, w24
-; CHECK-GI-NEXT: fmov w27, s20
-; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v4.h[3], w9
-; CHECK-GI-NEXT: uxtb w9, w26
-; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v16.h[3], w10
+; CHECK-GI-NEXT: fmov w8, s19
+; CHECK-GI-NEXT: mov v5.h[3], w14
+; CHECK-GI-NEXT: uxtb w14, w21
+; CHECK-GI-NEXT: mov v6.h[3], w23
+; CHECK-GI-NEXT: mov v3.h[4], w10
; CHECK-GI-NEXT: uxtb w10, w3
-; CHECK-GI-NEXT: mov v6.h[4], w18
-; CHECK-GI-NEXT: ldr w18, [sp, #4] // 4-byte Reload
-; CHECK-GI-NEXT: mov v7.h[3], w9
-; CHECK-GI-NEXT: uxtb w9, w16
-; CHECK-GI-NEXT: uxtb w16, w22
+; CHECK-GI-NEXT: mov v16.h[2], w25
+; CHECK-GI-NEXT: mov v7.h[3], w18
+; CHECK-GI-NEXT: fmov w24, s20
+; CHECK-GI-NEXT: uxtb w8, w8
+; CHECK-GI-NEXT: mov v4.h[4], w16
+; CHECK-GI-NEXT: uxtb w16, w20
; CHECK-GI-NEXT: mov v5.h[4], w10
-; CHECK-GI-NEXT: uxtb w10, w15
-; CHECK-GI-NEXT: uxtb w18, w18
-; CHECK-GI-NEXT: mov v4.h[4], w9
-; CHECK-GI-NEXT: uxtb w9, w21
-; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v16.h[4], w16
-; CHECK-GI-NEXT: mov v7.h[4], w13
-; CHECK-GI-NEXT: ldr w13, [sp, #8] // 4-byte Reload
-; CHECK-GI-NEXT: mov v6.h[5], w9
-; CHECK-GI-NEXT: uxtb w9, w1
+; CHECK-GI-NEXT: uxtb w10, w1
+; CHECK-GI-NEXT: fmov w26, s21
+; CHECK-GI-NEXT: mov v6.h[4], w14
+; CHECK-GI-NEXT: uxtb w14, w22
; CHECK-GI-NEXT: mov v3.h[5], w11
-; CHECK-GI-NEXT: uxtb w11, w27
-; CHECK-GI-NEXT: fmov w19, s22
-; CHECK-GI-NEXT: fmov w28, s21
-; CHECK-GI-NEXT: uxtb w13, w13
+; CHECK-GI-NEXT: uxtb w11, w7
+; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v16.h[3], w4
+; CHECK-GI-NEXT: mov v7.h[4], w14
+; CHECK-GI-NEXT: uxtb w14, w24
+; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
+; CHECK-GI-NEXT: fmov w28, s17
+; CHECK-GI-NEXT: mov v6.h[5], w16
; CHECK-GI-NEXT: mov b17, v2.b[7]
-; CHECK-GI-NEXT: mov v5.h[5], w9
-; CHECK-GI-NEXT: uxtb w9, w0
-; CHECK-GI-NEXT: mov v4.h[5], w10
-; CHECK-GI-NEXT: uxtb w10, w20
-; CHECK-GI-NEXT: mov v7.h[5], w8
-; CHECK-GI-NEXT: mov v16.h[5], w11
-; CHECK-GI-NEXT: uxtb w8, w14
+; CHECK-GI-NEXT: mov v5.h[5], w10
+; CHECK-GI-NEXT: uxtb w10, w13
+; CHECK-GI-NEXT: mov v3.h[6], w9
+; CHECK-GI-NEXT: uxtb w9, w26
+; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v16.h[4], w8
+; CHECK-GI-NEXT: uxtb w8, w15
+; CHECK-GI-NEXT: uxtb w15, w2
+; CHECK-GI-NEXT: mov v7.h[5], w11
; CHECK-GI-NEXT: uxtb w11, w28
-; CHECK-GI-NEXT: mov v6.h[6], w10
-; CHECK-GI-NEXT: uxtb w10, w19
-; CHECK-GI-NEXT: fmov w6, s23
-; CHECK-GI-NEXT: mov v5.h[6], w9
-; CHECK-GI-NEXT: fmov w9, s17
-; CHECK-GI-NEXT: mov v3.h[6], w18
-; CHECK-GI-NEXT: mov v4.h[6], w8
-; CHECK-GI-NEXT: uxtb w8, w7
-; CHECK-GI-NEXT: mov v7.h[6], w10
-; CHECK-GI-NEXT: mov v16.h[6], w11
-; CHECK-GI-NEXT: uxtb w10, w6
-; CHECK-GI-NEXT: mov v0.s[1], wzr
-; CHECK-GI-NEXT: mov v6.h[7], w8
-; CHECK-GI-NEXT: uxtb w8, w17
-; CHECK-GI-NEXT: uxtb w9, w9
-; CHECK-GI-NEXT: mov v3.h[7], w13
; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v4.h[5], w8
+; CHECK-GI-NEXT: uxtb w8, w19
+; CHECK-GI-NEXT: mov v3.h[7], w15
+; CHECK-GI-NEXT: mov v16.h[5], w14
+; CHECK-GI-NEXT: mov v0.s[1], wzr
+; CHECK-GI-NEXT: mov v6.h[6], w8
+; CHECK-GI-NEXT: uxtb w8, w0
+; CHECK-GI-NEXT: mov v7.h[6], w9
+; CHECK-GI-NEXT: uxtb w9, w17
+; CHECK-GI-NEXT: mov v5.h[6], w8
+; CHECK-GI-NEXT: fmov w8, s17
+; CHECK-GI-NEXT: mov v4.h[6], w10
+; CHECK-GI-NEXT: uxtb w10, w6
+; CHECK-GI-NEXT: mov v16.h[6], w11
+; CHECK-GI-NEXT: mov v0.s[2], wzr
+; CHECK-GI-NEXT: mov v6.h[7], w10
+; CHECK-GI-NEXT: uxtb w10, w5
+; CHECK-GI-NEXT: uxtb w8, w8
; CHECK-GI-NEXT: mov v4.h[7], w12
-; CHECK-GI-NEXT: mov v5.h[7], w8
+; CHECK-GI-NEXT: mov v5.h[7], w9
+; CHECK-GI-NEXT: umov w9, v2.b[8]
; CHECK-GI-NEXT: mov v7.h[7], w10
-; CHECK-GI-NEXT: mov v16.h[7], w9
+; CHECK-GI-NEXT: mov v16.h[7], w8
; CHECK-GI-NEXT: umov w8, v1.b[8]
-; CHECK-GI-NEXT: umov w9, v2.b[8]
-; CHECK-GI-NEXT: mov v0.s[2], wzr
+; CHECK-GI-NEXT: mov v0.s[3], wzr
; CHECK-GI-NEXT: mul v3.8h, v3.8h, v6.8h
; CHECK-GI-NEXT: mul v2.8h, v4.8h, v7.8h
; CHECK-GI-NEXT: mul v1.8h, v5.8h, v16.8h
; CHECK-GI-NEXT: mul w15, w8, w9
-; CHECK-GI-NEXT: mov v0.s[3], wzr
; CHECK-GI-NEXT: umov w16, v3.h[0]
; CHECK-GI-NEXT: umov w18, v3.h[4]
; CHECK-GI-NEXT: umov w17, v3.h[1]
+; CHECK-GI-NEXT: umov w0, v3.h[5]
+; CHECK-GI-NEXT: umov w10, v3.h[2]
+; CHECK-GI-NEXT: umov w8, v3.h[3]
; CHECK-GI-NEXT: umov w1, v2.h[0]
; CHECK-GI-NEXT: umov w3, v2.h[4]
-; CHECK-GI-NEXT: umov w0, v3.h[5]
; CHECK-GI-NEXT: umov w5, v1.h[0]
; CHECK-GI-NEXT: umov w7, v1.h[4]
; CHECK-GI-NEXT: umov w2, v2.h[1]
; CHECK-GI-NEXT: umov w4, v2.h[5]
; CHECK-GI-NEXT: umov w6, v1.h[1]
; CHECK-GI-NEXT: umov w19, v1.h[5]
-; CHECK-GI-NEXT: umov w10, v3.h[2]
-; CHECK-GI-NEXT: umov w8, v3.h[3]
; CHECK-GI-NEXT: umov w11, v3.h[6]
; CHECK-GI-NEXT: umov w9, v3.h[7]
; CHECK-GI-NEXT: fmov s3, w16
@@ -2784,221 +2783,220 @@ define i32 @test_sdot_v25i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: ldp q2, q1, [x1]
; CHECK-GI-NEXT: movi d0, #0000000000000000
; CHECK-GI-NEXT: str w2, [sp, #12] // 4-byte Spill
-; CHECK-GI-NEXT: mov b5, v2.b[2]
-; CHECK-GI-NEXT: mov b6, v2.b[3]
-; CHECK-GI-NEXT: mov b7, v2.b[4]
-; CHECK-GI-NEXT: mov b16, v2.b[5]
-; CHECK-GI-NEXT: mov b17, v2.b[6]
-; CHECK-GI-NEXT: mov b18, v2.b[7]
-; CHECK-GI-NEXT: mov b19, v2.b[8]
-; CHECK-GI-NEXT: mov b20, v2.b[9]
-; CHECK-GI-NEXT: mov b21, v2.b[15]
+; CHECK-GI-NEXT: mov b6, v2.b[4]
+; CHECK-GI-NEXT: mov b4, v2.b[2]
+; CHECK-GI-NEXT: mov b18, v2.b[8]
+; CHECK-GI-NEXT: mov b5, v2.b[3]
+; CHECK-GI-NEXT: mov b7, v2.b[5]
+; CHECK-GI-NEXT: mov b16, v2.b[6]
+; CHECK-GI-NEXT: mov b17, v2.b[7]
+; CHECK-GI-NEXT: mov b20, v2.b[10]
+; CHECK-GI-NEXT: mov b21, v2.b[11]
+; CHECK-GI-NEXT: mov b22, v2.b[12]
+; CHECK-GI-NEXT: mov b23, v2.b[13]
; CHECK-GI-NEXT: mov b3, v2.b[1]
+; CHECK-GI-NEXT: fmov w10, s6
+; CHECK-GI-NEXT: mov b6, v2.b[14]
+; CHECK-GI-NEXT: mov b19, v2.b[9]
+; CHECK-GI-NEXT: fmov w6, s4
; CHECK-GI-NEXT: fmov w19, s2
-; CHECK-GI-NEXT: mov b22, v1.b[6]
-; CHECK-GI-NEXT: fmov w6, s5
-; CHECK-GI-NEXT: mov b5, v2.b[10]
-; CHECK-GI-NEXT: fmov w14, s6
-; CHECK-GI-NEXT: mov b6, v2.b[11]
-; CHECK-GI-NEXT: fmov w2, s7
-; CHECK-GI-NEXT: stp s17, s18, [sp, #4] // 8-byte Folded Spill
-; CHECK-GI-NEXT: mov b7, v2.b[12]
-; CHECK-GI-NEXT: fmov w11, s16
-; CHECK-GI-NEXT: sxtb w28, w19
-; CHECK-GI-NEXT: mov b16, v2.b[13]
-; CHECK-GI-NEXT: mov b18, v1.b[1]
-; CHECK-GI-NEXT: sxtb w6, w6
-; CHECK-GI-NEXT: mov b17, v2.b[14]
+; CHECK-GI-NEXT: mov b24, v2.b[15]
; CHECK-GI-NEXT: ldp q4, q2, [x0]
-; CHECK-GI-NEXT: fmov w25, s19
-; CHECK-GI-NEXT: fmov w24, s20
-; CHECK-GI-NEXT: fmov w22, s5
-; CHECK-GI-NEXT: mov b5, v1.b[2]
-; CHECK-GI-NEXT: fmov w0, s6
-; CHECK-GI-NEXT: sxtb w14, w14
-; CHECK-GI-NEXT: mov b20, v1.b[3]
-; CHECK-GI-NEXT: fmov w16, s7
-; CHECK-GI-NEXT: mov b7, v1.b[4]
-; CHECK-GI-NEXT: fmov w15, s16
-; CHECK-GI-NEXT: sxtb w25, w25
+; CHECK-GI-NEXT: fmov w24, s18
+; CHECK-GI-NEXT: fmov w5, s5
+; CHECK-GI-NEXT: fmov w11, s7
+; CHECK-GI-NEXT: sxtb w10, w10
+; CHECK-GI-NEXT: fmov w9, s16
+; CHECK-GI-NEXT: fmov w2, s17
+; CHECK-GI-NEXT: sxtb w19, w19
+; CHECK-GI-NEXT: mov b5, v4.b[1]
+; CHECK-GI-NEXT: mov b7, v1.b[1]
; CHECK-GI-NEXT: sxtb w24, w24
-; CHECK-GI-NEXT: mov b16, v1.b[5]
-; CHECK-GI-NEXT: fmov w13, s21
-; CHECK-GI-NEXT: sxtb w22, w22
-; CHECK-GI-NEXT: mov b6, v4.b[2]
-; CHECK-GI-NEXT: fmov w26, s18
+; CHECK-GI-NEXT: fmov w20, s20
+; CHECK-GI-NEXT: mov b16, v1.b[2]
+; CHECK-GI-NEXT: sxtb w27, w6
+; CHECK-GI-NEXT: fmov w0, s21
+; CHECK-GI-NEXT: mov b17, v1.b[3]
+; CHECK-GI-NEXT: sxtb w5, w5
+; CHECK-GI-NEXT: fmov w15, s22
+; CHECK-GI-NEXT: mov b21, v1.b[4]
+; CHECK-GI-NEXT: sxtb w11, w11
+; CHECK-GI-NEXT: fmov w14, s23
+; CHECK-GI-NEXT: mov b22, v1.b[5]
+; CHECK-GI-NEXT: sxtb w20, w20
+; CHECK-GI-NEXT: fmov w12, s6
+; CHECK-GI-NEXT: mov b6, v1.b[6]
; CHECK-GI-NEXT: sxtb w0, w0
-; CHECK-GI-NEXT: mov b21, v1.b[7]
-; CHECK-GI-NEXT: mov b18, v4.b[4]
+; CHECK-GI-NEXT: mov b23, v1.b[7]
+; CHECK-GI-NEXT: mov b20, v4.b[3]
+; CHECK-GI-NEXT: sxtb w9, w9
+; CHECK-GI-NEXT: fmov w23, s19
; CHECK-GI-NEXT: fmov w7, s3
-; CHECK-GI-NEXT: mov b3, v4.b[1]
-; CHECK-GI-NEXT: fmov w12, s17
-; CHECK-GI-NEXT: fmov w5, s5
-; CHECK-GI-NEXT: mov b19, v4.b[3]
-; CHECK-GI-NEXT: fmov w4, s20
-; CHECK-GI-NEXT: fmov w3, s7
-; CHECK-GI-NEXT: sxtb w29, w7
-; CHECK-GI-NEXT: mov b17, v4.b[5]
-; CHECK-GI-NEXT: fmov w1, s16
-; CHECK-GI-NEXT: sxtb w5, w5
-; CHECK-GI-NEXT: mov b16, v4.b[6]
+; CHECK-GI-NEXT: mov b3, v4.b[2]
+; CHECK-GI-NEXT: fmov w13, s24
+; CHECK-GI-NEXT: fmov w25, s7
+; CHECK-GI-NEXT: fmov w4, s16
+; CHECK-GI-NEXT: mov b19, v4.b[4]
+; CHECK-GI-NEXT: fmov w3, s17
+; CHECK-GI-NEXT: mov b18, v4.b[5]
+; CHECK-GI-NEXT: sxtb w23, w23
+; CHECK-GI-NEXT: sxtb w7, w7
+; CHECK-GI-NEXT: fmov w1, s21
+; CHECK-GI-NEXT: sxtb w4, w4
+; CHECK-GI-NEXT: mov b17, v4.b[6]
; CHECK-GI-NEXT: fmov w18, s22
-; CHECK-GI-NEXT: mov b7, v4.b[7]
-; CHECK-GI-NEXT: fmov w17, s21
-; CHECK-GI-NEXT: mov b5, v4.b[8]
-; CHECK-GI-NEXT: mov b20, v4.b[9]
-; CHECK-GI-NEXT: fmov w27, s6
-; CHECK-GI-NEXT: mov b6, v4.b[10]
-; CHECK-GI-NEXT: mov b21, v4.b[11]
-; CHECK-GI-NEXT: fmov w21, s18
-; CHECK-GI-NEXT: mov b18, v4.b[12]
-; CHECK-GI-NEXT: mov b22, v4.b[13]
-; CHECK-GI-NEXT: mov b23, v4.b[14]
-; CHECK-GI-NEXT: fmov w10, s4
-; CHECK-GI-NEXT: sxtb w27, w27
-; CHECK-GI-NEXT: mov b24, v4.b[15]
-; CHECK-GI-NEXT: fmov s4, w25
-; CHECK-GI-NEXT: fmov w30, s3
-; CHECK-GI-NEXT: fmov s3, w28
-; CHECK-GI-NEXT: fmov w9, s5
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: fmov w7, s7
-; CHECK-GI-NEXT: mov b7, v2.b[1]
-; CHECK-GI-NEXT: mov v4.h[1], w24
-; CHECK-GI-NEXT: fmov w24, s1
-; CHECK-GI-NEXT: fmov w8, s20
-; CHECK-GI-NEXT: sxtb w9, w9
-; CHECK-GI-NEXT: mov v3.h[1], w29
-; CHECK-GI-NEXT: fmov w29, s6
-; CHECK-GI-NEXT: fmov s6, w10
-; CHECK-GI-NEXT: fmov w10, s2
-; CHECK-GI-NEXT: fmov w19, s16
-; CHECK-GI-NEXT: sxtb w24, w24
-; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: mov b16, v2.b[3]
+; CHECK-GI-NEXT: sxtb w3, w3
+; CHECK-GI-NEXT: mov b16, v4.b[7]
+; CHECK-GI-NEXT: fmov w17, s6
+; CHECK-GI-NEXT: mov b7, v4.b[8]
+; CHECK-GI-NEXT: fmov w16, s23
+; CHECK-GI-NEXT: mov b6, v4.b[9]
+; CHECK-GI-NEXT: fmov w29, s5
+; CHECK-GI-NEXT: mov b5, v4.b[10]
+; CHECK-GI-NEXT: mov b22, v4.b[11]
+; CHECK-GI-NEXT: fmov w22, s20
+; CHECK-GI-NEXT: mov b20, v4.b[12]
+; CHECK-GI-NEXT: mov b23, v4.b[13]
+; CHECK-GI-NEXT: mov b24, v4.b[14]
+; CHECK-GI-NEXT: fmov w30, s4
+; CHECK-GI-NEXT: mov b21, v4.b[15]
; CHECK-GI-NEXT: sxtb w29, w29
-; CHECK-GI-NEXT: fmov w23, s19
+; CHECK-GI-NEXT: fmov s4, w24
+; CHECK-GI-NEXT: fmov w26, s3
+; CHECK-GI-NEXT: sxtb w22, w22
+; CHECK-GI-NEXT: fmov s3, w19
+; CHECK-GI-NEXT: fmov w8, s7
+; CHECK-GI-NEXT: fmov w28, s5
+; CHECK-GI-NEXT: fmov w19, s18
+; CHECK-GI-NEXT: mov b18, v2.b[1]
+; CHECK-GI-NEXT: sxtb w26, w26
+; CHECK-GI-NEXT: mov v4.h[1], w23
+; CHECK-GI-NEXT: fmov w23, s1
+; CHECK-GI-NEXT: sxtb w8, w8
+; CHECK-GI-NEXT: mov v3.h[1], w7
+; CHECK-GI-NEXT: fmov w24, s6
+; CHECK-GI-NEXT: sxtb w28, w28
+; CHECK-GI-NEXT: fmov w21, s19
; CHECK-GI-NEXT: mov b19, v2.b[2]
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: fmov s5, w24
-; CHECK-GI-NEXT: sxtb w24, w30
-; CHECK-GI-NEXT: mov v3.h[2], w6
-; CHECK-GI-NEXT: sxtb w6, w26
-; CHECK-GI-NEXT: fmov w28, s21
; CHECK-GI-NEXT: sxtb w23, w23
-; CHECK-GI-NEXT: mov v6.h[1], w24
-; CHECK-GI-NEXT: fmov w24, s7
-; CHECK-GI-NEXT: fmov s7, w9
-; CHECK-GI-NEXT: fmov w9, s19
-; CHECK-GI-NEXT: mov v5.h[1], w6
-; CHECK-GI-NEXT: mov v4.h[2], w22
-; CHECK-GI-NEXT: fmov w20, s17
+; CHECK-GI-NEXT: fmov s7, w8
+; CHECK-GI-NEXT: fmov w8, s18
+; CHECK-GI-NEXT: fmov w6, s16
+; CHECK-GI-NEXT: mov b16, v2.b[3]
+; CHECK-GI-NEXT: mov v4.h[2], w20
+; CHECK-GI-NEXT: fmov s5, w23
+; CHECK-GI-NEXT: sxtb w23, w30
+; CHECK-GI-NEXT: sxtb w30, w24
+; CHECK-GI-NEXT: sxtb w8, w8
+; CHECK-GI-NEXT: mov v3.h[2], w27
+; CHECK-GI-NEXT: fmov w27, s22
+; CHECK-GI-NEXT: fmov s6, w23
+; CHECK-GI-NEXT: fmov w23, s2
+; CHECK-GI-NEXT: mov v7.h[1], w30
+; CHECK-GI-NEXT: fmov w7, s17
; CHECK-GI-NEXT: mov b17, v2.b[4]
-; CHECK-GI-NEXT: sxtb w24, w24
-; CHECK-GI-NEXT: mov v3.h[3], w14
-; CHECK-GI-NEXT: sxtb w14, w2
-; CHECK-GI-NEXT: sxtb w9, w9
-; CHECK-GI-NEXT: mov v7.h[1], w8
-; CHECK-GI-NEXT: fmov w8, s16
-; CHECK-GI-NEXT: fmov s16, w10
-; CHECK-GI-NEXT: mov v6.h[2], w27
-; CHECK-GI-NEXT: mov v5.h[2], w5
-; CHECK-GI-NEXT: fmov w25, s18
; CHECK-GI-NEXT: mov v4.h[3], w0
-; CHECK-GI-NEXT: sxtb w0, w4
+; CHECK-GI-NEXT: sxtb w0, w27
+; CHECK-GI-NEXT: fmov w20, s23
+; CHECK-GI-NEXT: fmov w24, s21
+; CHECK-GI-NEXT: sxtb w23, w23
+; CHECK-GI-NEXT: mov v3.h[3], w5
+; CHECK-GI-NEXT: sxtb w5, w25
+; CHECK-GI-NEXT: mov v6.h[1], w29
+; CHECK-GI-NEXT: fmov w29, s19
+; CHECK-GI-NEXT: mov v7.h[2], w28
+; CHECK-GI-NEXT: fmov s18, w23
+; CHECK-GI-NEXT: mov v5.h[1], w5
+; CHECK-GI-NEXT: fmov w23, s16
+; CHECK-GI-NEXT: fmov w25, s20
+; CHECK-GI-NEXT: mov b20, v2.b[5]
+; CHECK-GI-NEXT: mov b21, v2.b[6]
+; CHECK-GI-NEXT: sxtb w29, w29
+; CHECK-GI-NEXT: mov v3.h[4], w10
+; CHECK-GI-NEXT: sxtb w10, w15
+; CHECK-GI-NEXT: mov v18.h[1], w8
+; CHECK-GI-NEXT: mov v6.h[2], w26
+; CHECK-GI-NEXT: fmov w8, s17
+; CHECK-GI-NEXT: sxtb w15, w25
+; CHECK-GI-NEXT: mov v5.h[2], w4
+; CHECK-GI-NEXT: sxtb w4, w23
+; CHECK-GI-NEXT: mov v7.h[3], w0
+; CHECK-GI-NEXT: sxtb w0, w21
+; CHECK-GI-NEXT: fmov w26, s20
; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: mov b18, v2.b[5]
-; CHECK-GI-NEXT: fmov w10, s17
-; CHECK-GI-NEXT: mov v16.h[1], w24
-; CHECK-GI-NEXT: mov v7.h[2], w29
-; CHECK-GI-NEXT: mov v3.h[4], w14
-; CHECK-GI-NEXT: sxtb w14, w25
+; CHECK-GI-NEXT: mov v4.h[4], w10
+; CHECK-GI-NEXT: sxtb w10, w19
+; CHECK-GI-NEXT: mov v18.h[2], w29
; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: mov v6.h[3], w23
-; CHECK-GI-NEXT: mov v5.h[3], w0
-; CHECK-GI-NEXT: fmov w26, s22
-; CHECK-GI-NEXT: mov b19, v2.b[6]
-; CHECK-GI-NEXT: fmov w27, s18
-; CHECK-GI-NEXT: mov v16.h[2], w9
-; CHECK-GI-NEXT: sxtb w9, w28
-; CHECK-GI-NEXT: fmov w22, s23
-; CHECK-GI-NEXT: mov b17, v2.b[7]
-; CHECK-GI-NEXT: fmov w6, s24
+; CHECK-GI-NEXT: mov v6.h[3], w22
+; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v5.h[3], w3
+; CHECK-GI-NEXT: mov v7.h[4], w15
+; CHECK-GI-NEXT: sxtb w15, w26
+; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v3.h[5], w11
+; CHECK-GI-NEXT: sxtb w11, w20
+; CHECK-GI-NEXT: mov v18.h[3], w4
+; CHECK-GI-NEXT: fmov w5, s24
+; CHECK-GI-NEXT: mov v6.h[4], w0
+; CHECK-GI-NEXT: sxtb w0, w1
+; CHECK-GI-NEXT: fmov w28, s21
+; CHECK-GI-NEXT: mov b16, v2.b[7]
+; CHECK-GI-NEXT: mov v7.h[5], w11
; CHECK-GI-NEXT: mov v0.s[1], wzr
-; CHECK-GI-NEXT: mov v7.h[3], w9
-; CHECK-GI-NEXT: sxtb w9, w11
-; CHECK-GI-NEXT: sxtb w11, w21
-; CHECK-GI-NEXT: fmov w24, s19
-; CHECK-GI-NEXT: mov v16.h[3], w8
-; CHECK-GI-NEXT: sxtb w8, w16
-; CHECK-GI-NEXT: sxtb w16, w3
-; CHECK-GI-NEXT: mov v6.h[4], w11
-; CHECK-GI-NEXT: ldr w11, [sp, #4] // 4-byte Reload
-; CHECK-GI-NEXT: mov v3.h[5], w9
-; CHECK-GI-NEXT: sxtb w9, w15
-; CHECK-GI-NEXT: sxtb w15, w27
-; CHECK-GI-NEXT: mov v7.h[4], w14
-; CHECK-GI-NEXT: sxtb w14, w1
+; CHECK-GI-NEXT: sxtb w11, w5
+; CHECK-GI-NEXT: mov v5.h[4], w0
+; CHECK-GI-NEXT: mov v3.h[6], w9
+; CHECK-GI-NEXT: sxtb w9, w12
+; CHECK-GI-NEXT: sxtb w12, w17
+; CHECK-GI-NEXT: mov v18.h[4], w8
+; CHECK-GI-NEXT: sxtb w8, w14
+; CHECK-GI-NEXT: sxtb w14, w18
+; CHECK-GI-NEXT: mov v6.h[5], w10
+; CHECK-GI-NEXT: sxtb w10, w2
+; CHECK-GI-NEXT: mov v7.h[6], w11
+; CHECK-GI-NEXT: fmov w11, s16
+; CHECK-GI-NEXT: mov v4.h[5], w8
+; CHECK-GI-NEXT: sxtb w8, w7
+; CHECK-GI-NEXT: mov v5.h[5], w14
+; CHECK-GI-NEXT: mov v18.h[5], w15
+; CHECK-GI-NEXT: mov v3.h[7], w10
+; CHECK-GI-NEXT: sxtb w10, w24
; CHECK-GI-NEXT: sxtb w11, w11
-; CHECK-GI-NEXT: mov v4.h[4], w8
-; CHECK-GI-NEXT: sxtb w8, w20
+; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v6.h[6], w8
+; CHECK-GI-NEXT: sxtb w8, w13
+; CHECK-GI-NEXT: sxtb w13, w28
; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v5.h[4], w16
-; CHECK-GI-NEXT: mov v16.h[4], w10
-; CHECK-GI-NEXT: sxtb w10, w26
-; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v6.h[5], w8
-; CHECK-GI-NEXT: ldr w8, [sp, #8] // 4-byte Reload
-; CHECK-GI-NEXT: mov v7.h[5], w10
-; CHECK-GI-NEXT: sxtb w10, w12
-; CHECK-GI-NEXT: sxtb w12, w18
-; CHECK-GI-NEXT: mov v4.h[5], w9
-; CHECK-GI-NEXT: sxtb w9, w19
-; CHECK-GI-NEXT: mov v5.h[5], w14
-; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: mov v16.h[5], w15
-; CHECK-GI-NEXT: mov v3.h[6], w11
-; CHECK-GI-NEXT: sxtb w11, w22
-; CHECK-GI-NEXT: mov v6.h[6], w9
-; CHECK-GI-NEXT: sxtb w9, w13
-; CHECK-GI-NEXT: sxtb w13, w24
-; CHECK-GI-NEXT: mov v0.s[2], wzr
-; CHECK-GI-NEXT: mov v7.h[6], w11
-; CHECK-GI-NEXT: fmov w11, s17
-; CHECK-GI-NEXT: mov v4.h[6], w10
-; CHECK-GI-NEXT: sxtb w10, w7
+; CHECK-GI-NEXT: mov v4.h[6], w9
+; CHECK-GI-NEXT: sxtb w9, w6
; CHECK-GI-NEXT: mov v5.h[6], w12
-; CHECK-GI-NEXT: mov v16.h[6], w13
-; CHECK-GI-NEXT: mov v3.h[7], w8
-; CHECK-GI-NEXT: sxtb w8, w6
+; CHECK-GI-NEXT: mov v18.h[6], w13
+; CHECK-GI-NEXT: mov v7.h[7], w10
; CHECK-GI-NEXT: smov w12, v1.b[8]
-; CHECK-GI-NEXT: mov v6.h[7], w10
-; CHECK-GI-NEXT: sxtb w10, w17
-; CHECK-GI-NEXT: sxtb w11, w11
-; CHECK-GI-NEXT: mov v4.h[7], w9
-; CHECK-GI-NEXT: mov v7.h[7], w8
+; CHECK-GI-NEXT: mov v0.s[2], wzr
+; CHECK-GI-NEXT: mov v6.h[7], w9
+; CHECK-GI-NEXT: sxtb w9, w16
+; CHECK-GI-NEXT: mov v4.h[7], w8
; CHECK-GI-NEXT: smov w8, v2.b[8]
-; CHECK-GI-NEXT: mov v5.h[7], w10
-; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v16.h[7], w11
+; CHECK-GI-NEXT: mov v5.h[7], w9
+; CHECK-GI-NEXT: mov v18.h[7], w11
; CHECK-GI-NEXT: mov v0.s[3], wzr
; CHECK-GI-NEXT: mul v3.8h, v3.8h, v6.8h
-; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; CHECK-GI-NEXT: mul v2.8h, v4.8h, v7.8h
; CHECK-GI-NEXT: mul w16, w12, w8
-; CHECK-GI-NEXT: mul v1.8h, v5.8h, v16.8h
+; CHECK-GI-NEXT: mul v1.8h, v5.8h, v18.8h
; CHECK-GI-NEXT: smov w17, v3.h[0]
; CHECK-GI-NEXT: smov w0, v3.h[4]
; CHECK-GI-NEXT: sxth w16, w16
; CHECK-GI-NEXT: smov w2, v2.h[0]
; CHECK-GI-NEXT: smov w4, v2.h[4]
; CHECK-GI-NEXT: smov w18, v3.h[1]
+; CHECK-GI-NEXT: smov w6, v1.h[0]
+; CHECK-GI-NEXT: smov w19, v1.h[4]
; CHECK-GI-NEXT: smov w1, v3.h[5]
; CHECK-GI-NEXT: smov w3, v2.h[1]
; CHECK-GI-NEXT: smov w5, v2.h[5]
-; CHECK-GI-NEXT: smov w6, v1.h[0]
-; CHECK-GI-NEXT: smov w19, v1.h[4]
; CHECK-GI-NEXT: smov w7, v1.h[1]
; CHECK-GI-NEXT: smov w20, v1.h[5]
; CHECK-GI-NEXT: smov w10, v3.h[2]
@@ -4507,7 +4505,7 @@ define i32 @test_udot_v33i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: .cfi_offset w28, -80
; CHECK-GI-NEXT: .cfi_offset w30, -88
; CHECK-GI-NEXT: .cfi_offset w29, -96
-; CHECK-GI-NEXT: ldp q7, q16, [x1]
+; CHECK-GI-NEXT: ldp q17, q16, [x1]
; CHECK-GI-NEXT: movi d5, #0000000000000000
; CHECK-GI-NEXT: str w2, [sp, #12] // 4-byte Spill
; CHECK-GI-NEXT: movi d6, #0000000000000000
@@ -4515,374 +4513,374 @@ define i32 @test_udot_v33i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: movi d1, #0000000000000000
; CHECK-GI-NEXT: movi d3, #0000000000000000
; CHECK-GI-NEXT: movi d2, #0000000000000000
-; CHECK-GI-NEXT: mov b23, v7.b[7]
-; CHECK-GI-NEXT: mov b17, v7.b[1]
-; CHECK-GI-NEXT: fmov w11, s7
-; CHECK-GI-NEXT: mov b18, v7.b[2]
-; CHECK-GI-NEXT: mov b19, v7.b[3]
-; CHECK-GI-NEXT: mov b20, v7.b[4]
-; CHECK-GI-NEXT: mov b21, v7.b[5]
-; CHECK-GI-NEXT: mov b22, v7.b[6]
-; CHECK-GI-NEXT: mov b24, v7.b[8]
-; CHECK-GI-NEXT: uxtb w11, w11
-; CHECK-GI-NEXT: mov b25, v7.b[9]
-; CHECK-GI-NEXT: mov b26, v7.b[10]
-; CHECK-GI-NEXT: mov b27, v7.b[11]
-; CHECK-GI-NEXT: mov b28, v7.b[12]
-; CHECK-GI-NEXT: mov b29, v7.b[13]
-; CHECK-GI-NEXT: mov b30, v7.b[14]
-; CHECK-GI-NEXT: mov b7, v7.b[15]
-; CHECK-GI-NEXT: fmov w7, s23
-; CHECK-GI-NEXT: mov b23, v16.b[7]
-; CHECK-GI-NEXT: fmov w10, s17
-; CHECK-GI-NEXT: fmov w9, s18
-; CHECK-GI-NEXT: fmov w13, s19
-; CHECK-GI-NEXT: fmov w8, s24
-; CHECK-GI-NEXT: mov b17, v16.b[2]
-; CHECK-GI-NEXT: fmov w12, s20
-; CHECK-GI-NEXT: fmov w16, s25
-; CHECK-GI-NEXT: fmov w23, s21
-; CHECK-GI-NEXT: uxtb w10, w10
+; CHECK-GI-NEXT: mov b19, v17.b[2]
+; CHECK-GI-NEXT: mov b20, v17.b[3]
+; CHECK-GI-NEXT: mov b18, v17.b[1]
+; CHECK-GI-NEXT: fmov w9, s17
+; CHECK-GI-NEXT: mov b25, v17.b[8]
+; CHECK-GI-NEXT: mov b7, v17.b[10]
+; CHECK-GI-NEXT: mov b21, v17.b[4]
+; CHECK-GI-NEXT: mov b22, v17.b[5]
+; CHECK-GI-NEXT: mov b23, v17.b[6]
+; CHECK-GI-NEXT: mov b24, v17.b[7]
+; CHECK-GI-NEXT: mov b26, v17.b[9]
+; CHECK-GI-NEXT: mov b27, v17.b[11]
; CHECK-GI-NEXT: uxtb w9, w9
-; CHECK-GI-NEXT: mov b18, v16.b[1]
-; CHECK-GI-NEXT: stp s23, s7, [sp, #4] // 8-byte Folded Spill
-; CHECK-GI-NEXT: uxtb w8, w8
-; CHECK-GI-NEXT: fmov s7, w11
-; CHECK-GI-NEXT: fmov w5, s17
-; CHECK-GI-NEXT: fmov w27, s26
-; CHECK-GI-NEXT: mov b21, v16.b[5]
-; CHECK-GI-NEXT: fmov s17, w8
-; CHECK-GI-NEXT: uxtb w8, w12
-; CHECK-GI-NEXT: fmov w20, s22
-; CHECK-GI-NEXT: mov v7.h[1], w10
-; CHECK-GI-NEXT: uxtb w10, w16
-; CHECK-GI-NEXT: mov b19, v16.b[3]
-; CHECK-GI-NEXT: mov b22, v16.b[4]
-; CHECK-GI-NEXT: mov b20, v16.b[6]
+; CHECK-GI-NEXT: fmov w10, s19
+; CHECK-GI-NEXT: mov b28, v17.b[12]
+; CHECK-GI-NEXT: fmov w8, s20
+; CHECK-GI-NEXT: mov b20, v17.b[13]
+; CHECK-GI-NEXT: mov b19, v17.b[14]
+; CHECK-GI-NEXT: mov b17, v17.b[15]
+; CHECK-GI-NEXT: fmov w11, s18
+; CHECK-GI-NEXT: ldr q18, [x0]
+; CHECK-GI-NEXT: uxtb w10, w10
+; CHECK-GI-NEXT: fmov w15, s25
+; CHECK-GI-NEXT: fmov w24, s7
+; CHECK-GI-NEXT: uxtb w17, w8
+; CHECK-GI-NEXT: fmov s7, w9
+; CHECK-GI-NEXT: fmov w16, s26
+; CHECK-GI-NEXT: uxtb w11, w11
+; CHECK-GI-NEXT: fmov w13, s21
+; CHECK-GI-NEXT: mov b21, v16.b[1]
+; CHECK-GI-NEXT: uxtb w15, w15
+; CHECK-GI-NEXT: uxtb w24, w24
+; CHECK-GI-NEXT: fmov w2, s17
+; CHECK-GI-NEXT: uxtb w26, w16
+; CHECK-GI-NEXT: mov b17, v16.b[9]
+; CHECK-GI-NEXT: mov v7.h[1], w11
+; CHECK-GI-NEXT: uxtb w13, w13
+; CHECK-GI-NEXT: fmov w12, s22
+; CHECK-GI-NEXT: fmov w19, s23
+; CHECK-GI-NEXT: fmov w6, s24
+; CHECK-GI-NEXT: mov b22, v16.b[2]
+; CHECK-GI-NEXT: mov b24, v16.b[3]
+; CHECK-GI-NEXT: mov b23, v16.b[4]
; CHECK-GI-NEXT: fmov w21, s27
-; CHECK-GI-NEXT: mov v17.h[1], w10
-; CHECK-GI-NEXT: fmov w24, s28
-; CHECK-GI-NEXT: mov b24, v16.b[8]
-; CHECK-GI-NEXT: fmov w22, s29
-; CHECK-GI-NEXT: mov b26, v16.b[9]
-; CHECK-GI-NEXT: fmov w4, s30
-; CHECK-GI-NEXT: uxtb w10, w21
-; CHECK-GI-NEXT: mov v7.h[2], w9
-; CHECK-GI-NEXT: uxtb w9, w13
-; CHECK-GI-NEXT: str s20, [sp] // 4-byte Spill
-; CHECK-GI-NEXT: mov b25, v16.b[10]
-; CHECK-GI-NEXT: fmov w25, s18
-; CHECK-GI-NEXT: uxtb w22, w22
+; CHECK-GI-NEXT: fmov w22, s20
+; CHECK-GI-NEXT: uxtb w19, w19
+; CHECK-GI-NEXT: fmov w5, s17
+; CHECK-GI-NEXT: fmov s17, w15
+; CHECK-GI-NEXT: uxtb w6, w6
+; CHECK-GI-NEXT: mov v7.h[2], w10
+; CHECK-GI-NEXT: mov b20, v16.b[7]
+; CHECK-GI-NEXT: uxtb w29, w21
+; CHECK-GI-NEXT: uxtb w8, w22
+; CHECK-GI-NEXT: fmov w3, s19
+; CHECK-GI-NEXT: mov v17.h[1], w26
+; CHECK-GI-NEXT: uxtb w26, w12
+; CHECK-GI-NEXT: mov b19, v16.b[8]
+; CHECK-GI-NEXT: fmov w25, s21
+; CHECK-GI-NEXT: mov b21, v16.b[10]
+; CHECK-GI-NEXT: fmov w28, s16
+; CHECK-GI-NEXT: str s20, [sp, #8] // 4-byte Spill
+; CHECK-GI-NEXT: mov v7.h[3], w17
+; CHECK-GI-NEXT: mov b26, v16.b[5]
+; CHECK-GI-NEXT: mov b25, v16.b[6]
+; CHECK-GI-NEXT: fmov w30, s28
+; CHECK-GI-NEXT: fmov w23, s22
+; CHECK-GI-NEXT: uxtb w28, w28
+; CHECK-GI-NEXT: uxtb w25, w25
+; CHECK-GI-NEXT: mov v17.h[2], w24
; CHECK-GI-NEXT: mov b27, v16.b[11]
+; CHECK-GI-NEXT: fmov w4, s24
; CHECK-GI-NEXT: mov b28, v16.b[12]
-; CHECK-GI-NEXT: mov b29, v16.b[13]
-; CHECK-GI-NEXT: mov b30, v16.b[14]
-; CHECK-GI-NEXT: fmov w26, s16
-; CHECK-GI-NEXT: mov v7.h[3], w9
-; CHECK-GI-NEXT: uxtb w9, w27
-; CHECK-GI-NEXT: mov b31, v16.b[15]
-; CHECK-GI-NEXT: ldp q18, q16, [x0]
-; CHECK-GI-NEXT: fmov w2, s21
-; CHECK-GI-NEXT: uxtb w26, w26
-; CHECK-GI-NEXT: mov v17.h[2], w9
-; CHECK-GI-NEXT: fmov w14, s22
-; CHECK-GI-NEXT: fmov w3, s25
-; CHECK-GI-NEXT: fmov w15, s19
-; CHECK-GI-NEXT: fmov w19, s24
-; CHECK-GI-NEXT: mov v7.h[4], w8
-; CHECK-GI-NEXT: uxtb w8, w23
-; CHECK-GI-NEXT: mov b21, v18.b[2]
-; CHECK-GI-NEXT: mov b22, v18.b[1]
-; CHECK-GI-NEXT: mov b25, v18.b[5]
-; CHECK-GI-NEXT: mov b23, v18.b[6]
-; CHECK-GI-NEXT: uxtb w19, w19
-; CHECK-GI-NEXT: uxtb w3, w3
-; CHECK-GI-NEXT: mov v17.h[3], w10
-; CHECK-GI-NEXT: uxtb w10, w24
-; CHECK-GI-NEXT: uxtb w24, w7
-; CHECK-GI-NEXT: mov b19, v18.b[3]
-; CHECK-GI-NEXT: mov v7.h[5], w8
-; CHECK-GI-NEXT: uxtb w8, w20
-; CHECK-GI-NEXT: fmov w29, s21
-; CHECK-GI-NEXT: mov b21, v18.b[10]
-; CHECK-GI-NEXT: fmov w9, s22
-; CHECK-GI-NEXT: fmov w6, s26
-; CHECK-GI-NEXT: mov v17.h[4], w10
-; CHECK-GI-NEXT: uxtb w10, w25
+; CHECK-GI-NEXT: uxtb w22, w23
+; CHECK-GI-NEXT: fmov w14, s23
+; CHECK-GI-NEXT: mov b23, v16.b[13]
+; CHECK-GI-NEXT: mov b29, v16.b[14]
+; CHECK-GI-NEXT: mov b24, v18.b[1]
+; CHECK-GI-NEXT: fmov w7, s19
+; CHECK-GI-NEXT: uxtb w4, w4
+; CHECK-GI-NEXT: mov b22, v18.b[2]
+; CHECK-GI-NEXT: mov b20, v18.b[3]
+; CHECK-GI-NEXT: uxtb w14, w14
+; CHECK-GI-NEXT: mov b19, v18.b[4]
+; CHECK-GI-NEXT: mov v7.h[4], w13
+; CHECK-GI-NEXT: mov v17.h[3], w29
+; CHECK-GI-NEXT: uxtb w29, w30
+; CHECK-GI-NEXT: fmov w20, s18
+; CHECK-GI-NEXT: fmov w18, s21
+; CHECK-GI-NEXT: mov b21, v18.b[8]
+; CHECK-GI-NEXT: fmov w11, s26
+; CHECK-GI-NEXT: fmov w10, s25
; CHECK-GI-NEXT: fmov w17, s27
-; CHECK-GI-NEXT: mov b26, v18.b[4]
-; CHECK-GI-NEXT: fmov w18, s28
-; CHECK-GI-NEXT: fmov w16, s29
-; CHECK-GI-NEXT: mov v7.h[6], w8
-; CHECK-GI-NEXT: fmov w8, s18
-; CHECK-GI-NEXT: mov b24, v18.b[7]
-; CHECK-GI-NEXT: fmov w30, s21
-; CHECK-GI-NEXT: mov b20, v18.b[8]
+; CHECK-GI-NEXT: fmov w16, s28
+; CHECK-GI-NEXT: mov b26, v18.b[5]
+; CHECK-GI-NEXT: fmov w15, s23
+; CHECK-GI-NEXT: mov b25, v18.b[6]
+; CHECK-GI-NEXT: uxtb w18, w18
+; CHECK-GI-NEXT: fmov w13, s29
+; CHECK-GI-NEXT: mov b23, v18.b[7]
+; CHECK-GI-NEXT: uxtb w17, w17
+; CHECK-GI-NEXT: uxtb w10, w10
+; CHECK-GI-NEXT: mov v7.h[5], w26
+; CHECK-GI-NEXT: fmov w9, s24
; CHECK-GI-NEXT: mov b27, v18.b[9]
-; CHECK-GI-NEXT: uxtb w16, w16
-; CHECK-GI-NEXT: mov b28, v18.b[11]
-; CHECK-GI-NEXT: mov b29, v18.b[12]
-; CHECK-GI-NEXT: fmov w23, s25
-; CHECK-GI-NEXT: mov b25, v18.b[13]
-; CHECK-GI-NEXT: fmov w21, s23
-; CHECK-GI-NEXT: mov v7.h[7], w24
-; CHECK-GI-NEXT: uxtb w24, w8
-; CHECK-GI-NEXT: uxtb w8, w9
-; CHECK-GI-NEXT: uxtb w9, w29
-; CHECK-GI-NEXT: mov b23, v18.b[14]
-; CHECK-GI-NEXT: mov b22, v18.b[15]
-; CHECK-GI-NEXT: fmov s21, w24
-; CHECK-GI-NEXT: fmov s18, w26
-; CHECK-GI-NEXT: fmov w28, s19
-; CHECK-GI-NEXT: mov b19, v16.b[1]
-; CHECK-GI-NEXT: mov v17.h[5], w22
-; CHECK-GI-NEXT: fmov w7, s20
-; CHECK-GI-NEXT: fmov w11, s27
-; CHECK-GI-NEXT: fmov w27, s26
-; CHECK-GI-NEXT: mov b20, v16.b[2]
-; CHECK-GI-NEXT: mov v21.h[1], w8
-; CHECK-GI-NEXT: uxtb w8, w4
-; CHECK-GI-NEXT: mov v18.h[1], w10
-; CHECK-GI-NEXT: uxtb w10, w5
-; CHECK-GI-NEXT: uxtb w7, w7
-; CHECK-GI-NEXT: fmov w24, s23
-; CHECK-GI-NEXT: mov b23, v16.b[6]
-; CHECK-GI-NEXT: fmov w4, s22
-; CHECK-GI-NEXT: mov b22, v16.b[8]
+; CHECK-GI-NEXT: fmov w27, s22
+; CHECK-GI-NEXT: mov b28, v18.b[10]
+; CHECK-GI-NEXT: fmov w26, s20
+; CHECK-GI-NEXT: mov b29, v18.b[11]
+; CHECK-GI-NEXT: fmov w24, s19
+; CHECK-GI-NEXT: mov b22, v18.b[12]
+; CHECK-GI-NEXT: mov b20, v18.b[13]
+; CHECK-GI-NEXT: uxtb w23, w9
+; CHECK-GI-NEXT: uxtb w9, w27
+; CHECK-GI-NEXT: mov b24, v18.b[14]
+; CHECK-GI-NEXT: mov b19, v18.b[15]
+; CHECK-GI-NEXT: fmov s18, w28
+; CHECK-GI-NEXT: uxtb w28, w20
+; CHECK-GI-NEXT: mov v17.h[4], w29
+; CHECK-GI-NEXT: fmov w29, s21
+; CHECK-GI-NEXT: mov v7.h[6], w19
+; CHECK-GI-NEXT: fmov s21, w28
+; CHECK-GI-NEXT: mov b30, v16.b[15]
+; CHECK-GI-NEXT: ldr q16, [x0, #16]
+; CHECK-GI-NEXT: mov v18.h[1], w25
+; CHECK-GI-NEXT: fmov w30, s27
+; CHECK-GI-NEXT: fmov w25, s28
+; CHECK-GI-NEXT: mov b27, v16.b[8]
+; CHECK-GI-NEXT: fmov w28, s22
+; CHECK-GI-NEXT: mov b22, v16.b[4]
+; CHECK-GI-NEXT: mov v17.h[5], w8
+; CHECK-GI-NEXT: uxtb w8, w3
+; CHECK-GI-NEXT: mov v21.h[1], w23
+; CHECK-GI-NEXT: uxtb w30, w30
+; CHECK-GI-NEXT: mov v7.h[7], w6
+; CHECK-GI-NEXT: fmov w6, s23
+; CHECK-GI-NEXT: mov v18.h[2], w22
+; CHECK-GI-NEXT: mov b23, v16.b[1]
+; CHECK-GI-NEXT: fmov w3, s19
+; CHECK-GI-NEXT: fmov w23, s20
+; CHECK-GI-NEXT: mov b20, v16.b[5]
+; CHECK-GI-NEXT: fmov w19, s25
; CHECK-GI-NEXT: mov v17.h[6], w8
-; CHECK-GI-NEXT: fmov w8, s19
-; CHECK-GI-NEXT: fmov s19, w19
+; CHECK-GI-NEXT: uxtb w8, w7
; CHECK-GI-NEXT: mov v21.h[2], w9
-; CHECK-GI-NEXT: uxtb w9, w28
-; CHECK-GI-NEXT: mov v18.h[2], w10
-; CHECK-GI-NEXT: uxtb w10, w6
-; CHECK-GI-NEXT: mov b27, v16.b[9]
-; CHECK-GI-NEXT: fmov w20, s24
-; CHECK-GI-NEXT: uxtb w8, w8
-; CHECK-GI-NEXT: mov b24, v16.b[3]
-; CHECK-GI-NEXT: fmov w5, s20
-; CHECK-GI-NEXT: mov v19.h[1], w10
-; CHECK-GI-NEXT: fmov w10, s23
-; CHECK-GI-NEXT: fmov s23, w7
-; CHECK-GI-NEXT: mov v21.h[3], w9
-; CHECK-GI-NEXT: uxtb w9, w11
-; CHECK-GI-NEXT: uxtb w11, w27
-; CHECK-GI-NEXT: uxtb w27, w30
-; CHECK-GI-NEXT: uxtb w5, w5
+; CHECK-GI-NEXT: mov b25, v16.b[2]
+; CHECK-GI-NEXT: mov b28, v16.b[9]
; CHECK-GI-NEXT: fmov w7, s22
-; CHECK-GI-NEXT: uxtb w10, w10
-; CHECK-GI-NEXT: mov v23.h[1], w9
-; CHECK-GI-NEXT: fmov w9, s16
-; CHECK-GI-NEXT: mov b20, v16.b[10]
-; CHECK-GI-NEXT: fmov w22, s28
-; CHECK-GI-NEXT: fmov w25, s25
-; CHECK-GI-NEXT: uxtb w7, w7
-; CHECK-GI-NEXT: mov v21.h[4], w11
-; CHECK-GI-NEXT: fmov w11, s27
+; CHECK-GI-NEXT: uxtb w19, w19
+; CHECK-GI-NEXT: mov v18.h[3], w4
+; CHECK-GI-NEXT: uxtb w4, w29
+; CHECK-GI-NEXT: uxtb w29, w5
+; CHECK-GI-NEXT: fmov s19, w8
+; CHECK-GI-NEXT: uxtb w8, w26
+; CHECK-GI-NEXT: fmov w9, s23
+; CHECK-GI-NEXT: fmov s23, w4
+; CHECK-GI-NEXT: mov b22, v16.b[11]
+; CHECK-GI-NEXT: mov v21.h[3], w8
+; CHECK-GI-NEXT: uxtb w8, w24
+; CHECK-GI-NEXT: uxtb w24, w25
+; CHECK-GI-NEXT: fmov w25, s16
+; CHECK-GI-NEXT: fmov w5, s20
+; CHECK-GI-NEXT: fmov w27, s25
; CHECK-GI-NEXT: uxtb w9, w9
-; CHECK-GI-NEXT: mov b25, v16.b[5]
-; CHECK-GI-NEXT: fmov w29, s24
-; CHECK-GI-NEXT: fmov s22, w7
-; CHECK-GI-NEXT: mov v23.h[2], w27
-; CHECK-GI-NEXT: mov b24, v16.b[11]
-; CHECK-GI-NEXT: uxtb w11, w11
-; CHECK-GI-NEXT: fmov w27, s20
-; CHECK-GI-NEXT: fmov s20, w9
-; CHECK-GI-NEXT: fmov w26, s29
-; CHECK-GI-NEXT: mov b26, v16.b[4]
-; CHECK-GI-NEXT: mov v19.h[2], w3
-; CHECK-GI-NEXT: uxtb w3, w29
+; CHECK-GI-NEXT: mov v23.h[1], w30
+; CHECK-GI-NEXT: mov b25, v16.b[10]
+; CHECK-GI-NEXT: fmov w20, s29
+; CHECK-GI-NEXT: fmov w21, s26
+; CHECK-GI-NEXT: fmov w22, s24
+; CHECK-GI-NEXT: uxtb w25, w25
+; CHECK-GI-NEXT: uxtb w27, w27
+; CHECK-GI-NEXT: mov v21.h[4], w8
+; CHECK-GI-NEXT: fmov w8, s27
+; CHECK-GI-NEXT: mov b24, v16.b[6]
+; CHECK-GI-NEXT: mov v19.h[1], w29
+; CHECK-GI-NEXT: uxtb w20, w20
+; CHECK-GI-NEXT: uxtb w21, w21
+; CHECK-GI-NEXT: fmov s20, w25
; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v22.h[1], w11
-; CHECK-GI-NEXT: uxtb w11, w15
-; CHECK-GI-NEXT: uxtb w15, w22
-; CHECK-GI-NEXT: uxtb w22, w23
-; CHECK-GI-NEXT: mov v20.h[1], w8
-; CHECK-GI-NEXT: fmov w6, s25
-; CHECK-GI-NEXT: mov v18.h[3], w11
-; CHECK-GI-NEXT: uxtb w11, w27
-; CHECK-GI-NEXT: mov v23.h[3], w15
-; CHECK-GI-NEXT: uxtb w15, w17
-; CHECK-GI-NEXT: uxtb w17, w21
-; CHECK-GI-NEXT: mov b25, v16.b[12]
-; CHECK-GI-NEXT: fmov w28, s24
-; CHECK-GI-NEXT: mov v21.h[5], w22
-; CHECK-GI-NEXT: mov v22.h[2], w11
-; CHECK-GI-NEXT: uxtb w11, w14
-; CHECK-GI-NEXT: uxtb w14, w26
-; CHECK-GI-NEXT: mov v20.h[2], w5
-; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-GI-NEXT: fmov w19, s26
-; CHECK-GI-NEXT: mov v18.h[4], w11
-; CHECK-GI-NEXT: uxtb w11, w28
-; CHECK-GI-NEXT: mov v23.h[4], w14
-; CHECK-GI-NEXT: uxtb w14, w25
-; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v23.h[2], w24
+; CHECK-GI-NEXT: uxtb w8, w8
+; CHECK-GI-NEXT: fmov w24, s28
+; CHECK-GI-NEXT: fmov w25, s25
+; CHECK-GI-NEXT: mov v20.h[1], w9
+; CHECK-GI-NEXT: fmov w9, s22
+; CHECK-GI-NEXT: mov b26, v16.b[3]
+; CHECK-GI-NEXT: fmov s22, w8
+; CHECK-GI-NEXT: fmov w4, s24
+; CHECK-GI-NEXT: mov b24, v16.b[12]
+; CHECK-GI-NEXT: uxtb w24, w24
+; CHECK-GI-NEXT: uxtb w25, w25
+; CHECK-GI-NEXT: mov v23.h[3], w20
+; CHECK-GI-NEXT: uxtb w9, w9
+; CHECK-GI-NEXT: mov v19.h[2], w18
+; CHECK-GI-NEXT: uxtb w18, w28
+; CHECK-GI-NEXT: mov v22.h[1], w24
+; CHECK-GI-NEXT: fmov w26, s26
+; CHECK-GI-NEXT: mov v21.h[5], w21
+; CHECK-GI-NEXT: mov v20.h[2], w27
; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v23.h[4], w18
; CHECK-GI-NEXT: mov b26, v16.b[13]
-; CHECK-GI-NEXT: fmov w7, s25
-; CHECK-GI-NEXT: mov v19.h[3], w15
-; CHECK-GI-NEXT: uxtb w15, w18
-; CHECK-GI-NEXT: uxtb w18, w19
-; CHECK-GI-NEXT: mov v21.h[6], w17
-; CHECK-GI-NEXT: uxtb w17, w20
-; CHECK-GI-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v22.h[3], w11
-; CHECK-GI-NEXT: uxtb w11, w2
-; CHECK-GI-NEXT: mov v20.h[3], w3
-; CHECK-GI-NEXT: mov v23.h[5], w14
-; CHECK-GI-NEXT: uxtb w14, w24
-; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v18.h[5], w11
-; CHECK-GI-NEXT: uxtb w11, w7
-; CHECK-GI-NEXT: fmov w8, s26
-; CHECK-GI-NEXT: mov v19.h[4], w15
-; CHECK-GI-NEXT: ldr w15, [sp] // 4-byte Reload
-; CHECK-GI-NEXT: mov v21.h[7], w17
-; CHECK-GI-NEXT: uxtb w17, w6
-; CHECK-GI-NEXT: mov v22.h[4], w11
-; CHECK-GI-NEXT: ldr w11, [sp, #8] // 4-byte Reload
+; CHECK-GI-NEXT: fmov w8, s24
+; CHECK-GI-NEXT: uxtb w21, w26
+; CHECK-GI-NEXT: mov v19.h[3], w17
+; CHECK-GI-NEXT: uxtb w17, w7
+; CHECK-GI-NEXT: mov v22.h[2], w25
+; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
; CHECK-GI-NEXT: uxtb w8, w8
-; CHECK-GI-NEXT: uxtb w15, w15
-; CHECK-GI-NEXT: fmov w13, s30
-; CHECK-GI-NEXT: uxtb w11, w11
-; CHECK-GI-NEXT: mov v20.h[4], w18
-; CHECK-GI-NEXT: mov v23.h[6], w14
-; CHECK-GI-NEXT: mov v19.h[5], w16
-; CHECK-GI-NEXT: mov b27, v16.b[14]
-; CHECK-GI-NEXT: mul v24.8h, v7.8h, v21.8h
+; CHECK-GI-NEXT: mov v18.h[4], w14
+; CHECK-GI-NEXT: uxtb w14, w16
+; CHECK-GI-NEXT: uxtb w16, w6
+; CHECK-GI-NEXT: mov v21.h[6], w19
+; CHECK-GI-NEXT: mov v20.h[3], w21
+; CHECK-GI-NEXT: fmov w24, s26
+; CHECK-GI-NEXT: mov v19.h[4], w14
+; CHECK-GI-NEXT: uxtb w14, w5
+; CHECK-GI-NEXT: mov v22.h[3], w9
+; CHECK-GI-NEXT: uxtb w9, w11
+; CHECK-GI-NEXT: uxtb w11, w23
+; CHECK-GI-NEXT: mov b25, v16.b[14]
+; CHECK-GI-NEXT: fmov w12, s30
+; CHECK-GI-NEXT: movi d4, #0000000000000000
+; CHECK-GI-NEXT: mov v23.h[5], w11
+; CHECK-GI-NEXT: uxtb w11, w15
+; CHECK-GI-NEXT: mov v18.h[5], w9
+; CHECK-GI-NEXT: uxtb w9, w22
+; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v21.h[7], w16
+; CHECK-GI-NEXT: mov v22.h[4], w8
+; CHECK-GI-NEXT: uxtb w8, w2
+; CHECK-GI-NEXT: mov v20.h[4], w17
+; CHECK-GI-NEXT: mov v19.h[5], w11
+; CHECK-GI-NEXT: uxtb w11, w4
+; CHECK-GI-NEXT: mov v17.h[7], w8
+; CHECK-GI-NEXT: uxtb w8, w24
+; CHECK-GI-NEXT: mov v23.h[6], w9
+; CHECK-GI-NEXT: uxtb w9, w13
+; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; CHECK-GI-NEXT: mov v22.h[5], w8
-; CHECK-GI-NEXT: uxtb w8, w4
+; CHECK-GI-NEXT: uxtb w8, w3
+; CHECK-GI-NEXT: mul v24.8h, v7.8h, v21.8h
; CHECK-GI-NEXT: mov b7, v16.b[7]
; CHECK-GI-NEXT: mov b16, v16.b[15]
-; CHECK-GI-NEXT: fmov w12, s31
-; CHECK-GI-NEXT: mov v17.h[7], w11
-; CHECK-GI-NEXT: uxtb w11, w13
-; CHECK-GI-NEXT: ldr w13, [sp, #4] // 4-byte Reload
-; CHECK-GI-NEXT: mov v20.h[5], w17
+; CHECK-GI-NEXT: mov v20.h[5], w14
; CHECK-GI-NEXT: mov v23.h[7], w8
-; CHECK-GI-NEXT: fmov w9, s27
-; CHECK-GI-NEXT: mov v18.h[6], w15
; CHECK-GI-NEXT: uxtb w8, w12
-; CHECK-GI-NEXT: uxtb w13, w13
-; CHECK-GI-NEXT: mov v19.h[6], w11
+; CHECK-GI-NEXT: mov v19.h[6], w9
+; CHECK-GI-NEXT: fmov w20, s25
+; CHECK-GI-NEXT: mov v18.h[6], w10
+; CHECK-GI-NEXT: ldr w10, [sp, #8] // 4-byte Reload
+; CHECK-GI-NEXT: mov v5.s[1], wzr
+; CHECK-GI-NEXT: mov v6.s[1], wzr
+; CHECK-GI-NEXT: mov v0.s[1], wzr
+; CHECK-GI-NEXT: uxtb w10, w10
; CHECK-GI-NEXT: fmov w12, s16
+; CHECK-GI-NEXT: mov v20.h[6], w11
+; CHECK-GI-NEXT: uxtb w9, w20
+; CHECK-GI-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; CHECK-GI-NEXT: fmov w11, s7
-; CHECK-GI-NEXT: movi d4, #0000000000000000
-; CHECK-GI-NEXT: uxtb w9, w9
-; CHECK-GI-NEXT: mov v20.h[6], w10
-; CHECK-GI-NEXT: umov w10, v24.h[0]
; CHECK-GI-NEXT: mul v21.8h, v17.8h, v23.8h
-; CHECK-GI-NEXT: mov v18.h[7], w13
-; CHECK-GI-NEXT: mov v5.s[1], wzr
-; CHECK-GI-NEXT: uxtb w11, w11
; CHECK-GI-NEXT: mov v19.h[7], w8
; CHECK-GI-NEXT: uxtb w8, w12
; CHECK-GI-NEXT: umov w12, v24.h[4]
+; CHECK-GI-NEXT: mov v18.h[7], w10
+; CHECK-GI-NEXT: umov w10, v24.h[0]
; CHECK-GI-NEXT: mov v22.h[6], w9
; CHECK-GI-NEXT: umov w9, v24.h[1]
-; CHECK-GI-NEXT: mov v20.h[7], w11
-; CHECK-GI-NEXT: umov w11, v24.h[5]
-; CHECK-GI-NEXT: fmov s7, w10
-; CHECK-GI-NEXT: ldrb w10, [x1, #32]
+; CHECK-GI-NEXT: uxtb w11, w11
+; CHECK-GI-NEXT: mov v1.s[1], wzr
+; CHECK-GI-NEXT: mov v3.s[1], wzr
; CHECK-GI-NEXT: umov w13, v21.h[0]
; CHECK-GI-NEXT: umov w14, v21.h[1]
; CHECK-GI-NEXT: umov w15, v21.h[4]
-; CHECK-GI-NEXT: mov v6.s[1], wzr
-; CHECK-GI-NEXT: mov v0.s[1], wzr
+; CHECK-GI-NEXT: mov v20.h[7], w11
+; CHECK-GI-NEXT: umov w11, v24.h[5]
; CHECK-GI-NEXT: fmov s16, w12
+; CHECK-GI-NEXT: fmov s7, w10
+; CHECK-GI-NEXT: ldrb w10, [x1, #32]
; CHECK-GI-NEXT: mov v22.h[7], w8
; CHECK-GI-NEXT: umov w12, v24.h[6]
; CHECK-GI-NEXT: umov w8, v24.h[2]
-; CHECK-GI-NEXT: mov v7.s[1], w9
-; CHECK-GI-NEXT: ldrb w9, [x0, #32]
+; CHECK-GI-NEXT: mov v2.s[1], wzr
; CHECK-GI-NEXT: fmov s17, w13
-; CHECK-GI-NEXT: mul v23.8h, v18.8h, v20.8h
; CHECK-GI-NEXT: umov w13, v24.h[7]
+; CHECK-GI-NEXT: mov v4.s[1], wzr
; CHECK-GI-NEXT: mov v16.s[1], w11
+; CHECK-GI-NEXT: mov v7.s[1], w9
+; CHECK-GI-NEXT: ldrb w9, [x0, #32]
+; CHECK-GI-NEXT: mul v23.8h, v18.8h, v20.8h
; CHECK-GI-NEXT: umov w11, v21.h[5]
-; CHECK-GI-NEXT: fmov s18, w15
; CHECK-GI-NEXT: mul v19.8h, v19.8h, v22.8h
-; CHECK-GI-NEXT: umov w15, v21.h[6]
-; CHECK-GI-NEXT: mov v1.s[1], wzr
; CHECK-GI-NEXT: mov v17.s[1], w14
; CHECK-GI-NEXT: umov w14, v21.h[2]
+; CHECK-GI-NEXT: fmov s18, w15
+; CHECK-GI-NEXT: umov w15, v21.h[6]
+; CHECK-GI-NEXT: mov v5.s[2], wzr
+; CHECK-GI-NEXT: mov v6.s[2], wzr
+; CHECK-GI-NEXT: mov v16.s[2], w12
; CHECK-GI-NEXT: mov v7.s[2], w8
; CHECK-GI-NEXT: mul w8, w10, w9
; CHECK-GI-NEXT: umov w9, v23.h[0]
-; CHECK-GI-NEXT: umov w10, v23.h[1]
-; CHECK-GI-NEXT: mov v16.s[2], w12
; CHECK-GI-NEXT: umov w12, v21.h[3]
; CHECK-GI-NEXT: mov v18.s[1], w11
-; CHECK-GI-NEXT: umov w11, v23.h[4]
-; CHECK-GI-NEXT: mov v3.s[1], wzr
-; CHECK-GI-NEXT: mov v2.s[1], wzr
; CHECK-GI-NEXT: mov v17.s[2], w14
+; CHECK-GI-NEXT: umov w11, v23.h[4]
+; CHECK-GI-NEXT: umov w10, v23.h[1]
; CHECK-GI-NEXT: umov w14, v23.h[5]
-; CHECK-GI-NEXT: mov v4.s[1], wzr
-; CHECK-GI-NEXT: fmov s20, w9
-; CHECK-GI-NEXT: umov w9, v19.h[1]
-; CHECK-GI-NEXT: mov v5.s[2], wzr
+; CHECK-GI-NEXT: umov w16, v24.h[3]
+; CHECK-GI-NEXT: mov v0.s[2], wzr
; CHECK-GI-NEXT: mov v16.s[3], w13
; CHECK-GI-NEXT: umov w13, v19.h[0]
+; CHECK-GI-NEXT: mov v1.s[2], wzr
+; CHECK-GI-NEXT: fmov s20, w9
+; CHECK-GI-NEXT: umov w9, v19.h[1]
; CHECK-GI-NEXT: mov v18.s[2], w15
+; CHECK-GI-NEXT: mov v17.s[3], w12
+; CHECK-GI-NEXT: umov w12, v19.h[4]
; CHECK-GI-NEXT: umov w15, v21.h[7]
; CHECK-GI-NEXT: fmov s21, w11
; CHECK-GI-NEXT: umov w11, v23.h[2]
-; CHECK-GI-NEXT: mov v17.s[3], w12
-; CHECK-GI-NEXT: umov w12, v19.h[4]
-; CHECK-GI-NEXT: mov v20.s[1], w10
-; CHECK-GI-NEXT: umov w10, v23.h[3]
-; CHECK-GI-NEXT: mov v6.s[2], wzr
-; CHECK-GI-NEXT: umov w16, v24.h[3]
+; CHECK-GI-NEXT: mov v3.s[2], wzr
; CHECK-GI-NEXT: fmov s22, w13
+; CHECK-GI-NEXT: mov v20.s[1], w10
; CHECK-GI-NEXT: umov w13, v19.h[5]
+; CHECK-GI-NEXT: umov w10, v23.h[3]
+; CHECK-GI-NEXT: mov v2.s[2], wzr
+; CHECK-GI-NEXT: mov v4.s[2], wzr
; CHECK-GI-NEXT: mov v21.s[1], w14
; CHECK-GI-NEXT: umov w14, v23.h[6]
; CHECK-GI-NEXT: mov v18.s[3], w15
-; CHECK-GI-NEXT: umov w15, v19.h[2]
-; CHECK-GI-NEXT: mov v20.s[2], w11
-; CHECK-GI-NEXT: umov w11, v19.h[6]
-; CHECK-GI-NEXT: mov v0.s[2], wzr
; CHECK-GI-NEXT: mov v22.s[1], w9
; CHECK-GI-NEXT: umov w9, v23.h[7]
; CHECK-GI-NEXT: fmov s23, w12
+; CHECK-GI-NEXT: mov v20.s[2], w11
+; CHECK-GI-NEXT: umov w11, v19.h[6]
+; CHECK-GI-NEXT: umov w15, v19.h[2]
; CHECK-GI-NEXT: umov w12, v19.h[3]
-; CHECK-GI-NEXT: mov v1.s[2], wzr
-; CHECK-GI-NEXT: mov v3.s[2], wzr
-; CHECK-GI-NEXT: mov v21.s[2], w14
-; CHECK-GI-NEXT: mov v2.s[2], wzr
-; CHECK-GI-NEXT: mov v4.s[2], wzr
-; CHECK-GI-NEXT: mov v23.s[1], w13
; CHECK-GI-NEXT: mov v5.s[3], wzr
; CHECK-GI-NEXT: mov v6.s[3], wzr
-; CHECK-GI-NEXT: mov v22.s[2], w15
+; CHECK-GI-NEXT: mov v23.s[1], w13
+; CHECK-GI-NEXT: mov v21.s[2], w14
; CHECK-GI-NEXT: mov v7.s[3], w16
-; CHECK-GI-NEXT: mov v20.s[3], w10
; CHECK-GI-NEXT: mov v0.s[3], wzr
; CHECK-GI-NEXT: mov v1.s[3], wzr
; CHECK-GI-NEXT: mov v3.s[3], wzr
-; CHECK-GI-NEXT: mov v21.s[3], w9
-; CHECK-GI-NEXT: ldr w9, [sp, #12] // 4-byte Reload
+; CHECK-GI-NEXT: mov v22.s[2], w15
+; CHECK-GI-NEXT: mov v20.s[3], w10
; CHECK-GI-NEXT: mov v2.s[3], wzr
+; CHECK-GI-NEXT: mov v4.s[3], wzr
+; CHECK-GI-NEXT: add v5.4s, v5.4s, v6.4s
; CHECK-GI-NEXT: mov v23.s[2], w11
; CHECK-GI-NEXT: umov w11, v19.h[7]
; CHECK-GI-NEXT: fmov s19, w8
-; CHECK-GI-NEXT: mov v22.s[3], w12
-; CHECK-GI-NEXT: mov v4.s[3], wzr
-; CHECK-GI-NEXT: add v5.4s, v5.4s, v6.4s
+; CHECK-GI-NEXT: mov v21.s[3], w9
+; CHECK-GI-NEXT: ldr w9, [sp, #12] // 4-byte Reload
; CHECK-GI-NEXT: add v6.4s, v7.4s, v16.4s
+; CHECK-GI-NEXT: mov v22.s[3], w12
; CHECK-GI-NEXT: add v7.4s, v17.4s, v18.4s
; CHECK-GI-NEXT: add v1.4s, v1.4s, v3.4s
; CHECK-GI-NEXT: mov v19.s[1], wzr
-; CHECK-GI-NEXT: add v16.4s, v20.4s, v21.4s
-; CHECK-GI-NEXT: mov v23.s[3], w11
-; CHECK-GI-NEXT: add v0.4s, v0.4s, v5.4s
; CHECK-GI-NEXT: add v2.4s, v2.4s, v4.4s
+; CHECK-GI-NEXT: add v0.4s, v0.4s, v5.4s
+; CHECK-GI-NEXT: mov v23.s[3], w11
+; CHECK-GI-NEXT: add v16.4s, v20.4s, v21.4s
; CHECK-GI-NEXT: add v3.4s, v6.4s, v7.4s
+; CHECK-GI-NEXT: add v1.4s, v1.4s, v2.4s
; CHECK-GI-NEXT: mov v19.s[2], wzr
; CHECK-GI-NEXT: add v17.4s, v22.4s, v23.4s
-; CHECK-GI-NEXT: add v1.4s, v1.4s, v2.4s
; CHECK-GI-NEXT: mov v19.s[3], wzr
; CHECK-GI-NEXT: add v4.4s, v16.4s, v17.4s
; CHECK-GI-NEXT: add v2.4s, v3.4s, v4.4s
@@ -4932,126 +4930,121 @@ define i32 @test_udot_v33i8_nomla(ptr nocapture readonly %a1) {
;
; CHECK-GI-LABEL: test_udot_v33i8_nomla:
; CHECK-GI: // %bb.0: // %entry
-; CHECK-GI-NEXT: stp x20, x19, [sp, #-16]! // 16-byte Folded Spill
-; CHECK-GI-NEXT: .cfi_def_cfa_offset 16
-; CHECK-GI-NEXT: .cfi_offset w19, -8
-; CHECK-GI-NEXT: .cfi_offset w20, -16
-; CHECK-GI-NEXT: ldp q7, q19, [x0]
+; CHECK-GI-NEXT: ldp q21, q7, [x0]
; CHECK-GI-NEXT: movi d1, #0000000000000000
-; CHECK-GI-NEXT: ldrb w10, [x0, #32]
; CHECK-GI-NEXT: movi d0, #0000000000000000
; CHECK-GI-NEXT: movi d3, #0000000000000000
; CHECK-GI-NEXT: movi d2, #0000000000000000
; CHECK-GI-NEXT: movi d5, #0000000000000000
; CHECK-GI-NEXT: movi d4, #0000000000000000
-; CHECK-GI-NEXT: umov w15, v7.b[8]
-; CHECK-GI-NEXT: umov w2, v7.b[12]
-; CHECK-GI-NEXT: umov w16, v7.b[9]
-; CHECK-GI-NEXT: umov w4, v7.b[13]
-; CHECK-GI-NEXT: umov w8, v7.b[0]
-; CHECK-GI-NEXT: umov w12, v7.b[4]
-; CHECK-GI-NEXT: umov w9, v7.b[1]
-; CHECK-GI-NEXT: umov w14, v7.b[5]
-; CHECK-GI-NEXT: umov w3, v7.b[10]
-; CHECK-GI-NEXT: umov w5, v7.b[14]
-; CHECK-GI-NEXT: umov w11, v7.b[2]
-; CHECK-GI-NEXT: umov w17, v7.b[3]
-; CHECK-GI-NEXT: fmov s17, w15
-; CHECK-GI-NEXT: fmov s18, w2
-; CHECK-GI-NEXT: umov w13, v7.b[6]
-; CHECK-GI-NEXT: umov w18, v7.b[7]
-; CHECK-GI-NEXT: umov w0, v7.b[11]
-; CHECK-GI-NEXT: umov w1, v7.b[15]
-; CHECK-GI-NEXT: fmov s7, w8
-; CHECK-GI-NEXT: fmov s16, w12
-; CHECK-GI-NEXT: umov w2, v19.b[0]
-; CHECK-GI-NEXT: mov v17.s[1], w16
-; CHECK-GI-NEXT: mov v18.s[1], w4
-; CHECK-GI-NEXT: umov w4, v19.b[4]
; CHECK-GI-NEXT: movi d6, #0000000000000000
-; CHECK-GI-NEXT: umov w6, v19.b[1]
-; CHECK-GI-NEXT: umov w7, v19.b[5]
-; CHECK-GI-NEXT: mov v7.s[1], w9
-; CHECK-GI-NEXT: mov v16.s[1], w14
-; CHECK-GI-NEXT: umov w19, v19.b[9]
-; CHECK-GI-NEXT: umov w20, v19.b[13]
-; CHECK-GI-NEXT: umov w12, v19.b[2]
-; CHECK-GI-NEXT: umov w8, v19.b[3]
-; CHECK-GI-NEXT: mov v17.s[2], w3
-; CHECK-GI-NEXT: umov w3, v19.b[8]
-; CHECK-GI-NEXT: mov v18.s[2], w5
-; CHECK-GI-NEXT: umov w5, v19.b[12]
-; CHECK-GI-NEXT: umov w14, v19.b[6]
-; CHECK-GI-NEXT: umov w9, v19.b[7]
-; CHECK-GI-NEXT: mov v7.s[2], w11
-; CHECK-GI-NEXT: mov v16.s[2], w13
-; CHECK-GI-NEXT: umov w15, v19.b[10]
-; CHECK-GI-NEXT: umov w11, v19.b[11]
-; CHECK-GI-NEXT: umov w16, v19.b[14]
-; CHECK-GI-NEXT: umov w13, v19.b[15]
-; CHECK-GI-NEXT: fmov s19, w2
-; CHECK-GI-NEXT: fmov s20, w4
-; CHECK-GI-NEXT: fmov s21, w3
-; CHECK-GI-NEXT: fmov s22, w5
-; CHECK-GI-NEXT: fmov s23, w10
+; CHECK-GI-NEXT: umov w9, v21.b[0]
+; CHECK-GI-NEXT: umov w13, v21.b[8]
+; CHECK-GI-NEXT: umov w11, v21.b[4]
+; CHECK-GI-NEXT: umov w10, v21.b[1]
+; CHECK-GI-NEXT: umov w12, v21.b[5]
+; CHECK-GI-NEXT: umov w15, v21.b[9]
+; CHECK-GI-NEXT: umov w14, v21.b[2]
+; CHECK-GI-NEXT: umov w8, v21.b[3]
+; CHECK-GI-NEXT: umov w16, v7.b[12]
; CHECK-GI-NEXT: mov v1.s[1], wzr
; CHECK-GI-NEXT: mov v0.s[1], wzr
; CHECK-GI-NEXT: mov v3.s[1], wzr
+; CHECK-GI-NEXT: fmov s16, w9
+; CHECK-GI-NEXT: umov w9, v21.b[12]
+; CHECK-GI-NEXT: fmov s18, w13
+; CHECK-GI-NEXT: umov w13, v7.b[0]
+; CHECK-GI-NEXT: fmov s17, w11
+; CHECK-GI-NEXT: umov w11, v21.b[13]
+; CHECK-GI-NEXT: fmov s23, w16
; CHECK-GI-NEXT: mov v2.s[1], wzr
-; CHECK-GI-NEXT: mov v19.s[1], w6
-; CHECK-GI-NEXT: mov v20.s[1], w7
-; CHECK-GI-NEXT: mov v21.s[1], w19
-; CHECK-GI-NEXT: mov v22.s[1], w20
-; CHECK-GI-NEXT: mov v23.s[1], wzr
; CHECK-GI-NEXT: mov v5.s[1], wzr
+; CHECK-GI-NEXT: mov v16.s[1], w10
+; CHECK-GI-NEXT: umov w10, v21.b[6]
+; CHECK-GI-NEXT: mov v18.s[1], w15
+; CHECK-GI-NEXT: fmov s19, w9
+; CHECK-GI-NEXT: umov w9, v7.b[1]
+; CHECK-GI-NEXT: mov v17.s[1], w12
+; CHECK-GI-NEXT: umov w12, v21.b[10]
+; CHECK-GI-NEXT: fmov s20, w13
+; CHECK-GI-NEXT: umov w15, v21.b[14]
+; CHECK-GI-NEXT: umov w13, v21.b[15]
; CHECK-GI-NEXT: mov v4.s[1], wzr
; CHECK-GI-NEXT: mov v6.s[1], wzr
+; CHECK-GI-NEXT: mov v19.s[1], w11
+; CHECK-GI-NEXT: umov w11, v7.b[4]
+; CHECK-GI-NEXT: mov v16.s[2], w14
+; CHECK-GI-NEXT: mov v20.s[1], w9
+; CHECK-GI-NEXT: umov w9, v7.b[2]
+; CHECK-GI-NEXT: mov v17.s[2], w10
+; CHECK-GI-NEXT: umov w10, v7.b[5]
+; CHECK-GI-NEXT: mov v18.s[2], w12
+; CHECK-GI-NEXT: umov w12, v21.b[11]
+; CHECK-GI-NEXT: umov w14, v21.b[7]
; CHECK-GI-NEXT: mov v1.s[2], wzr
; CHECK-GI-NEXT: mov v0.s[2], wzr
+; CHECK-GI-NEXT: mov v19.s[2], w15
+; CHECK-GI-NEXT: umov w15, v7.b[8]
+; CHECK-GI-NEXT: fmov s21, w11
+; CHECK-GI-NEXT: mov v20.s[2], w9
+; CHECK-GI-NEXT: ldrb w9, [x0, #32]
+; CHECK-GI-NEXT: umov w11, v7.b[6]
+; CHECK-GI-NEXT: mov v18.s[3], w12
+; CHECK-GI-NEXT: umov w12, v7.b[13]
+; CHECK-GI-NEXT: mov v16.s[3], w8
+; CHECK-GI-NEXT: mov v21.s[1], w10
+; CHECK-GI-NEXT: umov w10, v7.b[9]
+; CHECK-GI-NEXT: fmov s24, w9
+; CHECK-GI-NEXT: fmov s22, w15
+; CHECK-GI-NEXT: umov w8, v7.b[3]
+; CHECK-GI-NEXT: umov w9, v7.b[7]
; CHECK-GI-NEXT: mov v3.s[2], wzr
; CHECK-GI-NEXT: mov v2.s[2], wzr
-; CHECK-GI-NEXT: mov v19.s[2], w12
-; CHECK-GI-NEXT: mov v20.s[2], w14
-; CHECK-GI-NEXT: mov v21.s[2], w15
-; CHECK-GI-NEXT: mov v22.s[2], w16
-; CHECK-GI-NEXT: mov v23.s[2], wzr
; CHECK-GI-NEXT: mov v5.s[2], wzr
+; CHECK-GI-NEXT: mov v23.s[1], w12
+; CHECK-GI-NEXT: mov v24.s[1], wzr
; CHECK-GI-NEXT: mov v4.s[2], wzr
+; CHECK-GI-NEXT: mov v21.s[2], w11
+; CHECK-GI-NEXT: mov v22.s[1], w10
+; CHECK-GI-NEXT: umov w10, v7.b[10]
+; CHECK-GI-NEXT: umov w11, v7.b[14]
; CHECK-GI-NEXT: mov v6.s[2], wzr
-; CHECK-GI-NEXT: mov v7.s[3], w17
-; CHECK-GI-NEXT: mov v16.s[3], w18
-; CHECK-GI-NEXT: mov v17.s[3], w0
-; CHECK-GI-NEXT: mov v18.s[3], w1
-; CHECK-GI-NEXT: mov v19.s[3], w8
-; CHECK-GI-NEXT: mov v20.s[3], w9
-; CHECK-GI-NEXT: mov v21.s[3], w11
-; CHECK-GI-NEXT: mov v22.s[3], w13
-; CHECK-GI-NEXT: mov v23.s[3], wzr
+; CHECK-GI-NEXT: mov v17.s[3], w14
+; CHECK-GI-NEXT: mov v19.s[3], w13
+; CHECK-GI-NEXT: mov v20.s[3], w8
; CHECK-GI-NEXT: mov v1.s[3], wzr
+; CHECK-GI-NEXT: mov v24.s[2], wzr
; CHECK-GI-NEXT: mov v0.s[3], wzr
; CHECK-GI-NEXT: mov v3.s[3], wzr
+; CHECK-GI-NEXT: mov v22.s[2], w10
+; CHECK-GI-NEXT: umov w10, v7.b[11]
+; CHECK-GI-NEXT: mov v21.s[3], w9
+; CHECK-GI-NEXT: mov v23.s[2], w11
+; CHECK-GI-NEXT: umov w11, v7.b[15]
; CHECK-GI-NEXT: mov v2.s[3], wzr
; CHECK-GI-NEXT: mov v5.s[3], wzr
; CHECK-GI-NEXT: mov v4.s[3], wzr
; CHECK-GI-NEXT: mov v6.s[3], wzr
-; CHECK-GI-NEXT: add v7.4s, v7.4s, v16.4s
-; CHECK-GI-NEXT: add v16.4s, v17.4s, v18.4s
-; CHECK-GI-NEXT: add v17.4s, v19.4s, v20.4s
-; CHECK-GI-NEXT: add v18.4s, v21.4s, v22.4s
-; CHECK-GI-NEXT: add v1.4s, v23.4s, v1.4s
+; CHECK-GI-NEXT: mov v24.s[3], wzr
+; CHECK-GI-NEXT: add v7.4s, v16.4s, v17.4s
+; CHECK-GI-NEXT: add v16.4s, v18.4s, v19.4s
+; CHECK-GI-NEXT: mov v22.s[3], w10
+; CHECK-GI-NEXT: add v17.4s, v20.4s, v21.4s
; CHECK-GI-NEXT: add v0.4s, v0.4s, v3.4s
+; CHECK-GI-NEXT: mov v23.s[3], w11
; CHECK-GI-NEXT: add v2.4s, v2.4s, v5.4s
; CHECK-GI-NEXT: add v3.4s, v4.4s, v6.4s
; CHECK-GI-NEXT: add v4.4s, v7.4s, v16.4s
-; CHECK-GI-NEXT: add v5.4s, v17.4s, v18.4s
+; CHECK-GI-NEXT: add v1.4s, v24.4s, v1.4s
+; CHECK-GI-NEXT: add v18.4s, v22.4s, v23.4s
; CHECK-GI-NEXT: add v0.4s, v1.4s, v0.4s
; CHECK-GI-NEXT: add v1.4s, v2.4s, v3.4s
-; CHECK-GI-NEXT: add v2.4s, v4.4s, v5.4s
+; CHECK-GI-NEXT: add v5.4s, v17.4s, v18.4s
; CHECK-GI-NEXT: add v0.4s, v0.4s, v1.4s
+; CHECK-GI-NEXT: add v2.4s, v4.4s, v5.4s
; CHECK-GI-NEXT: add v0.4s, v2.4s, v0.4s
; CHECK-GI-NEXT: addv s0, v0.4s
; CHECK-GI-NEXT: fmov w0, s0
-; CHECK-GI-NEXT: ldp x20, x19, [sp], #16 // 16-byte Folded Reload
; CHECK-GI-NEXT: ret
entry:
%0 = load <33 x i8>, ptr %a1
@@ -5089,7 +5082,7 @@ define i32 @test_sdot_v33i8(ptr nocapture readonly %a, ptr nocapture readonly %b
;
; CHECK-GI-LABEL: test_sdot_v33i8:
; CHECK-GI: // %bb.0: // %entry
-; CHECK-GI-NEXT: sub sp, sp, #112
+; CHECK-GI-NEXT: str d8, [sp, #-112]! // 8-byte Folded Spill
; CHECK-GI-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
; CHECK-GI-NEXT: stp x28, x27, [sp, #32] // 16-byte Folded Spill
; CHECK-GI-NEXT: stp x26, x25, [sp, #48] // 16-byte Folded Spill
@@ -5109,7 +5102,8 @@ define i32 @test_sdot_v33i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: .cfi_offset w28, -80
; CHECK-GI-NEXT: .cfi_offset w30, -88
; CHECK-GI-NEXT: .cfi_offset w29, -96
-; CHECK-GI-NEXT: ldp q7, q16, [x1]
+; CHECK-GI-NEXT: .cfi_offset b8, -112
+; CHECK-GI-NEXT: ldp q17, q16, [x1]
; CHECK-GI-NEXT: movi d1, #0000000000000000
; CHECK-GI-NEXT: str w2, [sp, #12] // 4-byte Spill
; CHECK-GI-NEXT: movi d3, #0000000000000000
@@ -5117,340 +5111,339 @@ define i32 @test_sdot_v33i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: movi d5, #0000000000000000
; CHECK-GI-NEXT: movi d4, #0000000000000000
; CHECK-GI-NEXT: movi d6, #0000000000000000
-; CHECK-GI-NEXT: mov b19, v7.b[3]
-; CHECK-GI-NEXT: mov b23, v7.b[7]
-; CHECK-GI-NEXT: mov b17, v7.b[1]
-; CHECK-GI-NEXT: fmov w11, s7
-; CHECK-GI-NEXT: mov b18, v7.b[2]
-; CHECK-GI-NEXT: mov b20, v7.b[4]
-; CHECK-GI-NEXT: mov b21, v7.b[5]
-; CHECK-GI-NEXT: mov b22, v7.b[6]
-; CHECK-GI-NEXT: mov b24, v7.b[8]
-; CHECK-GI-NEXT: mov b25, v7.b[9]
-; CHECK-GI-NEXT: mov b26, v7.b[10]
-; CHECK-GI-NEXT: mov b27, v7.b[11]
-; CHECK-GI-NEXT: sxtb w11, w11
-; CHECK-GI-NEXT: mov b28, v7.b[12]
-; CHECK-GI-NEXT: fmov w14, s19
-; CHECK-GI-NEXT: mov b19, v7.b[13]
-; CHECK-GI-NEXT: mov b29, v7.b[14]
-; CHECK-GI-NEXT: mov b7, v7.b[15]
-; CHECK-GI-NEXT: fmov w7, s23
-; CHECK-GI-NEXT: mov b23, v16.b[6]
-; CHECK-GI-NEXT: fmov w10, s17
-; CHECK-GI-NEXT: fmov w9, s18
-; CHECK-GI-NEXT: fmov w8, s24
-; CHECK-GI-NEXT: mov b30, v16.b[1]
-; CHECK-GI-NEXT: fmov w16, s25
-; CHECK-GI-NEXT: fmov w12, s20
-; CHECK-GI-NEXT: fmov w24, s21
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: sxtb w7, w7
-; CHECK-GI-NEXT: fmov w22, s22
-; CHECK-GI-NEXT: stp s23, s7, [sp, #4] // 8-byte Folded Spill
-; CHECK-GI-NEXT: sxtb w9, w9
+; CHECK-GI-NEXT: mov b18, v17.b[1]
+; CHECK-GI-NEXT: fmov w8, s17
+; CHECK-GI-NEXT: mov b7, v17.b[11]
+; CHECK-GI-NEXT: mov b19, v17.b[2]
+; CHECK-GI-NEXT: mov b20, v17.b[3]
+; CHECK-GI-NEXT: mov b21, v17.b[4]
+; CHECK-GI-NEXT: mov b26, v17.b[8]
+; CHECK-GI-NEXT: mov b22, v17.b[5]
+; CHECK-GI-NEXT: mov b27, v17.b[9]
; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: fmov s7, w11
-; CHECK-GI-NEXT: mov b20, v16.b[2]
-; CHECK-GI-NEXT: mov b17, v16.b[3]
-; CHECK-GI-NEXT: mov b21, v16.b[4]
-; CHECK-GI-NEXT: mov b18, v16.b[5]
-; CHECK-GI-NEXT: fmov w27, s26
-; CHECK-GI-NEXT: fmov w25, s27
-; CHECK-GI-NEXT: mov b22, v16.b[7]
-; CHECK-GI-NEXT: fmov w26, s28
-; CHECK-GI-NEXT: mov v7.h[1], w10
-; CHECK-GI-NEXT: sxtb w10, w16
-; CHECK-GI-NEXT: mov b25, v16.b[8]
-; CHECK-GI-NEXT: fmov w23, s19
-; CHECK-GI-NEXT: mov b24, v16.b[9]
-; CHECK-GI-NEXT: fmov w5, s29
-; CHECK-GI-NEXT: mov b26, v16.b[10]
-; CHECK-GI-NEXT: mov b19, v16.b[11]
-; CHECK-GI-NEXT: fmov w6, s30
-; CHECK-GI-NEXT: mov b27, v16.b[12]
-; CHECK-GI-NEXT: mov b28, v16.b[13]
-; CHECK-GI-NEXT: mov b29, v16.b[14]
-; CHECK-GI-NEXT: sxtb w30, w23
-; CHECK-GI-NEXT: sxtb w5, w5
-; CHECK-GI-NEXT: mov v7.h[2], w9
-; CHECK-GI-NEXT: sxtb w9, w14
-; CHECK-GI-NEXT: fmov w20, s16
-; CHECK-GI-NEXT: mov b30, v16.b[15]
-; CHECK-GI-NEXT: fmov s16, w8
-; CHECK-GI-NEXT: sxtb w8, w12
-; CHECK-GI-NEXT: fmov w15, s17
+; CHECK-GI-NEXT: mov b23, v17.b[6]
+; CHECK-GI-NEXT: mov b25, v17.b[7]
; CHECK-GI-NEXT: fmov w11, s18
+; CHECK-GI-NEXT: fmov w24, s7
+; CHECK-GI-NEXT: mov b29, v17.b[12]
+; CHECK-GI-NEXT: fmov s7, w8
+; CHECK-GI-NEXT: fmov w9, s19
+; CHECK-GI-NEXT: fmov w10, s20
+; CHECK-GI-NEXT: fmov w15, s21
+; CHECK-GI-NEXT: fmov w17, s26
+; CHECK-GI-NEXT: mov b19, v17.b[13]
+; CHECK-GI-NEXT: sxtb w11, w11
+; CHECK-GI-NEXT: sxtb w24, w24
+; CHECK-GI-NEXT: mov b30, v17.b[14]
+; CHECK-GI-NEXT: sxtb w8, w9
+; CHECK-GI-NEXT: fmov w12, s22
+; CHECK-GI-NEXT: mov b24, v16.b[3]
+; CHECK-GI-NEXT: sxtb w17, w17
+; CHECK-GI-NEXT: mov v7.h[1], w11
+; CHECK-GI-NEXT: mov b28, v17.b[10]
+; CHECK-GI-NEXT: mov b18, v17.b[15]
+; CHECK-GI-NEXT: mov b17, v16.b[1]
+; CHECK-GI-NEXT: fmov w18, s27
+; CHECK-GI-NEXT: mov b21, v16.b[2]
+; CHECK-GI-NEXT: fmov w21, s23
+; CHECK-GI-NEXT: fmov w7, s25
+; CHECK-GI-NEXT: mov b23, v16.b[4]
+; CHECK-GI-NEXT: mov b22, v16.b[5]
+; CHECK-GI-NEXT: mov b26, v16.b[6]
+; CHECK-GI-NEXT: sxtb w18, w18
+; CHECK-GI-NEXT: mov v7.h[2], w8
+; CHECK-GI-NEXT: sxtb w8, w10
+; CHECK-GI-NEXT: sxtb w28, w7
+; CHECK-GI-NEXT: mov b25, v16.b[7]
+; CHECK-GI-NEXT: mov b27, v16.b[8]
+; CHECK-GI-NEXT: fmov w23, s29
+; CHECK-GI-NEXT: mov b20, v16.b[9]
+; CHECK-GI-NEXT: fmov w22, s19
+; CHECK-GI-NEXT: mov b19, v16.b[10]
+; CHECK-GI-NEXT: fmov w3, s30
+; CHECK-GI-NEXT: mov b29, v16.b[11]
+; CHECK-GI-NEXT: mov v7.h[3], w8
+; CHECK-GI-NEXT: sxtb w8, w15
+; CHECK-GI-NEXT: mov b30, v16.b[12]
+; CHECK-GI-NEXT: sxtb w22, w22
+; CHECK-GI-NEXT: mov b31, v16.b[13]
+; CHECK-GI-NEXT: fmov w14, s24
+; CHECK-GI-NEXT: sxtb w3, w3
+; CHECK-GI-NEXT: mov b24, v16.b[14]
+; CHECK-GI-NEXT: fmov w25, s16
+; CHECK-GI-NEXT: mov b8, v16.b[15]
+; CHECK-GI-NEXT: fmov s16, w17
+; CHECK-GI-NEXT: fmov w16, s28
+; CHECK-GI-NEXT: sxtb w14, w14
+; CHECK-GI-NEXT: mov v7.h[4], w8
+; CHECK-GI-NEXT: sxtb w8, w12
+; CHECK-GI-NEXT: sxtb w25, w25
+; CHECK-GI-NEXT: fmov w2, s18
+; CHECK-GI-NEXT: fmov w19, s17
; CHECK-GI-NEXT: ldp q18, q17, [x0]
-; CHECK-GI-NEXT: mov v7.h[3], w9
-; CHECK-GI-NEXT: sxtb w9, w27
-; CHECK-GI-NEXT: fmov w18, s20
-; CHECK-GI-NEXT: sxtb w15, w15
-; CHECK-GI-NEXT: mov v16.h[1], w10
-; CHECK-GI-NEXT: sxtb w10, w25
-; CHECK-GI-NEXT: mov b20, v18.b[3]
-; CHECK-GI-NEXT: fmov w2, s22
+; CHECK-GI-NEXT: sxtb w15, w16
+; CHECK-GI-NEXT: mov v16.h[1], w18
+; CHECK-GI-NEXT: fmov w11, s22
+; CHECK-GI-NEXT: fmov w6, s20
+; CHECK-GI-NEXT: sxtb w19, w19
+; CHECK-GI-NEXT: mov v7.h[5], w8
+; CHECK-GI-NEXT: sxtb w8, w21
+; CHECK-GI-NEXT: sxtb w21, w23
; CHECK-GI-NEXT: mov b22, v18.b[1]
-; CHECK-GI-NEXT: sxtb w18, w18
-; CHECK-GI-NEXT: fmov w13, s21
+; CHECK-GI-NEXT: mov b20, v18.b[9]
+; CHECK-GI-NEXT: sxtb w6, w6
+; CHECK-GI-NEXT: sxtb w11, w11
+; CHECK-GI-NEXT: fmov w5, s21
+; CHECK-GI-NEXT: mov v16.h[2], w15
+; CHECK-GI-NEXT: fmov w13, s23
+; CHECK-GI-NEXT: fmov w9, s26
+; CHECK-GI-NEXT: mov v7.h[6], w8
+; CHECK-GI-NEXT: fmov w8, s18
; CHECK-GI-NEXT: mov b21, v18.b[2]
-; CHECK-GI-NEXT: mov v7.h[4], w8
-; CHECK-GI-NEXT: fmov w3, s19
-; CHECK-GI-NEXT: mov b19, v18.b[6]
-; CHECK-GI-NEXT: mov v16.h[2], w9
-; CHECK-GI-NEXT: sxtb w9, w24
-; CHECK-GI-NEXT: fmov w21, s25
+; CHECK-GI-NEXT: sxtb w5, w5
+; CHECK-GI-NEXT: mov b23, v18.b[3]
+; CHECK-GI-NEXT: mov b26, v18.b[5]
; CHECK-GI-NEXT: sxtb w13, w13
-; CHECK-GI-NEXT: fmov w28, s20
-; CHECK-GI-NEXT: mov b20, v18.b[11]
-; CHECK-GI-NEXT: fmov w8, s22
-; CHECK-GI-NEXT: mov b25, v18.b[8]
-; CHECK-GI-NEXT: fmov w29, s21
-; CHECK-GI-NEXT: mov v7.h[5], w9
-; CHECK-GI-NEXT: sxtb w9, w22
-; CHECK-GI-NEXT: fmov w19, s24
-; CHECK-GI-NEXT: mov v16.h[3], w10
-; CHECK-GI-NEXT: sxtb w10, w26
-; CHECK-GI-NEXT: fmov w26, s18
-; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: sxtb w29, w29
-; CHECK-GI-NEXT: mov b24, v18.b[4]
-; CHECK-GI-NEXT: mov b23, v18.b[5]
-; CHECK-GI-NEXT: fmov w17, s27
-; CHECK-GI-NEXT: mov b27, v18.b[9]
-; CHECK-GI-NEXT: sxtb w23, w26
-; CHECK-GI-NEXT: mov v7.h[6], w9
-; CHECK-GI-NEXT: fmov w24, s19
-; CHECK-GI-NEXT: mov v16.h[4], w10
-; CHECK-GI-NEXT: mov b19, v18.b[14]
+; CHECK-GI-NEXT: fmov w30, s22
+; CHECK-GI-NEXT: fmov w4, s19
+; CHECK-GI-NEXT: mov b19, v18.b[6]
+; CHECK-GI-NEXT: mov v16.h[3], w24
; CHECK-GI-NEXT: fmov w10, s25
-; CHECK-GI-NEXT: fmov w4, s26
-; CHECK-GI-NEXT: fmov w16, s28
-; CHECK-GI-NEXT: mov b26, v18.b[7]
-; CHECK-GI-NEXT: mov b28, v18.b[10]
-; CHECK-GI-NEXT: fmov w27, s24
-; CHECK-GI-NEXT: mov b24, v18.b[12]
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: mov v7.h[7], w7
-; CHECK-GI-NEXT: fmov w7, s20
+; CHECK-GI-NEXT: mov v7.h[7], w28
+; CHECK-GI-NEXT: sxtb w28, w8
+; CHECK-GI-NEXT: fmov w8, s20
; CHECK-GI-NEXT: sxtb w4, w4
-; CHECK-GI-NEXT: fmov s20, w23
-; CHECK-GI-NEXT: fmov w25, s23
-; CHECK-GI-NEXT: mov b23, v18.b[13]
-; CHECK-GI-NEXT: mov b22, v18.b[15]
-; CHECK-GI-NEXT: mov v16.h[5], w30
-; CHECK-GI-NEXT: sxtb w7, w7
-; CHECK-GI-NEXT: fmov w9, s27
-; CHECK-GI-NEXT: mov b21, v17.b[1]
-; CHECK-GI-NEXT: mov v20.h[1], w8
-; CHECK-GI-NEXT: sxtb w8, w20
-; CHECK-GI-NEXT: sxtb w20, w6
-; CHECK-GI-NEXT: fmov w6, s19
-; CHECK-GI-NEXT: fmov w26, s28
-; CHECK-GI-NEXT: mov b28, v17.b[8]
-; CHECK-GI-NEXT: fmov s18, w8
-; CHECK-GI-NEXT: sxtb w8, w21
-; CHECK-GI-NEXT: mov v16.h[6], w5
-; CHECK-GI-NEXT: fmov w5, s22
-; CHECK-GI-NEXT: fmov s22, w10
-; CHECK-GI-NEXT: sxtb w10, w27
-; CHECK-GI-NEXT: sxtb w26, w26
-; CHECK-GI-NEXT: mov v20.h[2], w29
-; CHECK-GI-NEXT: fmov s19, w8
-; CHECK-GI-NEXT: sxtb w8, w28
-; CHECK-GI-NEXT: sxtb w28, w19
-; CHECK-GI-NEXT: sxtb w19, w9
-; CHECK-GI-NEXT: fmov w27, s17
+; CHECK-GI-NEXT: fmov w20, s27
+; CHECK-GI-NEXT: mov b28, v18.b[4]
+; CHECK-GI-NEXT: sxtb w10, w10
+; CHECK-GI-NEXT: fmov s20, w28
+; CHECK-GI-NEXT: fmov w18, s29
+; CHECK-GI-NEXT: sxtb w8, w8
+; CHECK-GI-NEXT: mov b25, v18.b[7]
+; CHECK-GI-NEXT: fmov w15, s24
+; CHECK-GI-NEXT: sxtb w20, w20
+; CHECK-GI-NEXT: mov b27, v18.b[8]
+; CHECK-GI-NEXT: mov b29, v18.b[10]
+; CHECK-GI-NEXT: sxtb w18, w18
+; CHECK-GI-NEXT: fmov w27, s21
+; CHECK-GI-NEXT: mov b24, v18.b[11]
+; CHECK-GI-NEXT: fmov w26, s23
+; CHECK-GI-NEXT: mov b23, v18.b[12]
+; CHECK-GI-NEXT: mov b22, v18.b[13]
+; CHECK-GI-NEXT: fmov w23, s26
+; CHECK-GI-NEXT: mov b26, v18.b[14]
+; CHECK-GI-NEXT: mov b21, v18.b[15]
+; CHECK-GI-NEXT: sxtb w27, w27
+; CHECK-GI-NEXT: fmov s18, w25
+; CHECK-GI-NEXT: sxtb w25, w30
+; CHECK-GI-NEXT: mov v16.h[4], w21
+; CHECK-GI-NEXT: fmov w21, s19
+; CHECK-GI-NEXT: mov b19, v17.b[1]
+; CHECK-GI-NEXT: mov v20.h[1], w25
+; CHECK-GI-NEXT: fmov w29, s27
+; CHECK-GI-NEXT: fmov w24, s28
+; CHECK-GI-NEXT: mov v18.h[1], w19
+; CHECK-GI-NEXT: fmov w19, s26
+; CHECK-GI-NEXT: mov b26, v17.b[8]
+; CHECK-GI-NEXT: sxtb w21, w21
+; CHECK-GI-NEXT: fmov w25, s22
+; CHECK-GI-NEXT: fmov w7, s25
+; CHECK-GI-NEXT: sxtb w29, w29
+; CHECK-GI-NEXT: sxtb w24, w24
+; CHECK-GI-NEXT: mov v16.h[5], w22
+; CHECK-GI-NEXT: mov v20.h[2], w27
+; CHECK-GI-NEXT: fmov w22, s29
+; CHECK-GI-NEXT: fmov w27, s19
+; CHECK-GI-NEXT: fmov s19, w20
+; CHECK-GI-NEXT: mov v18.h[2], w5
+; CHECK-GI-NEXT: sxtb w5, w26
+; CHECK-GI-NEXT: fmov s22, w29
; CHECK-GI-NEXT: mov b25, v17.b[2]
-; CHECK-GI-NEXT: fmov w29, s21
+; CHECK-GI-NEXT: fmov w28, s23
+; CHECK-GI-NEXT: sxtb w27, w27
+; CHECK-GI-NEXT: mov v16.h[6], w3
+; CHECK-GI-NEXT: fmov w3, s21
+; CHECK-GI-NEXT: mov v20.h[3], w5
+; CHECK-GI-NEXT: mov v19.h[1], w6
+; CHECK-GI-NEXT: sxtb w6, w22
+; CHECK-GI-NEXT: fmov w22, s17
; CHECK-GI-NEXT: mov b21, v17.b[9]
-; CHECK-GI-NEXT: mov v22.h[1], w19
-; CHECK-GI-NEXT: fmov w23, s23
-; CHECK-GI-NEXT: mov v20.h[3], w8
-; CHECK-GI-NEXT: mov b23, v17.b[6]
+; CHECK-GI-NEXT: mov v22.h[1], w8
+; CHECK-GI-NEXT: mov b23, v17.b[5]
+; CHECK-GI-NEXT: mov b27, v17.b[3]
; CHECK-GI-NEXT: fmov w30, s24
-; CHECK-GI-NEXT: sxtb w27, w27
-; CHECK-GI-NEXT: mov b24, v17.b[5]
-; CHECK-GI-NEXT: mov v18.h[1], w20
-; CHECK-GI-NEXT: fmov w21, s25
+; CHECK-GI-NEXT: mov b24, v17.b[4]
+; CHECK-GI-NEXT: fmov w26, s25
; CHECK-GI-NEXT: mov b25, v17.b[10]
-; CHECK-GI-NEXT: mov v19.h[1], w28
-; CHECK-GI-NEXT: sxtb w28, w29
-; CHECK-GI-NEXT: mov v22.h[2], w26
-; CHECK-GI-NEXT: fmov w26, s21
-; CHECK-GI-NEXT: mov v20.h[4], w10
-; CHECK-GI-NEXT: fmov w10, s28
-; CHECK-GI-NEXT: fmov s21, w27
-; CHECK-GI-NEXT: sxtb w21, w21
-; CHECK-GI-NEXT: mov b27, v17.b[3]
-; CHECK-GI-NEXT: fmov w19, s23
+; CHECK-GI-NEXT: sxtb w22, w22
+; CHECK-GI-NEXT: mov v20.h[4], w24
+; CHECK-GI-NEXT: fmov w24, s26
+; CHECK-GI-NEXT: fmov w29, s21
+; CHECK-GI-NEXT: mov v22.h[2], w6
+; CHECK-GI-NEXT: mov v19.h[2], w4
+; CHECK-GI-NEXT: sxtb w4, w23
+; CHECK-GI-NEXT: sxtb w23, w30
; CHECK-GI-NEXT: sxtb w26, w26
-; CHECK-GI-NEXT: fmov w22, s26
-; CHECK-GI-NEXT: mov b26, v17.b[4]
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: mov v21.h[1], w28
-; CHECK-GI-NEXT: fmov w8, s24
-; CHECK-GI-NEXT: mov b24, v17.b[11]
-; CHECK-GI-NEXT: fmov w27, s25
-; CHECK-GI-NEXT: mov v18.h[2], w18
-; CHECK-GI-NEXT: sxtb w18, w25
-; CHECK-GI-NEXT: fmov s23, w10
+; CHECK-GI-NEXT: sxtb w24, w24
+; CHECK-GI-NEXT: fmov s21, w22
+; CHECK-GI-NEXT: fmov w8, s23
+; CHECK-GI-NEXT: sxtb w22, w29
; CHECK-GI-NEXT: fmov w20, s27
+; CHECK-GI-NEXT: fmov w5, s24
+; CHECK-GI-NEXT: fmov s23, w24
+; CHECK-GI-NEXT: mov b24, v17.b[11]
+; CHECK-GI-NEXT: fmov w24, s25
; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: fmov w9, s26
-; CHECK-GI-NEXT: mov b26, v17.b[12]
-; CHECK-GI-NEXT: sxtb w25, w27
-; CHECK-GI-NEXT: mov v20.h[5], w18
-; CHECK-GI-NEXT: sxtb w18, w3
-; CHECK-GI-NEXT: sxtb w3, w24
-; CHECK-GI-NEXT: mov v23.h[1], w26
-; CHECK-GI-NEXT: mov v21.h[2], w21
-; CHECK-GI-NEXT: sxtb w9, w9
-; CHECK-GI-NEXT: fmov w28, s24
-; CHECK-GI-NEXT: mov v22.h[3], w7
-; CHECK-GI-NEXT: sxtb w7, w20
-; CHECK-GI-NEXT: mov v19.h[2], w4
-; CHECK-GI-NEXT: sxtb w4, w30
-; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v18.h[3], w15
-; CHECK-GI-NEXT: sxtb w20, w28
-; CHECK-GI-NEXT: sxtb w15, w17
-; CHECK-GI-NEXT: sxtb w17, w22
-; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov v23.h[2], w25
-; CHECK-GI-NEXT: mov v20.h[6], w3
-; CHECK-GI-NEXT: mov v21.h[3], w7
-; CHECK-GI-NEXT: fmov w10, s26
-; CHECK-GI-NEXT: mov v22.h[4], w4
+; CHECK-GI-NEXT: mov v21.h[1], w27
+; CHECK-GI-NEXT: mov v20.h[5], w4
+; CHECK-GI-NEXT: sxtb w20, w20
+; CHECK-GI-NEXT: sxtb w5, w5
+; CHECK-GI-NEXT: mov v22.h[3], w23
+; CHECK-GI-NEXT: sxtb w24, w24
+; CHECK-GI-NEXT: sxtb w23, w28
+; CHECK-GI-NEXT: mov v23.h[1], w22
+; CHECK-GI-NEXT: fmov w17, s30
+; CHECK-GI-NEXT: mov b27, v17.b[12]
+; CHECK-GI-NEXT: fmov w27, s24
+; CHECK-GI-NEXT: mov v21.h[2], w26
+; CHECK-GI-NEXT: mov v18.h[3], w14
+; CHECK-GI-NEXT: mov v20.h[6], w21
+; CHECK-GI-NEXT: mov v22.h[4], w23
; CHECK-GI-NEXT: mov v19.h[3], w18
-; CHECK-GI-NEXT: sxtb w18, w23
-; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
-; CHECK-GI-NEXT: mov b27, v17.b[13]
-; CHECK-GI-NEXT: sxtb w10, w10
-; CHECK-GI-NEXT: mov v23.h[3], w20
+; CHECK-GI-NEXT: sxtb w18, w25
+; CHECK-GI-NEXT: sxtb w14, w17
+; CHECK-GI-NEXT: sxtb w17, w7
+; CHECK-GI-NEXT: mov v23.h[2], w24
+; CHECK-GI-NEXT: sxtb w24, w27
+; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v21.h[3], w20
+; CHECK-GI-NEXT: fmov w16, s31
+; CHECK-GI-NEXT: mov b28, v17.b[6]
+; CHECK-GI-NEXT: mov b26, v17.b[13]
+; CHECK-GI-NEXT: fmov w22, s27
; CHECK-GI-NEXT: mov v18.h[4], w13
-; CHECK-GI-NEXT: sxtb w13, w6
+; CHECK-GI-NEXT: sxtb w13, w2
; CHECK-GI-NEXT: mov v20.h[7], w17
-; CHECK-GI-NEXT: mov v21.h[4], w9
-; CHECK-GI-NEXT: ldr w9, [sp, #8] // 4-byte Reload
+; CHECK-GI-NEXT: mov v23.h[3], w24
; CHECK-GI-NEXT: mov v22.h[5], w18
-; CHECK-GI-NEXT: mov b25, v17.b[14]
-; CHECK-GI-NEXT: fmov w26, s27
-; CHECK-GI-NEXT: mov v19.h[4], w15
-; CHECK-GI-NEXT: fmov w14, s29
-; CHECK-GI-NEXT: sxtb w9, w9
-; CHECK-GI-NEXT: mov v23.h[4], w10
-; CHECK-GI-NEXT: sxtb w10, w11
-; CHECK-GI-NEXT: sxtb w11, w16
-; CHECK-GI-NEXT: mov v21.h[5], w8
-; CHECK-GI-NEXT: ldr w8, [sp, #4] // 4-byte Reload
-; CHECK-GI-NEXT: sxtb w15, w26
-; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-GI-NEXT: sxtb w8, w8
-; CHECK-GI-NEXT: mov v18.h[5], w10
-; CHECK-GI-NEXT: sxtb w10, w19
+; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v21.h[4], w5
+; CHECK-GI-NEXT: sxtb w7, w22
+; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v19.h[4], w14
+; CHECK-GI-NEXT: sxtb w14, w16
+; CHECK-GI-NEXT: sxtb w16, w19
; CHECK-GI-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
+; CHECK-GI-NEXT: fmov w6, s28
+; CHECK-GI-NEXT: mov b25, v17.b[14]
+; CHECK-GI-NEXT: fmov w29, s26
+; CHECK-GI-NEXT: mov v18.h[5], w11
; CHECK-GI-NEXT: mul v20.8h, v7.8h, v20.8h
; CHECK-GI-NEXT: mov b7, v17.b[7]
-; CHECK-GI-NEXT: mov v22.h[6], w13
-; CHECK-GI-NEXT: sxtb w13, w5
-; CHECK-GI-NEXT: fmov w27, s25
-; CHECK-GI-NEXT: mov v19.h[5], w11
-; CHECK-GI-NEXT: sxtb w11, w2
+; CHECK-GI-NEXT: mov v23.h[4], w7
+; CHECK-GI-NEXT: sxtb w11, w6
+; CHECK-GI-NEXT: mov v22.h[6], w16
+; CHECK-GI-NEXT: mov v21.h[5], w8
+; CHECK-GI-NEXT: sxtb w8, w9
+; CHECK-GI-NEXT: sxtb w17, w29
+; CHECK-GI-NEXT: sxtb w9, w15
+; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
+; CHECK-GI-NEXT: mov v16.h[7], w13
+; CHECK-GI-NEXT: sxtb w13, w3
+; CHECK-GI-NEXT: fmov w4, s25
+; CHECK-GI-NEXT: mov v19.h[5], w14
; CHECK-GI-NEXT: mov b17, v17.b[15]
; CHECK-GI-NEXT: mov v18.h[6], w8
-; CHECK-GI-NEXT: mov v16.h[7], w9
-; CHECK-GI-NEXT: sxtb w9, w14
-; CHECK-GI-NEXT: mov v23.h[5], w15
-; CHECK-GI-NEXT: mov v21.h[6], w10
-; CHECK-GI-NEXT: sxtb w14, w27
-; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
; CHECK-GI-NEXT: fmov w8, s7
+; CHECK-GI-NEXT: mov v23.h[5], w17
+; CHECK-GI-NEXT: mov v21.h[6], w11
; CHECK-GI-NEXT: mov v22.h[7], w13
-; CHECK-GI-NEXT: fmov w12, s30
+; CHECK-GI-NEXT: sxtb w14, w4
+; CHECK-GI-NEXT: fmov w12, s8
+; CHECK-GI-NEXT: smov w11, v20.h[0]
+; CHECK-GI-NEXT: sxtb w8, w8
; CHECK-GI-NEXT: mov v19.h[6], w9
-; CHECK-GI-NEXT: fmov w9, s17
-; CHECK-GI-NEXT: smov w10, v20.h[0]
-; CHECK-GI-NEXT: mov v23.h[6], w14
-; CHECK-GI-NEXT: mov v18.h[7], w11
; CHECK-GI-NEXT: smov w13, v20.h[1]
-; CHECK-GI-NEXT: sxtb w8, w8
+; CHECK-GI-NEXT: fmov w9, s17
+; CHECK-GI-NEXT: mov v18.h[7], w10
+; CHECK-GI-NEXT: smov w10, v20.h[2]
; CHECK-GI-NEXT: sxtb w12, w12
-; CHECK-GI-NEXT: smov w11, v20.h[4]
-; CHECK-GI-NEXT: sxtb w9, w9
-; CHECK-GI-NEXT: mul v22.8h, v16.8h, v22.8h
-; CHECK-GI-NEXT: smov w14, v20.h[3]
+; CHECK-GI-NEXT: mov v23.h[6], w14
; CHECK-GI-NEXT: mov v21.h[7], w8
; CHECK-GI-NEXT: ldrsb w8, [x0, #32]
+; CHECK-GI-NEXT: mul v22.8h, v16.8h, v22.8h
+; CHECK-GI-NEXT: fmov s7, w11
+; CHECK-GI-NEXT: sxtb w9, w9
; CHECK-GI-NEXT: mov v19.h[7], w12
+; CHECK-GI-NEXT: smov w11, v20.h[4]
+; CHECK-GI-NEXT: smov w12, v20.h[5]
+; CHECK-GI-NEXT: smov w14, v20.h[3]
+; CHECK-GI-NEXT: movi d0, #0000000000000000
; CHECK-GI-NEXT: mov v23.h[7], w9
; CHECK-GI-NEXT: ldrsb w9, [x1, #32]
-; CHECK-GI-NEXT: fmov s7, w10
-; CHECK-GI-NEXT: smov w10, v20.h[2]
-; CHECK-GI-NEXT: smov w12, v20.h[5]
-; CHECK-GI-NEXT: fmov s16, w11
-; CHECK-GI-NEXT: mul w9, w9, w8
-; CHECK-GI-NEXT: smov w15, v22.h[4]
-; CHECK-GI-NEXT: smov w17, v22.h[5]
; CHECK-GI-NEXT: mul v24.8h, v18.8h, v21.8h
+; CHECK-GI-NEXT: smov w15, v22.h[4]
; CHECK-GI-NEXT: mov v7.s[1], w13
+; CHECK-GI-NEXT: smov w17, v22.h[5]
+; CHECK-GI-NEXT: mul w9, w9, w8
+; CHECK-GI-NEXT: fmov s16, w11
; CHECK-GI-NEXT: smov w13, v22.h[0]
-; CHECK-GI-NEXT: mul v18.8h, v19.8h, v23.8h
; CHECK-GI-NEXT: smov w16, v22.h[1]
; CHECK-GI-NEXT: smov w8, v20.h[7]
-; CHECK-GI-NEXT: sxth w9, w9
-; CHECK-GI-NEXT: mov v16.s[1], w12
-; CHECK-GI-NEXT: movi d0, #0000000000000000
-; CHECK-GI-NEXT: fmov s19, w15
-; CHECK-GI-NEXT: smov w15, v22.h[6]
; CHECK-GI-NEXT: mov v1.s[1], wzr
+; CHECK-GI-NEXT: mul v18.8h, v19.8h, v23.8h
; CHECK-GI-NEXT: smov w11, v24.h[0]
+; CHECK-GI-NEXT: mov v3.s[1], wzr
+; CHECK-GI-NEXT: sxth w9, w9
+; CHECK-GI-NEXT: fmov s19, w15
; CHECK-GI-NEXT: mov v7.s[2], w10
+; CHECK-GI-NEXT: smov w15, v22.h[6]
; CHECK-GI-NEXT: smov w10, v20.h[6]
+; CHECK-GI-NEXT: mov v16.s[1], w12
; CHECK-GI-NEXT: smov w12, v24.h[1]
-; CHECK-GI-NEXT: smov w0, v18.h[4]
; CHECK-GI-NEXT: fmov s17, w13
-; CHECK-GI-NEXT: mov v19.s[1], w17
-; CHECK-GI-NEXT: smov w17, v18.h[0]
-; CHECK-GI-NEXT: smov w18, v18.h[1]
; CHECK-GI-NEXT: smov w13, v22.h[2]
-; CHECK-GI-NEXT: mov v3.s[1], wzr
-; CHECK-GI-NEXT: mov v2.s[1], wzr
+; CHECK-GI-NEXT: mov v19.s[1], w17
; CHECK-GI-NEXT: fmov s20, w11
; CHECK-GI-NEXT: smov w11, v24.h[4]
+; CHECK-GI-NEXT: smov w0, v18.h[4]
+; CHECK-GI-NEXT: smov w17, v18.h[0]
; CHECK-GI-NEXT: mov v7.s[3], w14
; CHECK-GI-NEXT: smov w14, v24.h[5]
; CHECK-GI-NEXT: mov v17.s[1], w16
; CHECK-GI-NEXT: smov w16, v24.h[2]
+; CHECK-GI-NEXT: mov v20.s[1], w12
+; CHECK-GI-NEXT: smov w18, v18.h[1]
+; CHECK-GI-NEXT: mov v16.s[2], w10
; CHECK-GI-NEXT: mov v19.s[2], w15
; CHECK-GI-NEXT: smov w15, v18.h[5]
+; CHECK-GI-NEXT: fmov s21, w11
; CHECK-GI-NEXT: fmov s23, w0
-; CHECK-GI-NEXT: mov v20.s[1], w12
-; CHECK-GI-NEXT: mov v16.s[2], w10
; CHECK-GI-NEXT: smov w10, v22.h[3]
-; CHECK-GI-NEXT: fmov s21, w11
; CHECK-GI-NEXT: smov w11, v22.h[7]
; CHECK-GI-NEXT: fmov s22, w17
+; CHECK-GI-NEXT: mov v2.s[1], wzr
; CHECK-GI-NEXT: mov v5.s[1], wzr
; CHECK-GI-NEXT: mov v4.s[1], wzr
; CHECK-GI-NEXT: mov v6.s[1], wzr
-; CHECK-GI-NEXT: mov v23.s[1], w15
-; CHECK-GI-NEXT: smov w15, v18.h[6]
-; CHECK-GI-NEXT: mov v0.s[1], wzr
; CHECK-GI-NEXT: mov v21.s[1], w14
; CHECK-GI-NEXT: smov w14, v24.h[6]
+; CHECK-GI-NEXT: mov v23.s[1], w15
+; CHECK-GI-NEXT: smov w15, v18.h[6]
; CHECK-GI-NEXT: mov v20.s[2], w16
; CHECK-GI-NEXT: mov v22.s[1], w18
; CHECK-GI-NEXT: smov w16, v18.h[2]
+; CHECK-GI-NEXT: mov v0.s[1], wzr
; CHECK-GI-NEXT: mov v1.s[2], wzr
; CHECK-GI-NEXT: mov v3.s[2], wzr
; CHECK-GI-NEXT: mov v2.s[2], wzr
; CHECK-GI-NEXT: mov v5.s[2], wzr
; CHECK-GI-NEXT: mov v4.s[2], wzr
; CHECK-GI-NEXT: mov v6.s[2], wzr
-; CHECK-GI-NEXT: mov v23.s[2], w15
; CHECK-GI-NEXT: mov v21.s[2], w14
; CHECK-GI-NEXT: smov w14, v18.h[3]
+; CHECK-GI-NEXT: mov v23.s[2], w15
; CHECK-GI-NEXT: smov w15, v18.h[7]
; CHECK-GI-NEXT: fmov s18, w9
; CHECK-GI-NEXT: ldr w9, [sp, #12] // 4-byte Reload
@@ -5494,7 +5487,7 @@ define i32 @test_sdot_v33i8(ptr nocapture readonly %a, ptr nocapture readonly %b
; CHECK-GI-NEXT: addv s0, v0.4s
; CHECK-GI-NEXT: fmov w8, s0
; CHECK-GI-NEXT: add w0, w8, w9
-; CHECK-GI-NEXT: add sp, sp, #112
+; CHECK-GI-NEXT: ldr d8, [sp], #112 // 8-byte Folded Reload
; CHECK-GI-NEXT: ret
entry:
%0 = load <33 x i8>, ptr %a
diff --git a/llvm/test/CodeGen/AArch64/neon-extadd.ll b/llvm/test/CodeGen/AArch64/neon-extadd.ll
index 627dab6402791..01fdfa1ef2eb8 100644
--- a/llvm/test/CodeGen/AArch64/neon-extadd.ll
+++ b/llvm/test/CodeGen/AArch64/neon-extadd.ll
@@ -1368,95 +1368,83 @@ entry:
define <16 x i32> @i12(<16 x i12> %s0, <16 x i12> %s1) {
; CHECK-SD-LABEL: i12:
; CHECK-SD: // %bb.0: // %entry
-; CHECK-SD-NEXT: str x23, [sp, #-48]! // 8-byte Folded Spill
-; CHECK-SD-NEXT: stp x22, x21, [sp, #16] // 16-byte Folded Spill
-; CHECK-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill
-; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
-; CHECK-SD-NEXT: .cfi_offset w19, -8
-; CHECK-SD-NEXT: .cfi_offset w20, -16
-; CHECK-SD-NEXT: .cfi_offset w21, -24
-; CHECK-SD-NEXT: .cfi_offset w22, -32
-; CHECK-SD-NEXT: .cfi_offset w23, -48
-; CHECK-SD-NEXT: ldr w13, [sp, #112]
-; CHECK-SD-NEXT: ldr w14, [sp, #144]
-; CHECK-SD-NEXT: fmov s2, w4
-; CHECK-SD-NEXT: ldr w17, [sp, #176]
-; CHECK-SD-NEXT: ldr w19, [sp, #208]
+; CHECK-SD-NEXT: ldr w8, [sp, #32]
+; CHECK-SD-NEXT: ldr w9, [sp, #40]
+; CHECK-SD-NEXT: fmov s1, w4
+; CHECK-SD-NEXT: ldr w10, [sp, #128]
; CHECK-SD-NEXT: fmov s3, w0
-; CHECK-SD-NEXT: ldr w20, [sp, #80]
-; CHECK-SD-NEXT: ldr w21, [sp, #48]
-; CHECK-SD-NEXT: fmov s5, w13
-; CHECK-SD-NEXT: fmov s4, w19
-; CHECK-SD-NEXT: fmov s6, w17
-; CHECK-SD-NEXT: fmov s7, w14
-; CHECK-SD-NEXT: fmov s0, w20
-; CHECK-SD-NEXT: fmov s1, w21
-; CHECK-SD-NEXT: ldr w10, [sp, #120]
-; CHECK-SD-NEXT: ldr w11, [sp, #152]
-; CHECK-SD-NEXT: ldr w12, [sp, #184]
-; CHECK-SD-NEXT: ldr w15, [sp, #216]
-; CHECK-SD-NEXT: ldr w22, [sp, #88]
-; CHECK-SD-NEXT: ldr w23, [sp, #56]
-; CHECK-SD-NEXT: mov v2.h[1], w5
+; CHECK-SD-NEXT: ldr w11, [sp, #72]
+; CHECK-SD-NEXT: fmov s0, w8
+; CHECK-SD-NEXT: ldr w8, [sp]
+; CHECK-SD-NEXT: movi v16.4s, #15, msl #8
+; CHECK-SD-NEXT: fmov s5, w10
+; CHECK-SD-NEXT: ldr w10, [sp, #104]
+; CHECK-SD-NEXT: mov v1.h[1], w5
+; CHECK-SD-NEXT: fmov s2, w8
+; CHECK-SD-NEXT: ldr w8, [sp, #8]
; CHECK-SD-NEXT: mov v3.h[1], w1
-; CHECK-SD-NEXT: mov v5.h[1], w10
-; CHECK-SD-NEXT: mov v4.h[1], w15
-; CHECK-SD-NEXT: mov v0.h[1], w22
-; CHECK-SD-NEXT: mov v1.h[1], w23
-; CHECK-SD-NEXT: mov v6.h[1], w12
-; CHECK-SD-NEXT: mov v7.h[1], w11
-; CHECK-SD-NEXT: ldr w8, [sp, #128]
-; CHECK-SD-NEXT: ldr w9, [sp, #160]
-; CHECK-SD-NEXT: ldr w16, [sp, #64]
-; CHECK-SD-NEXT: ldr w18, [sp, #96]
-; CHECK-SD-NEXT: ldr w10, [sp, #192]
-; CHECK-SD-NEXT: ldr w11, [sp, #224]
-; CHECK-SD-NEXT: mov v2.h[2], w6
+; CHECK-SD-NEXT: mov v0.h[1], w9
+; CHECK-SD-NEXT: ldr w9, [sp, #48]
+; CHECK-SD-NEXT: mov v2.h[1], w8
+; CHECK-SD-NEXT: ldr w8, [sp, #160]
+; CHECK-SD-NEXT: mov v1.h[2], w6
; CHECK-SD-NEXT: mov v3.h[2], w2
-; CHECK-SD-NEXT: mov v0.h[2], w18
-; CHECK-SD-NEXT: mov v1.h[2], w16
-; CHECK-SD-NEXT: mov v5.h[2], w8
-; CHECK-SD-NEXT: mov v4.h[2], w11
-; CHECK-SD-NEXT: mov v6.h[2], w10
-; CHECK-SD-NEXT: mov v7.h[2], w9
-; CHECK-SD-NEXT: ldr w12, [sp, #72]
-; CHECK-SD-NEXT: ldr w13, [sp, #104]
-; CHECK-SD-NEXT: ldr w8, [sp, #136]
+; CHECK-SD-NEXT: fmov s4, w8
+; CHECK-SD-NEXT: mov v0.h[2], w9
; CHECK-SD-NEXT: ldr w9, [sp, #168]
-; CHECK-SD-NEXT: ldr w10, [sp, #200]
-; CHECK-SD-NEXT: ldr w11, [sp, #232]
-; CHECK-SD-NEXT: mov v0.h[3], w13
-; CHECK-SD-NEXT: mov v1.h[3], w12
-; CHECK-SD-NEXT: mov v2.h[3], w7
+; CHECK-SD-NEXT: ldr w8, [sp, #64]
+; CHECK-SD-NEXT: mov v1.h[3], w7
+; CHECK-SD-NEXT: mov v4.h[1], w9
+; CHECK-SD-NEXT: ldr w9, [sp, #96]
+; CHECK-SD-NEXT: fmov s6, w8
+; CHECK-SD-NEXT: ldr w8, [sp, #136]
; CHECK-SD-NEXT: mov v3.h[3], w3
-; CHECK-SD-NEXT: mov v5.h[3], w8
-; CHECK-SD-NEXT: mov v4.h[3], w11
+; CHECK-SD-NEXT: fmov s7, w9
+; CHECK-SD-NEXT: ldr w9, [sp, #16]
+; CHECK-SD-NEXT: mov v6.h[1], w11
+; CHECK-SD-NEXT: mov v5.h[1], w8
+; CHECK-SD-NEXT: ldr w8, [sp, #80]
+; CHECK-SD-NEXT: mov v2.h[2], w9
+; CHECK-SD-NEXT: ldr w9, [sp, #176]
+; CHECK-SD-NEXT: ldr w11, [sp, #144]
+; CHECK-SD-NEXT: mov v7.h[1], w10
+; CHECK-SD-NEXT: ldr w10, [sp, #112]
+; CHECK-SD-NEXT: ushll v1.4s, v1.4h, #0
+; CHECK-SD-NEXT: mov v4.h[2], w9
+; CHECK-SD-NEXT: ldr w9, [sp, #56]
+; CHECK-SD-NEXT: ushll v3.4s, v3.4h, #0
+; CHECK-SD-NEXT: mov v6.h[2], w8
+; CHECK-SD-NEXT: ldr w8, [sp, #24]
+; CHECK-SD-NEXT: mov v5.h[2], w11
+; CHECK-SD-NEXT: ldr w11, [sp, #120]
+; CHECK-SD-NEXT: mov v0.h[3], w9
+; CHECK-SD-NEXT: ldr w9, [sp, #152]
+; CHECK-SD-NEXT: mov v7.h[2], w10
+; CHECK-SD-NEXT: ldr w10, [sp, #88]
+; CHECK-SD-NEXT: mov v2.h[3], w8
+; CHECK-SD-NEXT: ldr w8, [sp, #184]
+; CHECK-SD-NEXT: and v1.16b, v1.16b, v16.16b
; CHECK-SD-NEXT: mov v6.h[3], w10
-; CHECK-SD-NEXT: mov v7.h[3], w9
-; CHECK-SD-NEXT: movi v16.4s, #15, msl #8
-; CHECK-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload
+; CHECK-SD-NEXT: mov v5.h[3], w9
+; CHECK-SD-NEXT: mov v4.h[3], w8
; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #0
-; CHECK-SD-NEXT: ushll v1.4s, v1.4h, #0
+; CHECK-SD-NEXT: mov v7.h[3], w11
; CHECK-SD-NEXT: ushll v2.4s, v2.4h, #0
-; CHECK-SD-NEXT: ushll v3.4s, v3.4h, #0
-; CHECK-SD-NEXT: ushll v5.4s, v5.4h, #0
-; CHECK-SD-NEXT: ushll v4.4s, v4.4h, #0
; CHECK-SD-NEXT: ushll v6.4s, v6.4h, #0
-; CHECK-SD-NEXT: ushll v7.4s, v7.4h, #0
+; CHECK-SD-NEXT: ushll v5.4s, v5.4h, #0
; CHECK-SD-NEXT: and v17.16b, v0.16b, v16.16b
-; CHECK-SD-NEXT: and v18.16b, v1.16b, v16.16b
-; CHECK-SD-NEXT: and v1.16b, v2.16b, v16.16b
+; CHECK-SD-NEXT: ushll v4.4s, v4.4h, #0
+; CHECK-SD-NEXT: and v2.16b, v2.16b, v16.16b
; CHECK-SD-NEXT: and v0.16b, v3.16b, v16.16b
-; CHECK-SD-NEXT: and v2.16b, v5.16b, v16.16b
-; CHECK-SD-NEXT: and v3.16b, v4.16b, v16.16b
-; CHECK-SD-NEXT: and v4.16b, v6.16b, v16.16b
-; CHECK-SD-NEXT: and v5.16b, v7.16b, v16.16b
-; CHECK-SD-NEXT: ldp x22, x21, [sp, #16] // 16-byte Folded Reload
-; CHECK-SD-NEXT: add v0.4s, v0.4s, v2.4s
-; CHECK-SD-NEXT: add v3.4s, v17.4s, v3.4s
-; CHECK-SD-NEXT: add v1.4s, v1.4s, v5.4s
-; CHECK-SD-NEXT: add v2.4s, v18.4s, v4.4s
-; CHECK-SD-NEXT: ldr x23, [sp], #48 // 8-byte Folded Reload
+; CHECK-SD-NEXT: ushll v7.4s, v7.4h, #0
+; CHECK-SD-NEXT: and v3.16b, v6.16b, v16.16b
+; CHECK-SD-NEXT: and v5.16b, v5.16b, v16.16b
+; CHECK-SD-NEXT: and v4.16b, v4.16b, v16.16b
+; CHECK-SD-NEXT: and v6.16b, v7.16b, v16.16b
+; CHECK-SD-NEXT: add v0.4s, v0.4s, v3.4s
+; CHECK-SD-NEXT: add v2.4s, v2.4s, v5.4s
+; CHECK-SD-NEXT: add v3.4s, v17.4s, v4.4s
+; CHECK-SD-NEXT: add v1.4s, v1.4s, v6.4s
; CHECK-SD-NEXT: ret
;
; CHECK-GI-LABEL: i12:
diff --git a/llvm/test/CodeGen/AArch64/sve-fixed-length-masked-expandloads.ll b/llvm/test/CodeGen/AArch64/sve-fixed-length-masked-expandloads.ll
index f2ddac3e9fac7..947b8b9c63463 100644
--- a/llvm/test/CodeGen/AArch64/sve-fixed-length-masked-expandloads.ll
+++ b/llvm/test/CodeGen/AArch64/sve-fixed-length-masked-expandloads.ll
@@ -880,8 +880,8 @@ define void @masked_load_v32f32(ptr %ap, ptr %bp, ptr %c) vscale_range(8,0) #0 {
; CHECK-NEXT: umov w4, v0.b[8]
; CHECK-NEXT: mov z7.b, z0.b[20]
; CHECK-NEXT: fmov w6, s0
-; CHECK-NEXT: umov w5, v0.b[9]
; CHECK-NEXT: umov w12, v0.b[2]
+; CHECK-NEXT: umov w5, v0.b[9]
; CHECK-NEXT: mov z16.b, z0.b[21]
; CHECK-NEXT: fmov w20, s5
; CHECK-NEXT: fmov w21, s6
@@ -889,95 +889,93 @@ define void @masked_load_v32f32(ptr %ap, ptr %bp, ptr %c) vscale_range(8,0) #0 {
; CHECK-NEXT: mov z17.b, z0.b[22]
; CHECK-NEXT: fmov w22, s7
; CHECK-NEXT: and w6, w6, #0x1
+; CHECK-NEXT: ubfiz w3, w3, #7, #1
+; CHECK-NEXT: ubfiz w4, w4, #8, #1
+; CHECK-NEXT: bfi w6, w13, #1, #1
; CHECK-NEXT: umov w11, v0.b[3]
; CHECK-NEXT: umov w1, v0.b[11]
-; CHECK-NEXT: bfi w6, w13, #1, #1
-; CHECK-NEXT: ubfiz w13, w3, #7, #1
-; CHECK-NEXT: ubfiz w3, w4, #8, #1
; CHECK-NEXT: mov z18.b, z0.b[23]
; CHECK-NEXT: fmov w23, s16
-; CHECK-NEXT: ubfiz w4, w5, #9, #1
-; CHECK-NEXT: ubfiz w5, w20, #18, #1
-; CHECK-NEXT: ubfiz w20, w21, #19, #1
+; CHECK-NEXT: ubfiz w20, w20, #18, #1
+; CHECK-NEXT: ubfiz w21, w21, #19, #1
; CHECK-NEXT: umov w16, v0.b[12]
; CHECK-NEXT: mov z19.b, z0.b[24]
; CHECK-NEXT: fmov w24, s17
+; CHECK-NEXT: ubfiz w5, w5, #9, #1
; CHECK-NEXT: bfi w6, w12, #2, #1
-; CHECK-NEXT: orr w12, w13, w3
-; CHECK-NEXT: ubfiz w13, w22, #20, #1
-; CHECK-NEXT: umov w17, v0.b[13]
-; CHECK-NEXT: mov z20.b, z0.b[25]
-; CHECK-NEXT: orr w3, w5, w20
+; CHECK-NEXT: orr w12, w3, w4
+; CHECK-NEXT: ubfiz w3, w22, #20, #1
+; CHECK-NEXT: orr w4, w20, w21
; CHECK-NEXT: ubfiz w18, w18, #10, #1
; CHECK-NEXT: umov w10, v0.b[4]
-; CHECK-NEXT: mov z21.b, z0.b[26]
+; CHECK-NEXT: umov w17, v0.b[13]
+; CHECK-NEXT: mov z20.b, z0.b[25]
; CHECK-NEXT: fmov w25, s18
-; CHECK-NEXT: orr w12, w12, w4
-; CHECK-NEXT: orr w13, w3, w13
-; CHECK-NEXT: ubfiz w3, w23, #21, #1
+; CHECK-NEXT: orr w12, w12, w5
+; CHECK-NEXT: orr w3, w4, w3
+; CHECK-NEXT: ubfiz w4, w23, #21, #1
; CHECK-NEXT: umov w14, v0.b[14]
+; CHECK-NEXT: mov z21.b, z0.b[26]
; CHECK-NEXT: fmov w26, s19
; CHECK-NEXT: ubfiz w1, w1, #11, #1
; CHECK-NEXT: bfi w6, w11, #3, #1
; CHECK-NEXT: orr w11, w12, w18
; CHECK-NEXT: ubfiz w12, w24, #22, #1
; CHECK-NEXT: umov w9, v0.b[5]
-; CHECK-NEXT: fmov w27, s20
-; CHECK-NEXT: orr w13, w13, w3
+; CHECK-NEXT: umov w15, v0.b[15]
+; CHECK-NEXT: mov z22.b, z0.b[27]
+; CHECK-NEXT: orr w18, w3, w4
; CHECK-NEXT: ubfiz w16, w16, #12, #1
+; CHECK-NEXT: fmov w27, s20
+; CHECK-NEXT: orr w11, w11, w1
+; CHECK-NEXT: orr w12, w18, w12
+; CHECK-NEXT: ubfiz w18, w25, #23, #1
; CHECK-NEXT: umov w8, v0.b[6]
+; CHECK-NEXT: mov z24.b, z0.b[29]
; CHECK-NEXT: fmov w28, s21
-; CHECK-NEXT: orr w11, w11, w1
-; CHECK-NEXT: orr w12, w13, w12
-; CHECK-NEXT: ubfiz w13, w17, #13, #1
-; CHECK-NEXT: ubfiz w17, w25, #23, #1
-; CHECK-NEXT: mov z22.b, z0.b[27]
+; CHECK-NEXT: ubfiz w17, w17, #13, #1
; CHECK-NEXT: bfi w6, w10, #4, #1
; CHECK-NEXT: orr w10, w11, w16
; CHECK-NEXT: ubfiz w11, w26, #24, #1
-; CHECK-NEXT: mov z24.b, z0.b[29]
-; CHECK-NEXT: orr w12, w12, w17
-; CHECK-NEXT: orr w10, w10, w13
-; CHECK-NEXT: ubfiz w13, w14, #14, #1
-; CHECK-NEXT: ubfiz w14, w27, #25, #1
-; CHECK-NEXT: orr w11, w12, w11
-; CHECK-NEXT: bfi w6, w9, #5, #1
-; CHECK-NEXT: ubfiz w9, w28, #26, #1
-; CHECK-NEXT: str w8, [sp, #124] // 4-byte Spill
+; CHECK-NEXT: mov z3.b, z0.b[16]
; CHECK-NEXT: mov z23.b, z0.b[28]
; CHECK-NEXT: fmov w30, s22
-; CHECK-NEXT: orr w11, w11, w14
-; CHECK-NEXT: umov w15, v0.b[15]
-; CHECK-NEXT: mov z3.b, z0.b[16]
-; CHECK-NEXT: orr w9, w11, w9
-; CHECK-NEXT: ldr w11, [sp, #124] // 4-byte Reload
+; CHECK-NEXT: orr w12, w12, w18
+; CHECK-NEXT: ubfiz w14, w14, #14, #1
; CHECK-NEXT: mov z4.b, z0.b[17]
+; CHECK-NEXT: orr w10, w10, w17
+; CHECK-NEXT: orr w11, w12, w11
+; CHECK-NEXT: ubfiz w12, w15, #15, #1
+; CHECK-NEXT: ubfiz w15, w27, #25, #1
+; CHECK-NEXT: bfi w6, w9, #5, #1
; CHECK-NEXT: mov z2.b, z0.b[30]
-; CHECK-NEXT: orr w10, w10, w13
-; CHECK-NEXT: fmov w13, s24
-; CHECK-NEXT: fmov w8, s23
-; CHECK-NEXT: bfi w6, w11, #6, #1
-; CHECK-NEXT: ubfiz w11, w30, #27, #1
+; CHECK-NEXT: ubfiz w9, w28, #26, #1
+; CHECK-NEXT: orr w10, w10, w14
+; CHECK-NEXT: fmov w14, s24
; CHECK-NEXT: fmov w7, s3
-; CHECK-NEXT: ubfiz w12, w15, #15, #1
+; CHECK-NEXT: fmov w13, s23
+; CHECK-NEXT: orr w11, w11, w15
+; CHECK-NEXT: bfi w6, w8, #6, #1
+; CHECK-NEXT: ubfiz w8, w30, #27, #1
; CHECK-NEXT: fmov w19, s4
-; CHECK-NEXT: mov z1.b, z0.b[31]
-; CHECK-NEXT: orr w9, w9, w11
-; CHECK-NEXT: ubfiz w11, w13, #29, #1
-; CHECK-NEXT: fmov w13, s2
-; CHECK-NEXT: ubfiz w8, w8, #28, #1
+; CHECK-NEXT: orr w9, w11, w9
; CHECK-NEXT: orr w10, w10, w12
-; CHECK-NEXT: ubfiz w12, w7, #16, #1
-; CHECK-NEXT: ubfiz w14, w19, #17, #1
; CHECK-NEXT: orr w8, w9, w8
-; CHECK-NEXT: ubfiz w9, w13, #30, #1
+; CHECK-NEXT: ubfiz w9, w14, #29, #1
+; CHECK-NEXT: fmov w14, s2
+; CHECK-NEXT: ubfiz w11, w7, #16, #1
+; CHECK-NEXT: ubfiz w13, w13, #28, #1
+; CHECK-NEXT: mov z1.b, z0.b[31]
+; CHECK-NEXT: ubfiz w12, w19, #17, #1
+; CHECK-NEXT: orr w10, w10, w11
+; CHECK-NEXT: orr w8, w8, w13
+; CHECK-NEXT: ubfiz w11, w14, #30, #1
; CHECK-NEXT: orr w10, w10, w12
-; CHECK-NEXT: orr w8, w8, w11
-; CHECK-NEXT: orr w10, w10, w14
; CHECK-NEXT: orr w8, w8, w9
+; CHECK-NEXT: orr w9, w6, w10
+; CHECK-NEXT: orr w8, w8, w11
+; CHECK-NEXT: orr w8, w9, w8
; CHECK-NEXT: fmov w9, s1
-; CHECK-NEXT: orr w10, w6, w10
-; CHECK-NEXT: orr w8, w10, w8
; CHECK-NEXT: orr w8, w8, w9, lsl #31
; CHECK-NEXT: tbz w8, #0, .LBB5_2
; CHECK-NEXT: // %bb.1: // %cond.load
@@ -1400,118 +1398,114 @@ define void @masked_load_v64f32(ptr %ap, ptr %bp, ptr %c) vscale_range(16,0) #0
; CHECK-NEXT: mov z0.s, p1/z, #-1 // =0xffffffffffffffff
; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h
; CHECK-NEXT: uzp1 z0.b, z0.b, z0.b
-; CHECK-NEXT: umov w12, v0.b[1]
; CHECK-NEXT: mov z3.b, z0.b[18]
; CHECK-NEXT: mov z4.b, z0.b[19]
-; CHECK-NEXT: fmov w28, s0
-; CHECK-NEXT: umov w17, v0.b[7]
-; CHECK-NEXT: umov w4, v0.b[8]
+; CHECK-NEXT: umov w12, v0.b[1]
+; CHECK-NEXT: fmov w25, s0
+; CHECK-NEXT: umov w3, v0.b[7]
+; CHECK-NEXT: umov w5, v0.b[8]
; CHECK-NEXT: mov z5.b, z0.b[20]
; CHECK-NEXT: umov w13, v0.b[2]
-; CHECK-NEXT: umov w3, v0.b[9]
-; CHECK-NEXT: mov z1.b, z0.b[16]
+; CHECK-NEXT: umov w4, v0.b[9]
; CHECK-NEXT: mov z6.b, z0.b[21]
; CHECK-NEXT: fmov w19, s3
; CHECK-NEXT: fmov w20, s4
-; CHECK-NEXT: and x28, x28, #0x1
; CHECK-NEXT: umov w18, v0.b[10]
-; CHECK-NEXT: mov z2.b, z0.b[17]
; CHECK-NEXT: mov z7.b, z0.b[22]
-; CHECK-NEXT: fmov w21, s5
-; CHECK-NEXT: bfi x28, x12, #1, #1
+; CHECK-NEXT: and x25, x25, #0x1
; CHECK-NEXT: umov w11, v0.b[3]
; CHECK-NEXT: umov w1, v0.b[11]
-; CHECK-NEXT: fmov w6, s1
-; CHECK-NEXT: mov z1.b, z0.b[23]
+; CHECK-NEXT: mov z16.b, z0.b[23]
+; CHECK-NEXT: fmov w21, s5
+; CHECK-NEXT: bfi x25, x12, #1, #1
+; CHECK-NEXT: umov w16, v0.b[12]
+; CHECK-NEXT: mov z17.b, z0.b[24]
; CHECK-NEXT: fmov w22, s6
-; CHECK-NEXT: ubfiz x12, x17, #7, #1
-; CHECK-NEXT: ubfiz x17, x4, #8, #1
-; CHECK-NEXT: ubfiz x4, x19, #18, #1
-; CHECK-NEXT: ubfiz x19, x20, #19, #1
-; CHECK-NEXT: bfi x28, x13, #2, #1
-; CHECK-NEXT: ubfiz x13, x3, #9, #1
-; CHECK-NEXT: umov w15, v0.b[12]
-; CHECK-NEXT: fmov w7, s2
-; CHECK-NEXT: mov z2.b, z0.b[24]
-; CHECK-NEXT: fmov w23, s7
-; CHECK-NEXT: orr x12, x12, x17
-; CHECK-NEXT: ubfiz x3, x21, #20, #1
-; CHECK-NEXT: fmov w24, s1
-; CHECK-NEXT: orr x17, x4, x19
-; CHECK-NEXT: orr x12, x12, x13
-; CHECK-NEXT: ubfiz x13, x18, #10, #1
-; CHECK-NEXT: ubfiz x18, x22, #21, #1
-; CHECK-NEXT: orr x17, x17, x3
-; CHECK-NEXT: bfi x28, x11, #3, #1
-; CHECK-NEXT: ubfiz x11, x1, #11, #1
+; CHECK-NEXT: ubfiz x3, x3, #7, #1
+; CHECK-NEXT: ubfiz x5, x5, #8, #1
+; CHECK-NEXT: ubfiz x19, x19, #18, #1
+; CHECK-NEXT: ubfiz x20, x20, #19, #1
; CHECK-NEXT: umov w10, v0.b[4]
-; CHECK-NEXT: umov w8, v0.b[5]
-; CHECK-NEXT: umov w16, v0.b[13]
-; CHECK-NEXT: fmov w25, s2
-; CHECK-NEXT: orr x12, x12, x13
-; CHECK-NEXT: orr x13, x17, x18
-; CHECK-NEXT: ubfiz x17, x23, #22, #1
-; CHECK-NEXT: orr x11, x12, x11
-; CHECK-NEXT: ubfiz x12, x15, #12, #1
-; CHECK-NEXT: ubfiz x15, x24, #23, #1
+; CHECK-NEXT: umov w17, v0.b[13]
+; CHECK-NEXT: mov z18.b, z0.b[25]
+; CHECK-NEXT: fmov w23, s7
+; CHECK-NEXT: bfi x25, x13, #2, #1
+; CHECK-NEXT: ubfiz x4, x4, #9, #1
+; CHECK-NEXT: fmov w24, s16
+; CHECK-NEXT: orr x3, x3, x5
+; CHECK-NEXT: orr x19, x19, x20
+; CHECK-NEXT: ubfiz x20, x21, #20, #1
+; CHECK-NEXT: ubfiz x18, x18, #10, #1
; CHECK-NEXT: umov w14, v0.b[14]
-; CHECK-NEXT: mov z16.b, z0.b[25]
-; CHECK-NEXT: orr x13, x13, x17
-; CHECK-NEXT: umov w5, v0.b[15]
-; CHECK-NEXT: orr x11, x11, x12
-; CHECK-NEXT: orr x12, x13, x15
-; CHECK-NEXT: ubfiz x13, x25, #24, #1
-; CHECK-NEXT: str x8, [sp, #240] // 8-byte Spill
+; CHECK-NEXT: mov z19.b, z0.b[26]
+; CHECK-NEXT: fmov w26, s17
+; CHECK-NEXT: orr x3, x3, x4
+; CHECK-NEXT: ubfiz x4, x22, #21, #1
+; CHECK-NEXT: bfi x25, x11, #3, #1
+; CHECK-NEXT: ubfiz x11, x1, #11, #1
+; CHECK-NEXT: umov w9, v0.b[5]
+; CHECK-NEXT: mov z20.b, z0.b[27]
+; CHECK-NEXT: fmov w27, s18
+; CHECK-NEXT: orr x19, x19, x20
+; CHECK-NEXT: orr x18, x3, x18
+; CHECK-NEXT: ubfiz x3, x23, #22, #1
+; CHECK-NEXT: ubfiz x16, x16, #12, #1
+; CHECK-NEXT: umov w15, v0.b[15]
+; CHECK-NEXT: mov z1.b, z0.b[16]
+; CHECK-NEXT: mov z21.b, z0.b[28]
+; CHECK-NEXT: orr x1, x19, x4
+; CHECK-NEXT: orr x11, x18, x11
+; CHECK-NEXT: ubfiz x18, x24, #23, #1
+; CHECK-NEXT: bfi x25, x10, #4, #1
+; CHECK-NEXT: ubfiz x10, x17, #13, #1
; CHECK-NEXT: umov w8, v0.b[6]
-; CHECK-NEXT: mov z4.b, z0.b[26]
-; CHECK-NEXT: bfi x28, x10, #4, #1
-; CHECK-NEXT: ubfiz x10, x16, #13, #1
-; CHECK-NEXT: mov z5.b, z0.b[27]
-; CHECK-NEXT: fmov w26, s16
-; CHECK-NEXT: orr x12, x12, x13
-; CHECK-NEXT: ldr x13, [sp, #240] // 8-byte Reload
-; CHECK-NEXT: mov z6.b, z0.b[28]
+; CHECK-NEXT: mov z2.b, z0.b[17]
+; CHECK-NEXT: mov z4.b, z0.b[29]
+; CHECK-NEXT: fmov w28, s19
+; CHECK-NEXT: orr x1, x1, x3
+; CHECK-NEXT: orr x11, x11, x16
+; CHECK-NEXT: ubfiz x17, x26, #24, #1
+; CHECK-NEXT: mov z5.b, z0.b[30]
+; CHECK-NEXT: fmov w30, s20
+; CHECK-NEXT: orr x16, x1, x18
; CHECK-NEXT: orr x10, x11, x10
; CHECK-NEXT: ubfiz x11, x14, #14, #1
-; CHECK-NEXT: mov z7.b, z0.b[29]
-; CHECK-NEXT: fmov w27, s4
-; CHECK-NEXT: bfi x28, x13, #5, #1
-; CHECK-NEXT: ubfiz x13, x5, #15, #1
-; CHECK-NEXT: str x8, [sp, #248] // 8-byte Spill
-; CHECK-NEXT: mov z17.b, z0.b[30]
-; CHECK-NEXT: fmov w30, s5
-; CHECK-NEXT: ubfiz x14, x26, #25, #1
+; CHECK-NEXT: ubfiz x14, x27, #25, #1
+; CHECK-NEXT: fmov w6, s1
+; CHECK-NEXT: fmov w12, s21
+; CHECK-NEXT: orr x16, x16, x17
+; CHECK-NEXT: bfi x25, x9, #5, #1
+; CHECK-NEXT: fmov w7, s2
+; CHECK-NEXT: fmov w13, s4
+; CHECK-NEXT: ubfiz x9, x15, #15, #1
; CHECK-NEXT: orr x10, x10, x11
-; CHECK-NEXT: fmov w8, s6
-; CHECK-NEXT: fmov w9, s7
-; CHECK-NEXT: orr x10, x10, x13
-; CHECK-NEXT: ldr x13, [sp, #248] // 8-byte Reload
-; CHECK-NEXT: orr x11, x12, x14
-; CHECK-NEXT: ubfiz x12, x27, #26, #1
-; CHECK-NEXT: fmov w20, s17
+; CHECK-NEXT: orr x11, x16, x14
+; CHECK-NEXT: ubfiz x14, x28, #26, #1
+; CHECK-NEXT: fmov w5, s5
+; CHECK-NEXT: bfi x25, x8, #6, #1
+; CHECK-NEXT: ubfiz x8, x30, #27, #1
; CHECK-NEXT: mov z3.b, z0.b[31]
-; CHECK-NEXT: bfi x28, x13, #6, #1
-; CHECK-NEXT: ubfiz x13, x30, #27, #1
-; CHECK-NEXT: ubfiz x8, x8, #28, #1
-; CHECK-NEXT: orr x11, x11, x12
-; CHECK-NEXT: ubfiz x12, x6, #16, #1
-; CHECK-NEXT: ubfiz x9, x9, #29, #1
-; CHECK-NEXT: orr x11, x11, x13
-; CHECK-NEXT: ubfiz x13, x7, #17, #1
+; CHECK-NEXT: orr x9, x10, x9
+; CHECK-NEXT: orr x10, x11, x14
+; CHECK-NEXT: ubfiz x11, x6, #16, #1
+; CHECK-NEXT: ubfiz x12, x12, #28, #1
+; CHECK-NEXT: orr x8, x10, x8
+; CHECK-NEXT: ubfiz x10, x7, #17, #1
+; CHECK-NEXT: ubfiz x13, x13, #29, #1
; CHECK-NEXT: mov z2.b, z0.b[32]
-; CHECK-NEXT: orr x10, x10, x12
-; CHECK-NEXT: orr x8, x11, x8
-; CHECK-NEXT: ubfiz x11, x20, #30, #1
+; CHECK-NEXT: orr x9, x9, x11
+; CHECK-NEXT: orr x8, x8, x12
+; CHECK-NEXT: ubfiz x11, x5, #30, #1
; CHECK-NEXT: fmov w12, s3
-; CHECK-NEXT: orr x10, x10, x13
-; CHECK-NEXT: orr x8, x8, x9
-; CHECK-NEXT: orr x9, x28, x10
-; CHECK-NEXT: orr x8, x8, x11
+; CHECK-NEXT: orr x9, x9, x10
+; CHECK-NEXT: orr x8, x8, x13
; CHECK-NEXT: mov z1.b, z0.b[33]
+; CHECK-NEXT: orr x9, x25, x9
+; CHECK-NEXT: orr x8, x8, x11
; CHECK-NEXT: orr x8, x9, x8
; CHECK-NEXT: fmov w9, s2
-; CHECK-NEXT: mov z2.b, z0.b[34]
; CHECK-NEXT: lsl w10, w12, #31
+; CHECK-NEXT: mov z2.b, z0.b[34]
; CHECK-NEXT: orr x8, x8, x10
; CHECK-NEXT: and w9, w9, #0x1
; CHECK-NEXT: orr x8, x8, x9, lsl #32
@@ -2388,14 +2382,14 @@ define void @masked_load_v64f32(ptr %ap, ptr %bp, ptr %c) vscale_range(16,0) #0
define void @masked_load_v64i8(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_256-LABEL: masked_load_v64i8:
; VBITS_GE_256: // %bb.0:
-; VBITS_GE_256-NEXT: sub sp, sp, #128
-; VBITS_GE_256-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill
-; VBITS_GE_256-NEXT: stp x28, x27, [sp, #48] // 16-byte Folded Spill
-; VBITS_GE_256-NEXT: stp x26, x25, [sp, #64] // 16-byte Folded Spill
-; VBITS_GE_256-NEXT: stp x24, x23, [sp, #80] // 16-byte Folded Spill
-; VBITS_GE_256-NEXT: stp x22, x21, [sp, #96] // 16-byte Folded Spill
-; VBITS_GE_256-NEXT: stp x20, x19, [sp, #112] // 16-byte Folded Spill
-; VBITS_GE_256-NEXT: .cfi_def_cfa_offset 128
+; VBITS_GE_256-NEXT: sub sp, sp, #112
+; VBITS_GE_256-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill
+; VBITS_GE_256-NEXT: stp x28, x27, [sp, #32] // 16-byte Folded Spill
+; VBITS_GE_256-NEXT: stp x26, x25, [sp, #48] // 16-byte Folded Spill
+; VBITS_GE_256-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill
+; VBITS_GE_256-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill
+; VBITS_GE_256-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill
+; VBITS_GE_256-NEXT: .cfi_def_cfa_offset 112
; VBITS_GE_256-NEXT: .cfi_offset w19, -8
; VBITS_GE_256-NEXT: .cfi_offset w20, -16
; VBITS_GE_256-NEXT: .cfi_offset w21, -24
@@ -2417,221 +2411,213 @@ define void @masked_load_v64i8(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_256-NEXT: ld1b { z1.b }, p0/z, [x0]
; VBITS_GE_256-NEXT: mov z0.b, p1/z, #-1 // =0xffffffffffffffff
; VBITS_GE_256-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
-; VBITS_GE_256-NEXT: umov w13, v0.b[1]
+; VBITS_GE_256-NEXT: umov w14, v0.b[1]
+; VBITS_GE_256-NEXT: umov w15, v0.b[7]
+; VBITS_GE_256-NEXT: umov w16, v0.b[8]
; VBITS_GE_256-NEXT: fmov w8, s0
-; VBITS_GE_256-NEXT: umov w10, v0.b[2]
-; VBITS_GE_256-NEXT: umov w16, v0.b[3]
-; VBITS_GE_256-NEXT: umov w12, v0.b[4]
-; VBITS_GE_256-NEXT: umov w11, v0.b[5]
-; VBITS_GE_256-NEXT: umov w14, v0.b[7]
-; VBITS_GE_256-NEXT: umov w15, v0.b[8]
-; VBITS_GE_256-NEXT: umov w9, v0.b[6]
-; VBITS_GE_256-NEXT: and w8, w8, #0x1
; VBITS_GE_256-NEXT: umov w17, v0.b[9]
-; VBITS_GE_256-NEXT: mov z16.b, z0.b[17]
-; VBITS_GE_256-NEXT: bfi w8, w13, #1, #1
+; VBITS_GE_256-NEXT: umov w13, v0.b[2]
; VBITS_GE_256-NEXT: umov w18, v0.b[10]
-; VBITS_GE_256-NEXT: mov z24.b, z0.b[29]
; VBITS_GE_256-NEXT: umov w1, v0.b[11]
+; VBITS_GE_256-NEXT: umov w12, v0.b[3]
; VBITS_GE_256-NEXT: umov w3, v0.b[12]
-; VBITS_GE_256-NEXT: mov z17.b, z0.b[18]
-; VBITS_GE_256-NEXT: bfi w8, w10, #2, #1
-; VBITS_GE_256-NEXT: mov z18.b, z0.b[19]
-; VBITS_GE_256-NEXT: fmov w19, s16
-; VBITS_GE_256-NEXT: ubfiz w22, w14, #7, #1
-; VBITS_GE_256-NEXT: ubfiz w23, w15, #8, #1
+; VBITS_GE_256-NEXT: mov z20.b, z0.b[18]
+; VBITS_GE_256-NEXT: mov z21.b, z0.b[19]
+; VBITS_GE_256-NEXT: and w8, w8, #0x1
+; VBITS_GE_256-NEXT: ubfiz w15, w15, #7, #1
+; VBITS_GE_256-NEXT: ubfiz w16, w16, #8, #1
+; VBITS_GE_256-NEXT: bfi w8, w14, #1, #1
; VBITS_GE_256-NEXT: umov w4, v0.b[13]
-; VBITS_GE_256-NEXT: bfi w8, w16, #3, #1
-; VBITS_GE_256-NEXT: mov z19.b, z0.b[20]
-; VBITS_GE_256-NEXT: mov z25.b, z0.b[30]
+; VBITS_GE_256-NEXT: mov z22.b, z0.b[20]
; VBITS_GE_256-NEXT: ubfiz w17, w17, #9, #1
+; VBITS_GE_256-NEXT: umov w11, v0.b[4]
; VBITS_GE_256-NEXT: umov w5, v0.b[14]
-; VBITS_GE_256-NEXT: mov z20.b, z0.b[21]
-; VBITS_GE_256-NEXT: bfi w8, w12, #4, #1
-; VBITS_GE_256-NEXT: ubfiz w10, w18, #10, #1
-; VBITS_GE_256-NEXT: orr w18, w22, w23
-; VBITS_GE_256-NEXT: mov z21.b, z0.b[22]
-; VBITS_GE_256-NEXT: str w19, [sp, #16] // 4-byte Spill
-; VBITS_GE_256-NEXT: fmov w19, s17
-; VBITS_GE_256-NEXT: bfi w8, w11, #5, #1
-; VBITS_GE_256-NEXT: fmov w20, s18
-; VBITS_GE_256-NEXT: ubfiz w1, w1, #11, #1
-; VBITS_GE_256-NEXT: orr w17, w18, w17
-; VBITS_GE_256-NEXT: mov z22.b, z0.b[23]
-; VBITS_GE_256-NEXT: fmov w21, s19
+; VBITS_GE_256-NEXT: mov z18.b, z0.b[16]
+; VBITS_GE_256-NEXT: ubfiz w18, w18, #10, #1
+; VBITS_GE_256-NEXT: bfi w8, w13, #2, #1
+; VBITS_GE_256-NEXT: orr w15, w15, w16
+; VBITS_GE_256-NEXT: umov w6, v0.b[15]
+; VBITS_GE_256-NEXT: fmov w20, s20
+; VBITS_GE_256-NEXT: fmov w21, s21
+; VBITS_GE_256-NEXT: ubfiz w13, w1, #11, #1
+; VBITS_GE_256-NEXT: orr w15, w15, w17
+; VBITS_GE_256-NEXT: umov w10, v0.b[5]
+; VBITS_GE_256-NEXT: fmov w22, s22
+; VBITS_GE_256-NEXT: ubfiz w1, w3, #12, #1
+; VBITS_GE_256-NEXT: bfi w8, w12, #3, #1
+; VBITS_GE_256-NEXT: orr w15, w15, w18
+; VBITS_GE_256-NEXT: fmov w7, s18
+; VBITS_GE_256-NEXT: ubfiz w16, w4, #13, #1
+; VBITS_GE_256-NEXT: orr w13, w15, w13
+; VBITS_GE_256-NEXT: umov w9, v0.b[6]
+; VBITS_GE_256-NEXT: mov z19.b, z0.b[17]
+; VBITS_GE_256-NEXT: mov z23.b, z0.b[21]
+; VBITS_GE_256-NEXT: ubfiz w12, w5, #14, #1
+; VBITS_GE_256-NEXT: bfi w8, w11, #4, #1
+; VBITS_GE_256-NEXT: ubfiz w11, w20, #18, #1
+; VBITS_GE_256-NEXT: ubfiz w15, w21, #19, #1
+; VBITS_GE_256-NEXT: orr w13, w13, w1
+; VBITS_GE_256-NEXT: mov z3.b, z0.b[22]
+; VBITS_GE_256-NEXT: ubfiz w17, w6, #15, #1
+; VBITS_GE_256-NEXT: ubfiz w18, w22, #20, #1
+; VBITS_GE_256-NEXT: orr w13, w13, w16
+; VBITS_GE_256-NEXT: mov z4.b, z0.b[23]
+; VBITS_GE_256-NEXT: ubfiz w3, w7, #16, #1
+; VBITS_GE_256-NEXT: bfi w8, w10, #5, #1
+; VBITS_GE_256-NEXT: orr w11, w11, w15
+; VBITS_GE_256-NEXT: orr w12, w13, w12
+; VBITS_GE_256-NEXT: mov z5.b, z0.b[24]
+; VBITS_GE_256-NEXT: fmov w19, s19
+; VBITS_GE_256-NEXT: fmov w14, s23
+; VBITS_GE_256-NEXT: orr w18, w11, w18
+; VBITS_GE_256-NEXT: orr w11, w12, w17
; VBITS_GE_256-NEXT: bfi w8, w9, #6, #1
-; VBITS_GE_256-NEXT: fmov w9, s24
-; VBITS_GE_256-NEXT: ubfiz w16, w3, #12, #1
-; VBITS_GE_256-NEXT: orr w10, w17, w10
+; VBITS_GE_256-NEXT: orr w9, w11, w3
+; VBITS_GE_256-NEXT: fmov w11, s3
; VBITS_GE_256-NEXT: mov z1.b, p1/z, #-1 // =0xffffffffffffffff
-; VBITS_GE_256-NEXT: mov z7.b, z0.b[16]
-; VBITS_GE_256-NEXT: mov z3.b, z0.b[24]
-; VBITS_GE_256-NEXT: fmov w13, s20
-; VBITS_GE_256-NEXT: ubfiz w18, w4, #13, #1
-; VBITS_GE_256-NEXT: str w9, [sp, #8] // 4-byte Spill
-; VBITS_GE_256-NEXT: fmov w9, s25
-; VBITS_GE_256-NEXT: orr w10, w10, w1
-; VBITS_GE_256-NEXT: mov z4.b, z0.b[25]
-; VBITS_GE_256-NEXT: fmov w14, s21
-; VBITS_GE_256-NEXT: ubfiz w17, w5, #14, #1
-; VBITS_GE_256-NEXT: ubfiz w1, w19, #18, #1
-; VBITS_GE_256-NEXT: orr w10, w10, w16
-; VBITS_GE_256-NEXT: ubfiz w16, w20, #19, #1
-; VBITS_GE_256-NEXT: fmov w15, s22
-; VBITS_GE_256-NEXT: orr w10, w10, w18
-; VBITS_GE_256-NEXT: ubfiz w24, w21, #20, #1
-; VBITS_GE_256-NEXT: str w9, [sp, #20] // 4-byte Spill
-; VBITS_GE_256-NEXT: umov w9, v1.b[6]
-; VBITS_GE_256-NEXT: fmov w7, s7
-; VBITS_GE_256-NEXT: orr w17, w10, w17
-; VBITS_GE_256-NEXT: orr w10, w1, w16
-; VBITS_GE_256-NEXT: fmov w22, s3
-; VBITS_GE_256-NEXT: ubfiz w13, w13, #21, #1
-; VBITS_GE_256-NEXT: umov w6, v0.b[15]
-; VBITS_GE_256-NEXT: fmov w21, s4
-; VBITS_GE_256-NEXT: orr w24, w10, w24
-; VBITS_GE_256-NEXT: ubfiz w14, w14, #22, #1
-; VBITS_GE_256-NEXT: ubfiz w15, w15, #23, #1
-; VBITS_GE_256-NEXT: orr w24, w24, w13
-; VBITS_GE_256-NEXT: ubfiz w11, w7, #16, #1
-; VBITS_GE_256-NEXT: umov w7, v1.b[1]
-; VBITS_GE_256-NEXT: str w9, [sp, #12] // 4-byte Spill
-; VBITS_GE_256-NEXT: fmov w9, s1
-; VBITS_GE_256-NEXT: orr w14, w24, w14
-; VBITS_GE_256-NEXT: ubfiz w22, w22, #24, #1
-; VBITS_GE_256-NEXT: mov z5.b, z0.b[26]
-; VBITS_GE_256-NEXT: orr w14, w14, w15
-; VBITS_GE_256-NEXT: ubfiz w15, w21, #25, #1
-; VBITS_GE_256-NEXT: mov z6.b, z0.b[27]
-; VBITS_GE_256-NEXT: ubfiz w12, w6, #15, #1
-; VBITS_GE_256-NEXT: umov w6, v1.b[2]
-; VBITS_GE_256-NEXT: orr w14, w14, w22
-; VBITS_GE_256-NEXT: mov z23.b, z0.b[28]
-; VBITS_GE_256-NEXT: orr w15, w14, w15
-; VBITS_GE_256-NEXT: and w14, w9, #0x1
-; VBITS_GE_256-NEXT: fmov w3, s5
-; VBITS_GE_256-NEXT: umov w4, v1.b[3]
-; VBITS_GE_256-NEXT: umov w28, v1.b[8]
-; VBITS_GE_256-NEXT: bfi w14, w7, #1, #1
-; VBITS_GE_256-NEXT: fmov w18, s6
-; VBITS_GE_256-NEXT: umov w26, v1.b[7]
-; VBITS_GE_256-NEXT: orr w12, w17, w12
-; VBITS_GE_256-NEXT: fmov w17, s23
-; VBITS_GE_256-NEXT: umov w1, v1.b[4]
-; VBITS_GE_256-NEXT: umov w29, v1.b[9]
-; VBITS_GE_256-NEXT: bfi w14, w6, #2, #1
-; VBITS_GE_256-NEXT: orr w5, w12, w11
-; VBITS_GE_256-NEXT: umov w30, v1.b[10]
+; VBITS_GE_256-NEXT: fmov w24, s4
+; VBITS_GE_256-NEXT: ubfiz w10, w19, #17, #1
+; VBITS_GE_256-NEXT: ubfiz w6, w14, #21, #1
+; VBITS_GE_256-NEXT: fmov w19, s5
+; VBITS_GE_256-NEXT: mov z6.b, z0.b[25]
+; VBITS_GE_256-NEXT: ubfiz w7, w11, #22, #1
+; VBITS_GE_256-NEXT: mov z7.b, z0.b[26]
+; VBITS_GE_256-NEXT: mov z16.b, z0.b[27]
+; VBITS_GE_256-NEXT: umov w20, v1.b[1]
+; VBITS_GE_256-NEXT: fmov w30, s1
+; VBITS_GE_256-NEXT: orr w18, w18, w6
+; VBITS_GE_256-NEXT: ubfiz w24, w24, #23, #1
+; VBITS_GE_256-NEXT: orr w18, w18, w7
+; VBITS_GE_256-NEXT: ubfiz w19, w19, #24, #1
+; VBITS_GE_256-NEXT: umov w21, v1.b[2]
+; VBITS_GE_256-NEXT: mov z17.b, z0.b[28]
+; VBITS_GE_256-NEXT: fmov w5, s6
+; VBITS_GE_256-NEXT: orr w18, w18, w24
+; VBITS_GE_256-NEXT: umov w1, v1.b[3]
+; VBITS_GE_256-NEXT: mov z24.b, z0.b[29]
+; VBITS_GE_256-NEXT: orr w19, w18, w19
+; VBITS_GE_256-NEXT: and w18, w30, #0x1
+; VBITS_GE_256-NEXT: fmov w16, s7
+; VBITS_GE_256-NEXT: bfi w18, w20, #1, #1
+; VBITS_GE_256-NEXT: fmov w15, s16
+; VBITS_GE_256-NEXT: umov w17, v1.b[4]
+; VBITS_GE_256-NEXT: umov w25, v1.b[7]
+; VBITS_GE_256-NEXT: umov w27, v1.b[8]
+; VBITS_GE_256-NEXT: fmov w14, s17
+; VBITS_GE_256-NEXT: bfi w18, w21, #2, #1
+; VBITS_GE_256-NEXT: umov w28, v1.b[9]
+; VBITS_GE_256-NEXT: ubfiz w5, w5, #25, #1
+; VBITS_GE_256-NEXT: fmov w12, s24
+; VBITS_GE_256-NEXT: umov w29, v1.b[10]
; VBITS_GE_256-NEXT: mov z7.b, z1.b[18]
; VBITS_GE_256-NEXT: mov z16.b, z1.b[19]
-; VBITS_GE_256-NEXT: ldr w11, [sp, #16] // 4-byte Reload
-; VBITS_GE_256-NEXT: ubfiz w3, w3, #26, #1
-; VBITS_GE_256-NEXT: umov w16, v1.b[5]
-; VBITS_GE_256-NEXT: umov w23, v1.b[11]
+; VBITS_GE_256-NEXT: ubfiz w16, w16, #26, #1
+; VBITS_GE_256-NEXT: bfi w18, w1, #3, #1
+; VBITS_GE_256-NEXT: umov w13, v1.b[5]
+; VBITS_GE_256-NEXT: umov w22, v1.b[11]
; VBITS_GE_256-NEXT: mov z17.b, z1.b[20]
-; VBITS_GE_256-NEXT: ubfiz w18, w18, #27, #1
-; VBITS_GE_256-NEXT: bfi w14, w4, #3, #1
-; VBITS_GE_256-NEXT: ubfiz w7, w28, #8, #1
-; VBITS_GE_256-NEXT: ldr w28, [sp, #8] // 4-byte Reload
-; VBITS_GE_256-NEXT: umov w27, v1.b[12]
+; VBITS_GE_256-NEXT: orr w5, w19, w5
+; VBITS_GE_256-NEXT: ubfiz w15, w15, #27, #1
+; VBITS_GE_256-NEXT: umov w26, v1.b[12]
; VBITS_GE_256-NEXT: mov z18.b, z1.b[21]
-; VBITS_GE_256-NEXT: ubfiz w11, w11, #17, #1
-; VBITS_GE_256-NEXT: orr w15, w15, w3
-; VBITS_GE_256-NEXT: ubfiz w17, w17, #28, #1
-; VBITS_GE_256-NEXT: ubfiz w4, w26, #7, #1
-; VBITS_GE_256-NEXT: umov w25, v1.b[13]
+; VBITS_GE_256-NEXT: orr w16, w5, w16
+; VBITS_GE_256-NEXT: ubfiz w14, w14, #28, #1
+; VBITS_GE_256-NEXT: bfi w18, w17, #4, #1
+; VBITS_GE_256-NEXT: ubfiz w17, w25, #7, #1
+; VBITS_GE_256-NEXT: ubfiz w25, w27, #8, #1
+; VBITS_GE_256-NEXT: umov w23, v1.b[13]
; VBITS_GE_256-NEXT: mov z19.b, z1.b[22]
; VBITS_GE_256-NEXT: fmov w24, s7
-; VBITS_GE_256-NEXT: fmov w21, s16
-; VBITS_GE_256-NEXT: orr w15, w15, w18
-; VBITS_GE_256-NEXT: ubfiz w28, w28, #29, #1
-; VBITS_GE_256-NEXT: ubfiz w29, w29, #9, #1
-; VBITS_GE_256-NEXT: bfi w14, w1, #4, #1
+; VBITS_GE_256-NEXT: fmov w30, s16
+; VBITS_GE_256-NEXT: orr w15, w16, w15
+; VBITS_GE_256-NEXT: ubfiz w12, w12, #29, #1
+; VBITS_GE_256-NEXT: ubfiz w28, w28, #9, #1
+; VBITS_GE_256-NEXT: orr w10, w9, w10
; VBITS_GE_256-NEXT: mov z20.b, z1.b[23]
-; VBITS_GE_256-NEXT: fmov w22, s17
-; VBITS_GE_256-NEXT: orr w11, w5, w11
-; VBITS_GE_256-NEXT: orr w15, w15, w17
-; VBITS_GE_256-NEXT: orr w1, w4, w7
-; VBITS_GE_256-NEXT: ubfiz w4, w30, #10, #1
-; VBITS_GE_256-NEXT: fmov w5, s18
-; VBITS_GE_256-NEXT: orr w8, w8, w11
-; VBITS_GE_256-NEXT: orr w11, w15, w28
-; VBITS_GE_256-NEXT: orr w15, w1, w29
-; VBITS_GE_256-NEXT: bfi w14, w16, #5, #1
-; VBITS_GE_256-NEXT: ubfiz w16, w23, #11, #1
+; VBITS_GE_256-NEXT: fmov w20, s17
+; VBITS_GE_256-NEXT: orr w14, w15, w14
+; VBITS_GE_256-NEXT: orr w17, w17, w25
+; VBITS_GE_256-NEXT: ubfiz w29, w29, #10, #1
; VBITS_GE_256-NEXT: mov z21.b, z1.b[24]
+; VBITS_GE_256-NEXT: fmov w19, s18
+; VBITS_GE_256-NEXT: orr w8, w8, w10
+; VBITS_GE_256-NEXT: orr w10, w14, w12
+; VBITS_GE_256-NEXT: orr w12, w17, w28
+; VBITS_GE_256-NEXT: bfi w18, w13, #5, #1
+; VBITS_GE_256-NEXT: ubfiz w13, w22, #11, #1
+; VBITS_GE_256-NEXT: umov w3, v1.b[14]
; VBITS_GE_256-NEXT: mov z22.b, z1.b[25]
-; VBITS_GE_256-NEXT: fmov w12, s19
-; VBITS_GE_256-NEXT: orr w15, w15, w4
-; VBITS_GE_256-NEXT: ubfiz w1, w27, #12, #1
-; VBITS_GE_256-NEXT: ubfiz w4, w24, #18, #1
-; VBITS_GE_256-NEXT: ubfiz w7, w21, #19, #1
-; VBITS_GE_256-NEXT: umov w19, v1.b[14]
-; VBITS_GE_256-NEXT: fmov w9, s20
-; VBITS_GE_256-NEXT: orr w15, w15, w16
-; VBITS_GE_256-NEXT: ubfiz w16, w25, #13, #1
-; VBITS_GE_256-NEXT: ubfiz w21, w22, #20, #1
-; VBITS_GE_256-NEXT: umov w20, v1.b[15]
+; VBITS_GE_256-NEXT: fmov w21, s19
+; VBITS_GE_256-NEXT: orr w12, w12, w29
+; VBITS_GE_256-NEXT: ubfiz w14, w26, #12, #1
+; VBITS_GE_256-NEXT: ubfiz w17, w24, #18, #1
+; VBITS_GE_256-NEXT: ubfiz w22, w30, #19, #1
+; VBITS_GE_256-NEXT: umov w4, v1.b[15]
+; VBITS_GE_256-NEXT: fmov w5, s20
+; VBITS_GE_256-NEXT: orr w12, w12, w13
+; VBITS_GE_256-NEXT: ubfiz w13, w23, #13, #1
+; VBITS_GE_256-NEXT: ubfiz w20, w20, #20, #1
; VBITS_GE_256-NEXT: mov z23.b, z1.b[26]
-; VBITS_GE_256-NEXT: orr w15, w15, w1
-; VBITS_GE_256-NEXT: orr w1, w4, w7
-; VBITS_GE_256-NEXT: ubfiz w4, w5, #21, #1
+; VBITS_GE_256-NEXT: fmov w16, s21
+; VBITS_GE_256-NEXT: orr w12, w12, w14
+; VBITS_GE_256-NEXT: orr w14, w17, w22
+; VBITS_GE_256-NEXT: ubfiz w17, w19, #21, #1
+; VBITS_GE_256-NEXT: mov z25.b, z0.b[30]
+; VBITS_GE_256-NEXT: umov w11, v1.b[6]
; VBITS_GE_256-NEXT: mov z24.b, z1.b[27]
-; VBITS_GE_256-NEXT: fmov w3, s21
-; VBITS_GE_256-NEXT: fmov w18, s22
-; VBITS_GE_256-NEXT: orr w15, w15, w16
-; VBITS_GE_256-NEXT: orr w16, w1, w21
-; VBITS_GE_256-NEXT: ubfiz w12, w12, #22, #1
-; VBITS_GE_256-NEXT: orr w16, w16, w4
-; VBITS_GE_256-NEXT: ubfiz w9, w9, #23, #1
+; VBITS_GE_256-NEXT: fmov w1, s22
+; VBITS_GE_256-NEXT: orr w12, w12, w13
+; VBITS_GE_256-NEXT: orr w13, w14, w20
+; VBITS_GE_256-NEXT: ubfiz w14, w21, #22, #1
; VBITS_GE_256-NEXT: mov z3.b, z1.b[29]
-; VBITS_GE_256-NEXT: fmov w6, s23
-; VBITS_GE_256-NEXT: ubfiz w1, w19, #14, #1
-; VBITS_GE_256-NEXT: orr w12, w16, w12
+; VBITS_GE_256-NEXT: orr w13, w13, w17
+; VBITS_GE_256-NEXT: ubfiz w17, w3, #14, #1
+; VBITS_GE_256-NEXT: ubfiz w3, w5, #23, #1
+; VBITS_GE_256-NEXT: fmov w15, s23
+; VBITS_GE_256-NEXT: orr w13, w13, w14
+; VBITS_GE_256-NEXT: ubfiz w14, w4, #15, #1
+; VBITS_GE_256-NEXT: ubfiz w16, w16, #24, #1
+; VBITS_GE_256-NEXT: fmov w9, s25
; VBITS_GE_256-NEXT: mov z5.b, z1.b[16]
; VBITS_GE_256-NEXT: mov z25.b, z1.b[28]
-; VBITS_GE_256-NEXT: fmov w17, s24
-; VBITS_GE_256-NEXT: ubfiz w16, w20, #15, #1
-; VBITS_GE_256-NEXT: ubfiz w3, w3, #24, #1
-; VBITS_GE_256-NEXT: orr w9, w12, w9
-; VBITS_GE_256-NEXT: ubfiz w12, w18, #25, #1
-; VBITS_GE_256-NEXT: ldr w18, [sp, #12] // 4-byte Reload
+; VBITS_GE_256-NEXT: fmov w27, s24
+; VBITS_GE_256-NEXT: orr w12, w12, w17
+; VBITS_GE_256-NEXT: orr w13, w13, w3
+; VBITS_GE_256-NEXT: ubfiz w17, w1, #25, #1
; VBITS_GE_256-NEXT: mov z6.b, z1.b[17]
-; VBITS_GE_256-NEXT: orr w15, w15, w1
+; VBITS_GE_256-NEXT: bfi w18, w11, #6, #1
+; VBITS_GE_256-NEXT: orr w11, w12, w14
+; VBITS_GE_256-NEXT: orr w12, w13, w16
; VBITS_GE_256-NEXT: mov z4.b, z1.b[30]
-; VBITS_GE_256-NEXT: orr w9, w9, w3
-; VBITS_GE_256-NEXT: bfi w14, w18, #6, #1
-; VBITS_GE_256-NEXT: orr w15, w15, w16
-; VBITS_GE_256-NEXT: ubfiz w16, w6, #26, #1
-; VBITS_GE_256-NEXT: fmov w18, s3
-; VBITS_GE_256-NEXT: fmov w10, s5
-; VBITS_GE_256-NEXT: fmov w26, s25
-; VBITS_GE_256-NEXT: orr w9, w9, w12
-; VBITS_GE_256-NEXT: ubfiz w17, w17, #27, #1
-; VBITS_GE_256-NEXT: fmov w13, s6
-; VBITS_GE_256-NEXT: orr w9, w9, w16
-; VBITS_GE_256-NEXT: ldr w12, [sp, #20] // 4-byte Reload
+; VBITS_GE_256-NEXT: orr w12, w12, w17
+; VBITS_GE_256-NEXT: ubfiz w13, w15, #26, #1
+; VBITS_GE_256-NEXT: fmov w17, s3
+; VBITS_GE_256-NEXT: fmov w6, s5
+; VBITS_GE_256-NEXT: fmov w25, s25
+; VBITS_GE_256-NEXT: ubfiz w16, w27, #27, #1
+; VBITS_GE_256-NEXT: fmov w7, s6
+; VBITS_GE_256-NEXT: orr w12, w12, w13
+; VBITS_GE_256-NEXT: ubfiz w9, w9, #30, #1
; VBITS_GE_256-NEXT: mov z0.b, z0.b[31]
-; VBITS_GE_256-NEXT: orr w9, w9, w17
-; VBITS_GE_256-NEXT: ubfiz w17, w18, #29, #1
-; VBITS_GE_256-NEXT: fmov w18, s4
-; VBITS_GE_256-NEXT: ubfiz w10, w10, #16, #1
-; VBITS_GE_256-NEXT: ubfiz w16, w26, #28, #1
-; VBITS_GE_256-NEXT: ubfiz w13, w13, #17, #1
; VBITS_GE_256-NEXT: mov z2.b, z1.b[31]
-; VBITS_GE_256-NEXT: ubfiz w12, w12, #30, #1
+; VBITS_GE_256-NEXT: orr w12, w12, w16
+; VBITS_GE_256-NEXT: ubfiz w16, w17, #29, #1
+; VBITS_GE_256-NEXT: fmov w17, s4
+; VBITS_GE_256-NEXT: ubfiz w14, w6, #16, #1
+; VBITS_GE_256-NEXT: ubfiz w13, w25, #28, #1
+; VBITS_GE_256-NEXT: ubfiz w15, w7, #17, #1
+; VBITS_GE_256-NEXT: orr w9, w10, w9
; VBITS_GE_256-NEXT: ptrue p1.b
-; VBITS_GE_256-NEXT: orr w10, w15, w10
-; VBITS_GE_256-NEXT: orr w9, w9, w16
-; VBITS_GE_256-NEXT: ubfiz w15, w18, #30, #1
-; VBITS_GE_256-NEXT: orr w10, w10, w13
-; VBITS_GE_256-NEXT: orr w9, w9, w17
-; VBITS_GE_256-NEXT: orr w11, w11, w12
-; VBITS_GE_256-NEXT: orr w10, w14, w10
-; VBITS_GE_256-NEXT: orr w9, w9, w15
-; VBITS_GE_256-NEXT: orr w8, w8, w11
+; VBITS_GE_256-NEXT: orr w11, w11, w14
+; VBITS_GE_256-NEXT: orr w12, w12, w13
+; VBITS_GE_256-NEXT: ubfiz w13, w17, #30, #1
+; VBITS_GE_256-NEXT: orr w10, w11, w15
+; VBITS_GE_256-NEXT: orr w11, w12, w16
+; VBITS_GE_256-NEXT: orr w8, w8, w9
+; VBITS_GE_256-NEXT: orr w9, w18, w10
+; VBITS_GE_256-NEXT: orr w10, w11, w13
; VBITS_GE_256-NEXT: fmov w11, s0
-; VBITS_GE_256-NEXT: orr w9, w10, w9
+; VBITS_GE_256-NEXT: orr w9, w9, w10
; VBITS_GE_256-NEXT: fmov w10, s2
; VBITS_GE_256-NEXT: orr w8, w8, w11, lsl #31
; VBITS_GE_256-NEXT: orr w9, w9, w10, lsl #31
@@ -2789,16 +2775,16 @@ define void @masked_load_v64i8(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_256-NEXT: cmpeq p2.b, p1/z, z2.b, z3.b
; VBITS_GE_256-NEXT: mov z1.b, p2/m, w8
; VBITS_GE_256-NEXT: .LBB7_67: // %else250
-; VBITS_GE_256-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload
+; VBITS_GE_256-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; VBITS_GE_256-NEXT: mov w8, #32 // =0x20
-; VBITS_GE_256-NEXT: ldp x22, x21, [sp, #96] // 16-byte Folded Reload
+; VBITS_GE_256-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; VBITS_GE_256-NEXT: st1b { z1.b }, p0, [x2, x8]
-; VBITS_GE_256-NEXT: ldp x24, x23, [sp, #80] // 16-byte Folded Reload
+; VBITS_GE_256-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; VBITS_GE_256-NEXT: st1b { z0.b }, p0, [x2]
-; VBITS_GE_256-NEXT: ldp x26, x25, [sp, #64] // 16-byte Folded Reload
-; VBITS_GE_256-NEXT: ldp x28, x27, [sp, #48] // 16-byte Folded Reload
-; VBITS_GE_256-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload
-; VBITS_GE_256-NEXT: add sp, sp, #128
+; VBITS_GE_256-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
+; VBITS_GE_256-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; VBITS_GE_256-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
+; VBITS_GE_256-NEXT: add sp, sp, #112
; VBITS_GE_256-NEXT: ret
; VBITS_GE_256-NEXT: .LBB7_68: // %cond.load5
; VBITS_GE_256-NEXT: mov w9, #2 // =0x2
@@ -4819,12 +4805,12 @@ define void @masked_load_v32i16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: uzp1 z0.b, z0.b, z0.b
; VBITS_GE_512-NEXT: mov z5.b, z0.b[18]
; VBITS_GE_512-NEXT: mov z6.b, z0.b[19]
-; VBITS_GE_512-NEXT: umov w12, v0.b[1]
+; VBITS_GE_512-NEXT: umov w13, v0.b[1]
; VBITS_GE_512-NEXT: mov z7.b, z0.b[20]
; VBITS_GE_512-NEXT: fmov w6, s0
; VBITS_GE_512-NEXT: umov w3, v0.b[7]
; VBITS_GE_512-NEXT: umov w5, v0.b[8]
-; VBITS_GE_512-NEXT: umov w13, v0.b[2]
+; VBITS_GE_512-NEXT: umov w12, v0.b[2]
; VBITS_GE_512-NEXT: umov w4, v0.b[9]
; VBITS_GE_512-NEXT: mov z16.b, z0.b[21]
; VBITS_GE_512-NEXT: fmov w20, s5
@@ -4835,92 +4821,90 @@ define void @masked_load_v32i16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: and w6, w6, #0x1
; VBITS_GE_512-NEXT: umov w11, v0.b[3]
; VBITS_GE_512-NEXT: umov w16, v0.b[11]
-; VBITS_GE_512-NEXT: bfi w6, w12, #1, #1
-; VBITS_GE_512-NEXT: umov w18, v0.b[12]
+; VBITS_GE_512-NEXT: bfi w6, w13, #1, #1
; VBITS_GE_512-NEXT: mov z18.b, z0.b[23]
; VBITS_GE_512-NEXT: fmov w23, s16
-; VBITS_GE_512-NEXT: ubfiz w12, w3, #7, #1
-; VBITS_GE_512-NEXT: ubfiz w3, w5, #8, #1
-; VBITS_GE_512-NEXT: ubfiz w5, w20, #18, #1
-; VBITS_GE_512-NEXT: ubfiz w20, w21, #19, #1
+; VBITS_GE_512-NEXT: ubfiz w3, w3, #7, #1
+; VBITS_GE_512-NEXT: ubfiz w5, w5, #8, #1
+; VBITS_GE_512-NEXT: ubfiz w20, w20, #18, #1
+; VBITS_GE_512-NEXT: ubfiz w21, w21, #19, #1
; VBITS_GE_512-NEXT: umov w10, v0.b[4]
+; VBITS_GE_512-NEXT: umov w18, v0.b[12]
; VBITS_GE_512-NEXT: mov z19.b, z0.b[24]
; VBITS_GE_512-NEXT: fmov w24, s17
-; VBITS_GE_512-NEXT: bfi w6, w13, #2, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w4, #9, #1
+; VBITS_GE_512-NEXT: bfi w6, w12, #2, #1
+; VBITS_GE_512-NEXT: ubfiz w12, w4, #9, #1
; VBITS_GE_512-NEXT: ubfiz w4, w22, #20, #1
; VBITS_GE_512-NEXT: umov w17, v0.b[13]
-; VBITS_GE_512-NEXT: orr w12, w12, w3
-; VBITS_GE_512-NEXT: orr w3, w5, w20
+; VBITS_GE_512-NEXT: mov z20.b, z0.b[25]
+; VBITS_GE_512-NEXT: orr w3, w3, w5
+; VBITS_GE_512-NEXT: orr w5, w20, w21
; VBITS_GE_512-NEXT: ubfiz w1, w1, #10, #1
; VBITS_GE_512-NEXT: umov w9, v0.b[5]
-; VBITS_GE_512-NEXT: mov z20.b, z0.b[25]
+; VBITS_GE_512-NEXT: mov z21.b, z0.b[26]
; VBITS_GE_512-NEXT: fmov w25, s18
-; VBITS_GE_512-NEXT: orr w12, w12, w13
-; VBITS_GE_512-NEXT: orr w13, w3, w4
-; VBITS_GE_512-NEXT: ubfiz w3, w23, #21, #1
+; VBITS_GE_512-NEXT: orr w12, w3, w12
+; VBITS_GE_512-NEXT: orr w3, w5, w4
+; VBITS_GE_512-NEXT: ubfiz w4, w23, #21, #1
; VBITS_GE_512-NEXT: bfi w6, w11, #3, #1
; VBITS_GE_512-NEXT: umov w14, v0.b[14]
-; VBITS_GE_512-NEXT: mov z21.b, z0.b[26]
+; VBITS_GE_512-NEXT: mov z22.b, z0.b[27]
; VBITS_GE_512-NEXT: fmov w26, s19
; VBITS_GE_512-NEXT: orr w11, w12, w1
; VBITS_GE_512-NEXT: ubfiz w12, w16, #11, #1
-; VBITS_GE_512-NEXT: ubfiz w16, w18, #12, #1
-; VBITS_GE_512-NEXT: ubfiz w18, w24, #22, #1
+; VBITS_GE_512-NEXT: ubfiz w1, w24, #22, #1
; VBITS_GE_512-NEXT: umov w15, v0.b[15]
-; VBITS_GE_512-NEXT: mov z22.b, z0.b[27]
-; VBITS_GE_512-NEXT: orr w13, w13, w3
-; VBITS_GE_512-NEXT: bfi w6, w10, #4, #1
; VBITS_GE_512-NEXT: fmov w27, s20
+; VBITS_GE_512-NEXT: orr w16, w3, w4
+; VBITS_GE_512-NEXT: ubfiz w18, w18, #12, #1
+; VBITS_GE_512-NEXT: bfi w6, w10, #4, #1
+; VBITS_GE_512-NEXT: umov w8, v0.b[6]
+; VBITS_GE_512-NEXT: mov z24.b, z0.b[29]
+; VBITS_GE_512-NEXT: fmov w28, s21
; VBITS_GE_512-NEXT: orr w11, w11, w12
; VBITS_GE_512-NEXT: ubfiz w10, w17, #13, #1
-; VBITS_GE_512-NEXT: orr w12, w13, w18
-; VBITS_GE_512-NEXT: ubfiz w13, w25, #23, #1
-; VBITS_GE_512-NEXT: fmov w28, s21
-; VBITS_GE_512-NEXT: orr w11, w11, w16
-; VBITS_GE_512-NEXT: bfi w6, w9, #5, #1
-; VBITS_GE_512-NEXT: ubfiz w9, w26, #24, #1
-; VBITS_GE_512-NEXT: umov w8, v0.b[6]
+; VBITS_GE_512-NEXT: orr w12, w16, w1
+; VBITS_GE_512-NEXT: ubfiz w16, w25, #23, #1
; VBITS_GE_512-NEXT: mov z3.b, z0.b[16]
; VBITS_GE_512-NEXT: mov z23.b, z0.b[28]
; VBITS_GE_512-NEXT: fmov w29, s22
+; VBITS_GE_512-NEXT: orr w11, w11, w18
+; VBITS_GE_512-NEXT: bfi w6, w9, #5, #1
+; VBITS_GE_512-NEXT: ubfiz w9, w26, #24, #1
+; VBITS_GE_512-NEXT: mov z4.b, z0.b[17]
; VBITS_GE_512-NEXT: orr w10, w11, w10
-; VBITS_GE_512-NEXT: orr w11, w12, w13
+; VBITS_GE_512-NEXT: orr w11, w12, w16
; VBITS_GE_512-NEXT: ubfiz w12, w14, #14, #1
-; VBITS_GE_512-NEXT: mov z4.b, z0.b[17]
-; VBITS_GE_512-NEXT: mov z24.b, z0.b[29]
-; VBITS_GE_512-NEXT: ubfiz w13, w27, #25, #1
+; VBITS_GE_512-NEXT: ubfiz w14, w27, #25, #1
+; VBITS_GE_512-NEXT: mov z2.b, z0.b[30]
+; VBITS_GE_512-NEXT: fmov w13, s24
; VBITS_GE_512-NEXT: orr w9, w11, w9
; VBITS_GE_512-NEXT: ubfiz w11, w15, #15, #1
-; VBITS_GE_512-NEXT: mov z2.b, z0.b[30]
-; VBITS_GE_512-NEXT: ubfiz w14, w28, #26, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w12
+; VBITS_GE_512-NEXT: ubfiz w15, w28, #26, #1
; VBITS_GE_512-NEXT: fmov w7, s3
; VBITS_GE_512-NEXT: fmov w30, s23
-; VBITS_GE_512-NEXT: orr w9, w9, w13
-; VBITS_GE_512-NEXT: orr w10, w10, w11
-; VBITS_GE_512-NEXT: ubfiz w11, w29, #27, #1
-; VBITS_GE_512-NEXT: str w8, [sp, #8] // 4-byte Spill
-; VBITS_GE_512-NEXT: fmov w19, s4
-; VBITS_GE_512-NEXT: fmov w8, s24
+; VBITS_GE_512-NEXT: bfi w6, w8, #6, #1
+; VBITS_GE_512-NEXT: orr w8, w10, w12
; VBITS_GE_512-NEXT: orr w9, w9, w14
-; VBITS_GE_512-NEXT: orr w9, w9, w11
-; VBITS_GE_512-NEXT: fmov w11, s2
-; VBITS_GE_512-NEXT: ldr w15, [sp, #8] // 4-byte Reload
-; VBITS_GE_512-NEXT: ubfiz w12, w7, #16, #1
+; VBITS_GE_512-NEXT: ubfiz w10, w29, #27, #1
+; VBITS_GE_512-NEXT: fmov w19, s4
+; VBITS_GE_512-NEXT: orr w9, w9, w15
+; VBITS_GE_512-NEXT: orr w8, w8, w11
+; VBITS_GE_512-NEXT: orr w9, w9, w10
+; VBITS_GE_512-NEXT: ubfiz w10, w13, #29, #1
+; VBITS_GE_512-NEXT: fmov w13, s2
+; VBITS_GE_512-NEXT: ubfiz w11, w7, #16, #1
; VBITS_GE_512-NEXT: ubfiz w14, w30, #28, #1
; VBITS_GE_512-NEXT: mov z1.b, z0.b[31]
-; VBITS_GE_512-NEXT: ubfiz w13, w19, #17, #1
-; VBITS_GE_512-NEXT: ubfiz w8, w8, #29, #1
-; VBITS_GE_512-NEXT: bfi w6, w15, #6, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w12
-; VBITS_GE_512-NEXT: orr w9, w9, w14
-; VBITS_GE_512-NEXT: ubfiz w11, w11, #30, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w13
-; VBITS_GE_512-NEXT: orr w8, w9, w8
-; VBITS_GE_512-NEXT: orr w9, w6, w10
+; VBITS_GE_512-NEXT: ubfiz w12, w19, #17, #1
; VBITS_GE_512-NEXT: orr w8, w8, w11
-; VBITS_GE_512-NEXT: orr w8, w9, w8
+; VBITS_GE_512-NEXT: orr w9, w9, w14
+; VBITS_GE_512-NEXT: ubfiz w11, w13, #30, #1
+; VBITS_GE_512-NEXT: orr w8, w8, w12
+; VBITS_GE_512-NEXT: orr w9, w9, w10
+; VBITS_GE_512-NEXT: orr w8, w6, w8
+; VBITS_GE_512-NEXT: orr w9, w9, w11
+; VBITS_GE_512-NEXT: orr w8, w8, w9
; VBITS_GE_512-NEXT: fmov w9, s1
; VBITS_GE_512-NEXT: orr w8, w8, w9, lsl #31
; VBITS_GE_512-NEXT: tbz w8, #0, .LBB8_2
@@ -11532,19 +11516,18 @@ define void @masked_load_sext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: .cfi_offset w30, -88
; VBITS_GE_512-NEXT: .cfi_offset w29, -96
; VBITS_GE_512-NEXT: ptrue p0.h, vl32
-; VBITS_GE_512-NEXT: str x2, [sp] // 8-byte Spill
; VBITS_GE_512-NEXT: ld1h { z0.h }, p0/z, [x1]
; VBITS_GE_512-NEXT: cmpeq p1.h, p0/z, z0.h, #0
; VBITS_GE_512-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff
; VBITS_GE_512-NEXT: ptrue p1.b
; VBITS_GE_512-NEXT: uzp1 z0.b, z0.b, z0.b
-; VBITS_GE_512-NEXT: umov w12, v0.b[1]
+; VBITS_GE_512-NEXT: umov w13, v0.b[1]
; VBITS_GE_512-NEXT: fmov w6, s0
; VBITS_GE_512-NEXT: umov w3, v0.b[7]
; VBITS_GE_512-NEXT: umov w5, v0.b[8]
; VBITS_GE_512-NEXT: mov z5.b, z0.b[18]
; VBITS_GE_512-NEXT: mov z6.b, z0.b[19]
-; VBITS_GE_512-NEXT: umov w13, v0.b[2]
+; VBITS_GE_512-NEXT: umov w12, v0.b[2]
; VBITS_GE_512-NEXT: umov w4, v0.b[9]
; VBITS_GE_512-NEXT: mov z7.b, z0.b[20]
; VBITS_GE_512-NEXT: umov w1, v0.b[10]
@@ -11552,32 +11535,32 @@ define void @masked_load_sext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: mov z16.b, z0.b[21]
; VBITS_GE_512-NEXT: fmov w20, s5
; VBITS_GE_512-NEXT: fmov w21, s6
-; VBITS_GE_512-NEXT: bfi w6, w12, #1, #1
+; VBITS_GE_512-NEXT: bfi w6, w13, #1, #1
; VBITS_GE_512-NEXT: umov w11, v0.b[3]
; VBITS_GE_512-NEXT: umov w16, v0.b[11]
; VBITS_GE_512-NEXT: mov z17.b, z0.b[22]
; VBITS_GE_512-NEXT: fmov w22, s7
-; VBITS_GE_512-NEXT: ubfiz w12, w3, #7, #1
-; VBITS_GE_512-NEXT: ubfiz w3, w5, #8, #1
+; VBITS_GE_512-NEXT: ubfiz w3, w3, #7, #1
+; VBITS_GE_512-NEXT: ubfiz w5, w5, #8, #1
; VBITS_GE_512-NEXT: umov w17, v0.b[12]
; VBITS_GE_512-NEXT: mov z18.b, z0.b[23]
-; VBITS_GE_512-NEXT: bfi w6, w13, #2, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w4, #9, #1
+; VBITS_GE_512-NEXT: bfi w6, w12, #2, #1
+; VBITS_GE_512-NEXT: ubfiz w12, w4, #9, #1
; VBITS_GE_512-NEXT: umov w18, v0.b[13]
; VBITS_GE_512-NEXT: mov z19.b, z0.b[24]
; VBITS_GE_512-NEXT: fmov w23, s16
-; VBITS_GE_512-NEXT: ubfiz w5, w20, #18, #1
-; VBITS_GE_512-NEXT: ubfiz w20, w21, #19, #1
-; VBITS_GE_512-NEXT: orr w12, w12, w3
+; VBITS_GE_512-NEXT: ubfiz w20, w20, #18, #1
+; VBITS_GE_512-NEXT: ubfiz w21, w21, #19, #1
+; VBITS_GE_512-NEXT: orr w3, w3, w5
; VBITS_GE_512-NEXT: ubfiz w1, w1, #10, #1
; VBITS_GE_512-NEXT: umov w10, v0.b[4]
; VBITS_GE_512-NEXT: mov z20.b, z0.b[25]
; VBITS_GE_512-NEXT: fmov w24, s17
; VBITS_GE_512-NEXT: ubfiz w4, w22, #20, #1
-; VBITS_GE_512-NEXT: orr w12, w12, w13
+; VBITS_GE_512-NEXT: orr w12, w3, w12
; VBITS_GE_512-NEXT: mov z21.b, z0.b[26]
; VBITS_GE_512-NEXT: fmov w25, s18
-; VBITS_GE_512-NEXT: orr w3, w5, w20
+; VBITS_GE_512-NEXT: orr w5, w20, w21
; VBITS_GE_512-NEXT: bfi w6, w11, #3, #1
; VBITS_GE_512-NEXT: orr w11, w12, w1
; VBITS_GE_512-NEXT: ubfiz w12, w16, #11, #1
@@ -11585,61 +11568,61 @@ define void @masked_load_sext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: umov w14, v0.b[14]
; VBITS_GE_512-NEXT: mov z22.b, z0.b[27]
; VBITS_GE_512-NEXT: fmov w26, s19
-; VBITS_GE_512-NEXT: orr w13, w3, w4
-; VBITS_GE_512-NEXT: ubfiz w3, w23, #21, #1
-; VBITS_GE_512-NEXT: ubfiz w16, w17, #12, #1
+; VBITS_GE_512-NEXT: orr w3, w5, w4
+; VBITS_GE_512-NEXT: ubfiz w4, w23, #21, #1
+; VBITS_GE_512-NEXT: ubfiz w17, w17, #12, #1
+; VBITS_GE_512-NEXT: umov w15, v0.b[15]
; VBITS_GE_512-NEXT: fmov w27, s20
-; VBITS_GE_512-NEXT: ubfiz w17, w24, #22, #1
+; VBITS_GE_512-NEXT: ubfiz w1, w24, #22, #1
; VBITS_GE_512-NEXT: orr w11, w11, w12
; VBITS_GE_512-NEXT: ubfiz w12, w18, #13, #1
+; VBITS_GE_512-NEXT: umov w8, v0.b[6]
+; VBITS_GE_512-NEXT: mov z24.b, z0.b[29]
; VBITS_GE_512-NEXT: fmov w28, s21
-; VBITS_GE_512-NEXT: orr w13, w13, w3
+; VBITS_GE_512-NEXT: orr w16, w3, w4
; VBITS_GE_512-NEXT: ubfiz w18, w25, #23, #1
; VBITS_GE_512-NEXT: bfi w6, w10, #4, #1
-; VBITS_GE_512-NEXT: orr w10, w11, w16
-; VBITS_GE_512-NEXT: umov w15, v0.b[15]
+; VBITS_GE_512-NEXT: orr w10, w11, w17
; VBITS_GE_512-NEXT: mov z3.b, z0.b[16]
; VBITS_GE_512-NEXT: mov z23.b, z0.b[28]
; VBITS_GE_512-NEXT: fmov w29, s22
-; VBITS_GE_512-NEXT: orr w11, w13, w17
+; VBITS_GE_512-NEXT: orr w11, w16, w1
; VBITS_GE_512-NEXT: orr w10, w10, w12
; VBITS_GE_512-NEXT: ubfiz w12, w26, #24, #1
; VBITS_GE_512-NEXT: mov z4.b, z0.b[17]
-; VBITS_GE_512-NEXT: mov z24.b, z0.b[29]
; VBITS_GE_512-NEXT: orr w11, w11, w18
; VBITS_GE_512-NEXT: bfi w6, w9, #5, #1
; VBITS_GE_512-NEXT: ubfiz w9, w14, #14, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w27, #25, #1
+; VBITS_GE_512-NEXT: ubfiz w14, w27, #25, #1
; VBITS_GE_512-NEXT: mov z2.b, z0.b[30]
+; VBITS_GE_512-NEXT: fmov w13, s24
; VBITS_GE_512-NEXT: orr w11, w11, w12
-; VBITS_GE_512-NEXT: ubfiz w14, w28, #26, #1
+; VBITS_GE_512-NEXT: ubfiz w12, w15, #15, #1
+; VBITS_GE_512-NEXT: ubfiz w15, w28, #26, #1
; VBITS_GE_512-NEXT: fmov w7, s3
; VBITS_GE_512-NEXT: fmov w30, s23
-; VBITS_GE_512-NEXT: orr w9, w10, w9
-; VBITS_GE_512-NEXT: orr w10, w11, w13
-; VBITS_GE_512-NEXT: ubfiz w11, w29, #27, #1
-; VBITS_GE_512-NEXT: umov w2, v0.b[6]
+; VBITS_GE_512-NEXT: bfi w6, w8, #6, #1
+; VBITS_GE_512-NEXT: orr w8, w10, w9
+; VBITS_GE_512-NEXT: orr w9, w11, w14
+; VBITS_GE_512-NEXT: ubfiz w10, w29, #27, #1
; VBITS_GE_512-NEXT: fmov w19, s4
-; VBITS_GE_512-NEXT: fmov w8, s24
-; VBITS_GE_512-NEXT: ubfiz w12, w15, #15, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w14
+; VBITS_GE_512-NEXT: orr w9, w9, w15
+; VBITS_GE_512-NEXT: orr w8, w8, w12
+; VBITS_GE_512-NEXT: orr w9, w9, w10
+; VBITS_GE_512-NEXT: ubfiz w10, w13, #29, #1
+; VBITS_GE_512-NEXT: fmov w13, s2
+; VBITS_GE_512-NEXT: ubfiz w11, w7, #16, #1
; VBITS_GE_512-NEXT: ubfiz w14, w30, #28, #1
; VBITS_GE_512-NEXT: mov z1.b, z0.b[31]
-; VBITS_GE_512-NEXT: orr w10, w10, w11
-; VBITS_GE_512-NEXT: fmov w11, s2
-; VBITS_GE_512-NEXT: orr w9, w9, w12
-; VBITS_GE_512-NEXT: ubfiz w12, w7, #16, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w19, #17, #1
-; VBITS_GE_512-NEXT: ubfiz w8, w8, #29, #1
-; VBITS_GE_512-NEXT: bfi w6, w2, #6, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w14
-; VBITS_GE_512-NEXT: orr w9, w9, w12
-; VBITS_GE_512-NEXT: ubfiz w11, w11, #30, #1
-; VBITS_GE_512-NEXT: orr w8, w10, w8
-; VBITS_GE_512-NEXT: orr w9, w9, w13
-; VBITS_GE_512-NEXT: orr w9, w6, w9
+; VBITS_GE_512-NEXT: ubfiz w12, w19, #17, #1
; VBITS_GE_512-NEXT: orr w8, w8, w11
-; VBITS_GE_512-NEXT: orr w8, w9, w8
+; VBITS_GE_512-NEXT: orr w9, w9, w14
+; VBITS_GE_512-NEXT: ubfiz w11, w13, #30, #1
+; VBITS_GE_512-NEXT: orr w8, w8, w12
+; VBITS_GE_512-NEXT: orr w9, w9, w10
+; VBITS_GE_512-NEXT: orr w8, w6, w8
+; VBITS_GE_512-NEXT: orr w9, w9, w11
+; VBITS_GE_512-NEXT: orr w8, w8, w9
; VBITS_GE_512-NEXT: fmov w9, s1
; VBITS_GE_512-NEXT: orr w8, w8, w9, lsl #31
; VBITS_GE_512-NEXT: tbz w8, #0, .LBB25_2
@@ -11730,13 +11713,12 @@ define void @masked_load_sext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: mov z0.b, p2/m, w8
; VBITS_GE_512-NEXT: .LBB25_35: // %else122
; VBITS_GE_512-NEXT: sunpklo z0.h, z0.b
-; VBITS_GE_512-NEXT: ldr x8, [sp] // 8-byte Reload
; VBITS_GE_512-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; VBITS_GE_512-NEXT: st1h { z0.h }, p0, [x8]
; VBITS_GE_512-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; VBITS_GE_512-NEXT: st1h { z0.h }, p0, [x2]
; VBITS_GE_512-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: add sp, sp, #112
; VBITS_GE_512-NEXT: ret
@@ -13896,19 +13878,18 @@ define void @masked_load_zext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: .cfi_offset w30, -88
; VBITS_GE_512-NEXT: .cfi_offset w29, -96
; VBITS_GE_512-NEXT: ptrue p0.h, vl32
-; VBITS_GE_512-NEXT: str x2, [sp] // 8-byte Spill
; VBITS_GE_512-NEXT: ld1h { z0.h }, p0/z, [x1]
; VBITS_GE_512-NEXT: cmpeq p1.h, p0/z, z0.h, #0
; VBITS_GE_512-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff
; VBITS_GE_512-NEXT: ptrue p1.b
; VBITS_GE_512-NEXT: uzp1 z0.b, z0.b, z0.b
-; VBITS_GE_512-NEXT: umov w12, v0.b[1]
+; VBITS_GE_512-NEXT: umov w13, v0.b[1]
; VBITS_GE_512-NEXT: fmov w6, s0
; VBITS_GE_512-NEXT: umov w3, v0.b[7]
; VBITS_GE_512-NEXT: umov w5, v0.b[8]
; VBITS_GE_512-NEXT: mov z5.b, z0.b[18]
; VBITS_GE_512-NEXT: mov z6.b, z0.b[19]
-; VBITS_GE_512-NEXT: umov w13, v0.b[2]
+; VBITS_GE_512-NEXT: umov w12, v0.b[2]
; VBITS_GE_512-NEXT: umov w4, v0.b[9]
; VBITS_GE_512-NEXT: mov z7.b, z0.b[20]
; VBITS_GE_512-NEXT: umov w1, v0.b[10]
@@ -13916,32 +13897,32 @@ define void @masked_load_zext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: mov z16.b, z0.b[21]
; VBITS_GE_512-NEXT: fmov w20, s5
; VBITS_GE_512-NEXT: fmov w21, s6
-; VBITS_GE_512-NEXT: bfi w6, w12, #1, #1
+; VBITS_GE_512-NEXT: bfi w6, w13, #1, #1
; VBITS_GE_512-NEXT: umov w11, v0.b[3]
; VBITS_GE_512-NEXT: umov w16, v0.b[11]
; VBITS_GE_512-NEXT: mov z17.b, z0.b[22]
; VBITS_GE_512-NEXT: fmov w22, s7
-; VBITS_GE_512-NEXT: ubfiz w12, w3, #7, #1
-; VBITS_GE_512-NEXT: ubfiz w3, w5, #8, #1
+; VBITS_GE_512-NEXT: ubfiz w3, w3, #7, #1
+; VBITS_GE_512-NEXT: ubfiz w5, w5, #8, #1
; VBITS_GE_512-NEXT: umov w17, v0.b[12]
; VBITS_GE_512-NEXT: mov z18.b, z0.b[23]
-; VBITS_GE_512-NEXT: bfi w6, w13, #2, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w4, #9, #1
+; VBITS_GE_512-NEXT: bfi w6, w12, #2, #1
+; VBITS_GE_512-NEXT: ubfiz w12, w4, #9, #1
; VBITS_GE_512-NEXT: umov w18, v0.b[13]
; VBITS_GE_512-NEXT: mov z19.b, z0.b[24]
; VBITS_GE_512-NEXT: fmov w23, s16
-; VBITS_GE_512-NEXT: ubfiz w5, w20, #18, #1
-; VBITS_GE_512-NEXT: ubfiz w20, w21, #19, #1
-; VBITS_GE_512-NEXT: orr w12, w12, w3
+; VBITS_GE_512-NEXT: ubfiz w20, w20, #18, #1
+; VBITS_GE_512-NEXT: ubfiz w21, w21, #19, #1
+; VBITS_GE_512-NEXT: orr w3, w3, w5
; VBITS_GE_512-NEXT: ubfiz w1, w1, #10, #1
; VBITS_GE_512-NEXT: umov w10, v0.b[4]
; VBITS_GE_512-NEXT: mov z20.b, z0.b[25]
; VBITS_GE_512-NEXT: fmov w24, s17
; VBITS_GE_512-NEXT: ubfiz w4, w22, #20, #1
-; VBITS_GE_512-NEXT: orr w12, w12, w13
+; VBITS_GE_512-NEXT: orr w12, w3, w12
; VBITS_GE_512-NEXT: mov z21.b, z0.b[26]
; VBITS_GE_512-NEXT: fmov w25, s18
-; VBITS_GE_512-NEXT: orr w3, w5, w20
+; VBITS_GE_512-NEXT: orr w5, w20, w21
; VBITS_GE_512-NEXT: bfi w6, w11, #3, #1
; VBITS_GE_512-NEXT: orr w11, w12, w1
; VBITS_GE_512-NEXT: ubfiz w12, w16, #11, #1
@@ -13949,61 +13930,61 @@ define void @masked_load_zext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: umov w14, v0.b[14]
; VBITS_GE_512-NEXT: mov z22.b, z0.b[27]
; VBITS_GE_512-NEXT: fmov w26, s19
-; VBITS_GE_512-NEXT: orr w13, w3, w4
-; VBITS_GE_512-NEXT: ubfiz w3, w23, #21, #1
-; VBITS_GE_512-NEXT: ubfiz w16, w17, #12, #1
+; VBITS_GE_512-NEXT: orr w3, w5, w4
+; VBITS_GE_512-NEXT: ubfiz w4, w23, #21, #1
+; VBITS_GE_512-NEXT: ubfiz w17, w17, #12, #1
+; VBITS_GE_512-NEXT: umov w15, v0.b[15]
; VBITS_GE_512-NEXT: fmov w27, s20
-; VBITS_GE_512-NEXT: ubfiz w17, w24, #22, #1
+; VBITS_GE_512-NEXT: ubfiz w1, w24, #22, #1
; VBITS_GE_512-NEXT: orr w11, w11, w12
; VBITS_GE_512-NEXT: ubfiz w12, w18, #13, #1
+; VBITS_GE_512-NEXT: umov w8, v0.b[6]
+; VBITS_GE_512-NEXT: mov z24.b, z0.b[29]
; VBITS_GE_512-NEXT: fmov w28, s21
-; VBITS_GE_512-NEXT: orr w13, w13, w3
+; VBITS_GE_512-NEXT: orr w16, w3, w4
; VBITS_GE_512-NEXT: ubfiz w18, w25, #23, #1
; VBITS_GE_512-NEXT: bfi w6, w10, #4, #1
-; VBITS_GE_512-NEXT: orr w10, w11, w16
-; VBITS_GE_512-NEXT: umov w15, v0.b[15]
+; VBITS_GE_512-NEXT: orr w10, w11, w17
; VBITS_GE_512-NEXT: mov z3.b, z0.b[16]
; VBITS_GE_512-NEXT: mov z23.b, z0.b[28]
; VBITS_GE_512-NEXT: fmov w29, s22
-; VBITS_GE_512-NEXT: orr w11, w13, w17
+; VBITS_GE_512-NEXT: orr w11, w16, w1
; VBITS_GE_512-NEXT: orr w10, w10, w12
; VBITS_GE_512-NEXT: ubfiz w12, w26, #24, #1
; VBITS_GE_512-NEXT: mov z4.b, z0.b[17]
-; VBITS_GE_512-NEXT: mov z24.b, z0.b[29]
; VBITS_GE_512-NEXT: orr w11, w11, w18
; VBITS_GE_512-NEXT: bfi w6, w9, #5, #1
; VBITS_GE_512-NEXT: ubfiz w9, w14, #14, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w27, #25, #1
+; VBITS_GE_512-NEXT: ubfiz w14, w27, #25, #1
; VBITS_GE_512-NEXT: mov z2.b, z0.b[30]
+; VBITS_GE_512-NEXT: fmov w13, s24
; VBITS_GE_512-NEXT: orr w11, w11, w12
-; VBITS_GE_512-NEXT: ubfiz w14, w28, #26, #1
+; VBITS_GE_512-NEXT: ubfiz w12, w15, #15, #1
+; VBITS_GE_512-NEXT: ubfiz w15, w28, #26, #1
; VBITS_GE_512-NEXT: fmov w7, s3
; VBITS_GE_512-NEXT: fmov w30, s23
-; VBITS_GE_512-NEXT: orr w9, w10, w9
-; VBITS_GE_512-NEXT: orr w10, w11, w13
-; VBITS_GE_512-NEXT: ubfiz w11, w29, #27, #1
-; VBITS_GE_512-NEXT: umov w2, v0.b[6]
+; VBITS_GE_512-NEXT: bfi w6, w8, #6, #1
+; VBITS_GE_512-NEXT: orr w8, w10, w9
+; VBITS_GE_512-NEXT: orr w9, w11, w14
+; VBITS_GE_512-NEXT: ubfiz w10, w29, #27, #1
; VBITS_GE_512-NEXT: fmov w19, s4
-; VBITS_GE_512-NEXT: fmov w8, s24
-; VBITS_GE_512-NEXT: ubfiz w12, w15, #15, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w14
+; VBITS_GE_512-NEXT: orr w9, w9, w15
+; VBITS_GE_512-NEXT: orr w8, w8, w12
+; VBITS_GE_512-NEXT: orr w9, w9, w10
+; VBITS_GE_512-NEXT: ubfiz w10, w13, #29, #1
+; VBITS_GE_512-NEXT: fmov w13, s2
+; VBITS_GE_512-NEXT: ubfiz w11, w7, #16, #1
; VBITS_GE_512-NEXT: ubfiz w14, w30, #28, #1
; VBITS_GE_512-NEXT: mov z1.b, z0.b[31]
-; VBITS_GE_512-NEXT: orr w10, w10, w11
-; VBITS_GE_512-NEXT: fmov w11, s2
-; VBITS_GE_512-NEXT: orr w9, w9, w12
-; VBITS_GE_512-NEXT: ubfiz w12, w7, #16, #1
-; VBITS_GE_512-NEXT: ubfiz w13, w19, #17, #1
-; VBITS_GE_512-NEXT: ubfiz w8, w8, #29, #1
-; VBITS_GE_512-NEXT: bfi w6, w2, #6, #1
-; VBITS_GE_512-NEXT: orr w10, w10, w14
-; VBITS_GE_512-NEXT: orr w9, w9, w12
-; VBITS_GE_512-NEXT: ubfiz w11, w11, #30, #1
-; VBITS_GE_512-NEXT: orr w8, w10, w8
-; VBITS_GE_512-NEXT: orr w9, w9, w13
-; VBITS_GE_512-NEXT: orr w9, w6, w9
+; VBITS_GE_512-NEXT: ubfiz w12, w19, #17, #1
; VBITS_GE_512-NEXT: orr w8, w8, w11
-; VBITS_GE_512-NEXT: orr w8, w9, w8
+; VBITS_GE_512-NEXT: orr w9, w9, w14
+; VBITS_GE_512-NEXT: ubfiz w11, w13, #30, #1
+; VBITS_GE_512-NEXT: orr w8, w8, w12
+; VBITS_GE_512-NEXT: orr w9, w9, w10
+; VBITS_GE_512-NEXT: orr w8, w6, w8
+; VBITS_GE_512-NEXT: orr w9, w9, w11
+; VBITS_GE_512-NEXT: orr w8, w8, w9
; VBITS_GE_512-NEXT: fmov w9, s1
; VBITS_GE_512-NEXT: orr w8, w8, w9, lsl #31
; VBITS_GE_512-NEXT: tbz w8, #0, .LBB31_2
@@ -14094,13 +14075,12 @@ define void @masked_load_zext_v32i8i16_m16(ptr %ap, ptr %bp, ptr %c) #0 {
; VBITS_GE_512-NEXT: mov z0.b, p2/m, w8
; VBITS_GE_512-NEXT: .LBB31_35: // %else122
; VBITS_GE_512-NEXT: uunpklo z0.h, z0.b
-; VBITS_GE_512-NEXT: ldr x8, [sp] // 8-byte Reload
; VBITS_GE_512-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; VBITS_GE_512-NEXT: st1h { z0.h }, p0, [x8]
; VBITS_GE_512-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
+; VBITS_GE_512-NEXT: st1h { z0.h }, p0, [x2]
; VBITS_GE_512-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
; VBITS_GE_512-NEXT: add sp, sp, #112
; VBITS_GE_512-NEXT: ret
@@ -19066,122 +19046,121 @@ define void @masked_load_sext_v64i16i32(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .cfi_offset w30, -88
; CHECK-NEXT: .cfi_offset w29, -96
; CHECK-NEXT: ptrue p1.h, vl64
-; CHECK-NEXT: str x2, [sp] // 8-byte Spill
; CHECK-NEXT: ld1h { z0.h }, p1/z, [x1]
; CHECK-NEXT: cmpeq p0.h, p1/z, z0.h, #0
; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: uzp1 z0.b, z0.b, z0.b
; CHECK-NEXT: umov w12, v0.b[1]
-; CHECK-NEXT: fmov w25, s0
-; CHECK-NEXT: mov z3.b, z0.b[18]
-; CHECK-NEXT: mov z4.b, z0.b[19]
+; CHECK-NEXT: fmov w22, s0
+; CHECK-NEXT: mov z6.b, z0.b[18]
+; CHECK-NEXT: mov z2.b, z0.b[19]
; CHECK-NEXT: umov w13, v0.b[2]
; CHECK-NEXT: umov w14, v0.b[7]
; CHECK-NEXT: umov w3, v0.b[8]
-; CHECK-NEXT: mov z5.b, z0.b[20]
+; CHECK-NEXT: mov z1.b, z0.b[20]
; CHECK-NEXT: umov w4, v0.b[9]
-; CHECK-NEXT: mov z6.b, z0.b[21]
-; CHECK-NEXT: and x25, x25, #0x1
+; CHECK-NEXT: mov z4.b, z0.b[21]
+; CHECK-NEXT: and x22, x22, #0x1
+; CHECK-NEXT: umov w11, v0.b[3]
; CHECK-NEXT: umov w5, v0.b[10]
; CHECK-NEXT: mov z7.b, z0.b[22]
-; CHECK-NEXT: fmov w19, s3
-; CHECK-NEXT: fmov w20, s4
-; CHECK-NEXT: bfi x25, x12, #1, #1
-; CHECK-NEXT: umov w11, v0.b[3]
+; CHECK-NEXT: fmov w19, s6
+; CHECK-NEXT: fmov w20, s2
+; CHECK-NEXT: bfi x22, x12, #1, #1
; CHECK-NEXT: mov z16.b, z0.b[23]
-; CHECK-NEXT: fmov w21, s5
-; CHECK-NEXT: umov w15, v0.b[11]
-; CHECK-NEXT: fmov w22, s6
-; CHECK-NEXT: bfi x25, x13, #2, #1
-; CHECK-NEXT: ubfiz x13, x14, #7, #1
-; CHECK-NEXT: ubfiz x14, x3, #8, #1
+; CHECK-NEXT: fmov w21, s1
; CHECK-NEXT: umov w10, v0.b[4]
+; CHECK-NEXT: umov w15, v0.b[11]
+; CHECK-NEXT: fmov w23, s4
+; CHECK-NEXT: bfi x22, x13, #2, #1
+; CHECK-NEXT: ubfiz x14, x14, #7, #1
+; CHECK-NEXT: ubfiz x3, x3, #8, #1
; CHECK-NEXT: umov w17, v0.b[12]
; CHECK-NEXT: mov z17.b, z0.b[24]
-; CHECK-NEXT: fmov w23, s7
-; CHECK-NEXT: ubfiz x3, x4, #9, #1
-; CHECK-NEXT: ubfiz x4, x19, #18, #1
-; CHECK-NEXT: ubfiz x19, x20, #19, #1
+; CHECK-NEXT: fmov w24, s7
+; CHECK-NEXT: ubfiz x4, x4, #9, #1
+; CHECK-NEXT: ubfiz x19, x19, #18, #1
+; CHECK-NEXT: ubfiz x20, x20, #19, #1
+; CHECK-NEXT: umov w9, v0.b[5]
; CHECK-NEXT: umov w18, v0.b[13]
; CHECK-NEXT: mov z18.b, z0.b[25]
-; CHECK-NEXT: fmov w24, s16
-; CHECK-NEXT: orr x13, x13, x14
-; CHECK-NEXT: ubfiz x14, x5, #10, #1
+; CHECK-NEXT: fmov w25, s16
+; CHECK-NEXT: orr x14, x14, x3
+; CHECK-NEXT: ubfiz x3, x5, #10, #1
; CHECK-NEXT: ubfiz x5, x21, #20, #1
-; CHECK-NEXT: umov w9, v0.b[5]
+; CHECK-NEXT: bfi x22, x11, #3, #1
; CHECK-NEXT: umov w16, v0.b[14]
; CHECK-NEXT: mov z19.b, z0.b[26]
-; CHECK-NEXT: orr x4, x4, x19
-; CHECK-NEXT: orr x13, x13, x3
-; CHECK-NEXT: ubfiz x3, x22, #21, #1
-; CHECK-NEXT: bfi x25, x11, #3, #1
+; CHECK-NEXT: orr x19, x19, x20
+; CHECK-NEXT: orr x14, x14, x4
+; CHECK-NEXT: ubfiz x4, x23, #21, #1
+; CHECK-NEXT: umov w8, v0.b[6]
+; CHECK-NEXT: umov w1, v0.b[15]
+; CHECK-NEXT: mov z5.b, z0.b[17]
; CHECK-NEXT: mov z20.b, z0.b[27]
; CHECK-NEXT: fmov w26, s17
-; CHECK-NEXT: orr x11, x13, x14
-; CHECK-NEXT: orr x13, x4, x5
-; CHECK-NEXT: ubfiz x14, x15, #11, #1
-; CHECK-NEXT: ubfiz x15, x23, #22, #1
-; CHECK-NEXT: mov z1.b, z0.b[16]
+; CHECK-NEXT: orr x11, x14, x3
+; CHECK-NEXT: orr x14, x19, x5
+; CHECK-NEXT: ubfiz x15, x15, #11, #1
+; CHECK-NEXT: ubfiz x3, x24, #22, #1
+; CHECK-NEXT: bfi x22, x10, #4, #1
+; CHECK-NEXT: mov z3.b, z0.b[16]
; CHECK-NEXT: mov z21.b, z0.b[28]
-; CHECK-NEXT: fmov w27, s18
-; CHECK-NEXT: orr x13, x13, x3
-; CHECK-NEXT: bfi x25, x10, #4, #1
+; CHECK-NEXT: fmov w12, s18
+; CHECK-NEXT: orr x14, x14, x4
; CHECK-NEXT: ubfiz x10, x17, #12, #1
-; CHECK-NEXT: ubfiz x17, x24, #23, #1
-; CHECK-NEXT: umov w1, v0.b[15]
-; CHECK-NEXT: mov z2.b, z0.b[17]
-; CHECK-NEXT: mov z4.b, z0.b[29]
-; CHECK-NEXT: fmov w28, s19
-; CHECK-NEXT: orr x11, x11, x14
-; CHECK-NEXT: orr x13, x13, x15
-; CHECK-NEXT: ubfiz x14, x18, #13, #1
+; CHECK-NEXT: ubfiz x17, x25, #23, #1
+; CHECK-NEXT: mov z22.b, z0.b[29]
+; CHECK-NEXT: fmov w27, s19
+; CHECK-NEXT: orr x11, x11, x15
+; CHECK-NEXT: orr x14, x14, x3
+; CHECK-NEXT: ubfiz x15, x18, #13, #1
+; CHECK-NEXT: bfi x22, x9, #5, #1
+; CHECK-NEXT: fmov w7, s5
; CHECK-NEXT: mov z5.b, z0.b[30]
-; CHECK-NEXT: fmov w29, s20
+; CHECK-NEXT: fmov w28, s20
; CHECK-NEXT: orr x10, x11, x10
-; CHECK-NEXT: bfi x25, x9, #5, #1
-; CHECK-NEXT: orr x9, x13, x17
+; CHECK-NEXT: orr x9, x14, x17
; CHECK-NEXT: ubfiz x11, x16, #14, #1
-; CHECK-NEXT: ubfiz x13, x26, #24, #1
-; CHECK-NEXT: fmov w6, s1
-; CHECK-NEXT: fmov w12, s21
-; CHECK-NEXT: orr x10, x10, x14
-; CHECK-NEXT: ubfiz x15, x27, #25, #1
-; CHECK-NEXT: umov w2, v0.b[6]
-; CHECK-NEXT: fmov w7, s2
-; CHECK-NEXT: fmov w30, s4
+; CHECK-NEXT: ubfiz x14, x26, #24, #1
+; CHECK-NEXT: fmov w6, s3
+; CHECK-NEXT: fmov w29, s21
+; CHECK-NEXT: orr x10, x10, x15
+; CHECK-NEXT: bfi x22, x8, #6, #1
+; CHECK-NEXT: ubfiz x8, x1, #15, #1
+; CHECK-NEXT: ubfiz x12, x12, #25, #1
+; CHECK-NEXT: fmov w30, s22
; CHECK-NEXT: orr x10, x10, x11
-; CHECK-NEXT: orr x9, x9, x13
-; CHECK-NEXT: ubfiz x11, x28, #26, #1
-; CHECK-NEXT: fmov w8, s5
-; CHECK-NEXT: ubfiz x14, x1, #15, #1
-; CHECK-NEXT: orr x9, x9, x15
-; CHECK-NEXT: ubfiz x13, x29, #27, #1
+; CHECK-NEXT: orr x9, x9, x14
+; CHECK-NEXT: ubfiz x11, x27, #26, #1
+; CHECK-NEXT: fmov w13, s5
+; CHECK-NEXT: orr x8, x10, x8
+; CHECK-NEXT: orr x9, x9, x12
+; CHECK-NEXT: ubfiz x10, x28, #27, #1
; CHECK-NEXT: mov z3.b, z0.b[31]
; CHECK-NEXT: orr x9, x9, x11
; CHECK-NEXT: ubfiz x11, x6, #16, #1
-; CHECK-NEXT: ubfiz x12, x12, #28, #1
-; CHECK-NEXT: orr x10, x10, x14
-; CHECK-NEXT: orr x9, x9, x13
-; CHECK-NEXT: ubfiz x13, x7, #17, #1
+; CHECK-NEXT: ubfiz x12, x29, #28, #1
+; CHECK-NEXT: orr x9, x9, x10
+; CHECK-NEXT: ubfiz x10, x7, #17, #1
; CHECK-NEXT: ubfiz x14, x30, #29, #1
; CHECK-NEXT: mov z2.b, z0.b[32]
-; CHECK-NEXT: bfi x25, x2, #6, #1
-; CHECK-NEXT: orr x10, x10, x11
+; CHECK-NEXT: orr x8, x8, x11
; CHECK-NEXT: orr x9, x9, x12
-; CHECK-NEXT: ubfiz x8, x8, #30, #1
-; CHECK-NEXT: fmov w11, s3
-; CHECK-NEXT: orr x10, x10, x13
+; CHECK-NEXT: ubfiz x11, x13, #30, #1
+; CHECK-NEXT: fmov w12, s3
+; CHECK-NEXT: orr x8, x8, x10
; CHECK-NEXT: orr x9, x9, x14
; CHECK-NEXT: mov z1.b, z0.b[33]
-; CHECK-NEXT: orr x10, x25, x10
-; CHECK-NEXT: orr x8, x9, x8
-; CHECK-NEXT: orr x8, x10, x8
-; CHECK-NEXT: fmov w10, s2
-; CHECK-NEXT: lsl w9, w11, #31
-; CHECK-NEXT: mov z2.b, z0.b[34]
+; CHECK-NEXT: orr x8, x22, x8
+; CHECK-NEXT: orr x9, x9, x11
; CHECK-NEXT: orr x8, x8, x9
-; CHECK-NEXT: and w9, w10, #0x1
+; CHECK-NEXT: fmov w9, s2
+; CHECK-NEXT: lsl w10, w12, #31
+; CHECK-NEXT: mov z2.b, z0.b[34]
+; CHECK-NEXT: orr x8, x8, x10
+; CHECK-NEXT: and w9, w9, #0x1
; CHECK-NEXT: orr x8, x8, x9, lsl #32
; CHECK-NEXT: fmov w9, s1
; CHECK-NEXT: mov z1.b, z0.b[35]
@@ -19456,12 +19435,11 @@ define void @masked_load_sext_v64i16i32(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .LBB40_67: // %else250
; CHECK-NEXT: sunpklo z0.s, z0.h
; CHECK-NEXT: ptrue p0.s, vl64
-; CHECK-NEXT: ldr x8, [sp] // 8-byte Reload
; CHECK-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; CHECK-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; CHECK-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; CHECK-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEXT: st1w { z0.s }, p0, [x8]
+; CHECK-NEXT: st1w { z0.s }, p0, [x2]
; CHECK-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
; CHECK-NEXT: add sp, sp, #112
@@ -19999,19 +19977,18 @@ define void @masked_load_sext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .cfi_offset w30, -88
; CHECK-NEXT: .cfi_offset w29, -96
; CHECK-NEXT: ptrue p1.h, vl32
-; CHECK-NEXT: str x2, [sp] // 8-byte Spill
; CHECK-NEXT: ld1h { z0.h }, p1/z, [x1]
; CHECK-NEXT: cmpeq p0.h, p1/z, z0.h, #0
; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: uzp1 z0.b, z0.b, z0.b
-; CHECK-NEXT: umov w12, v0.b[1]
+; CHECK-NEXT: umov w13, v0.b[1]
; CHECK-NEXT: fmov w6, s0
; CHECK-NEXT: umov w3, v0.b[7]
; CHECK-NEXT: umov w5, v0.b[8]
; CHECK-NEXT: mov z5.b, z0.b[18]
; CHECK-NEXT: mov z6.b, z0.b[19]
-; CHECK-NEXT: umov w13, v0.b[2]
+; CHECK-NEXT: umov w12, v0.b[2]
; CHECK-NEXT: umov w4, v0.b[9]
; CHECK-NEXT: mov z7.b, z0.b[20]
; CHECK-NEXT: umov w1, v0.b[10]
@@ -20019,32 +19996,32 @@ define void @masked_load_sext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: mov z16.b, z0.b[21]
; CHECK-NEXT: fmov w20, s5
; CHECK-NEXT: fmov w21, s6
-; CHECK-NEXT: bfi w6, w12, #1, #1
+; CHECK-NEXT: bfi w6, w13, #1, #1
; CHECK-NEXT: umov w11, v0.b[3]
; CHECK-NEXT: umov w16, v0.b[11]
; CHECK-NEXT: mov z17.b, z0.b[22]
; CHECK-NEXT: fmov w22, s7
-; CHECK-NEXT: ubfiz w12, w3, #7, #1
-; CHECK-NEXT: ubfiz w3, w5, #8, #1
+; CHECK-NEXT: ubfiz w3, w3, #7, #1
+; CHECK-NEXT: ubfiz w5, w5, #8, #1
; CHECK-NEXT: umov w17, v0.b[12]
; CHECK-NEXT: mov z18.b, z0.b[23]
-; CHECK-NEXT: bfi w6, w13, #2, #1
-; CHECK-NEXT: ubfiz w13, w4, #9, #1
+; CHECK-NEXT: bfi w6, w12, #2, #1
+; CHECK-NEXT: ubfiz w12, w4, #9, #1
; CHECK-NEXT: umov w18, v0.b[13]
; CHECK-NEXT: mov z19.b, z0.b[24]
; CHECK-NEXT: fmov w23, s16
-; CHECK-NEXT: ubfiz w5, w20, #18, #1
-; CHECK-NEXT: ubfiz w20, w21, #19, #1
-; CHECK-NEXT: orr w12, w12, w3
+; CHECK-NEXT: ubfiz w20, w20, #18, #1
+; CHECK-NEXT: ubfiz w21, w21, #19, #1
+; CHECK-NEXT: orr w3, w3, w5
; CHECK-NEXT: ubfiz w1, w1, #10, #1
; CHECK-NEXT: umov w10, v0.b[4]
; CHECK-NEXT: mov z20.b, z0.b[25]
; CHECK-NEXT: fmov w24, s17
; CHECK-NEXT: ubfiz w4, w22, #20, #1
-; CHECK-NEXT: orr w12, w12, w13
+; CHECK-NEXT: orr w12, w3, w12
; CHECK-NEXT: mov z21.b, z0.b[26]
; CHECK-NEXT: fmov w25, s18
-; CHECK-NEXT: orr w3, w5, w20
+; CHECK-NEXT: orr w5, w20, w21
; CHECK-NEXT: bfi w6, w11, #3, #1
; CHECK-NEXT: orr w11, w12, w1
; CHECK-NEXT: ubfiz w12, w16, #11, #1
@@ -20052,61 +20029,61 @@ define void @masked_load_sext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: umov w14, v0.b[14]
; CHECK-NEXT: mov z22.b, z0.b[27]
; CHECK-NEXT: fmov w26, s19
-; CHECK-NEXT: orr w13, w3, w4
-; CHECK-NEXT: ubfiz w3, w23, #21, #1
-; CHECK-NEXT: ubfiz w16, w17, #12, #1
+; CHECK-NEXT: orr w3, w5, w4
+; CHECK-NEXT: ubfiz w4, w23, #21, #1
+; CHECK-NEXT: ubfiz w17, w17, #12, #1
+; CHECK-NEXT: umov w15, v0.b[15]
; CHECK-NEXT: fmov w27, s20
-; CHECK-NEXT: ubfiz w17, w24, #22, #1
+; CHECK-NEXT: ubfiz w1, w24, #22, #1
; CHECK-NEXT: orr w11, w11, w12
; CHECK-NEXT: ubfiz w12, w18, #13, #1
+; CHECK-NEXT: umov w8, v0.b[6]
+; CHECK-NEXT: mov z24.b, z0.b[29]
; CHECK-NEXT: fmov w28, s21
-; CHECK-NEXT: orr w13, w13, w3
+; CHECK-NEXT: orr w16, w3, w4
; CHECK-NEXT: ubfiz w18, w25, #23, #1
; CHECK-NEXT: bfi w6, w10, #4, #1
-; CHECK-NEXT: orr w10, w11, w16
-; CHECK-NEXT: umov w15, v0.b[15]
+; CHECK-NEXT: orr w10, w11, w17
; CHECK-NEXT: mov z3.b, z0.b[16]
; CHECK-NEXT: mov z23.b, z0.b[28]
; CHECK-NEXT: fmov w29, s22
-; CHECK-NEXT: orr w11, w13, w17
+; CHECK-NEXT: orr w11, w16, w1
; CHECK-NEXT: orr w10, w10, w12
; CHECK-NEXT: ubfiz w12, w26, #24, #1
; CHECK-NEXT: mov z4.b, z0.b[17]
-; CHECK-NEXT: mov z24.b, z0.b[29]
; CHECK-NEXT: orr w11, w11, w18
; CHECK-NEXT: bfi w6, w9, #5, #1
; CHECK-NEXT: ubfiz w9, w14, #14, #1
-; CHECK-NEXT: ubfiz w13, w27, #25, #1
+; CHECK-NEXT: ubfiz w14, w27, #25, #1
; CHECK-NEXT: mov z2.b, z0.b[30]
+; CHECK-NEXT: fmov w13, s24
; CHECK-NEXT: orr w11, w11, w12
-; CHECK-NEXT: ubfiz w14, w28, #26, #1
+; CHECK-NEXT: ubfiz w12, w15, #15, #1
+; CHECK-NEXT: ubfiz w15, w28, #26, #1
; CHECK-NEXT: fmov w7, s3
; CHECK-NEXT: fmov w30, s23
-; CHECK-NEXT: orr w9, w10, w9
-; CHECK-NEXT: orr w10, w11, w13
-; CHECK-NEXT: ubfiz w11, w29, #27, #1
-; CHECK-NEXT: umov w2, v0.b[6]
+; CHECK-NEXT: bfi w6, w8, #6, #1
+; CHECK-NEXT: orr w8, w10, w9
+; CHECK-NEXT: orr w9, w11, w14
+; CHECK-NEXT: ubfiz w10, w29, #27, #1
; CHECK-NEXT: fmov w19, s4
-; CHECK-NEXT: fmov w8, s24
-; CHECK-NEXT: ubfiz w12, w15, #15, #1
-; CHECK-NEXT: orr w10, w10, w14
+; CHECK-NEXT: orr w9, w9, w15
+; CHECK-NEXT: orr w8, w8, w12
+; CHECK-NEXT: orr w9, w9, w10
+; CHECK-NEXT: ubfiz w10, w13, #29, #1
+; CHECK-NEXT: fmov w13, s2
+; CHECK-NEXT: ubfiz w11, w7, #16, #1
; CHECK-NEXT: ubfiz w14, w30, #28, #1
; CHECK-NEXT: mov z1.b, z0.b[31]
-; CHECK-NEXT: orr w10, w10, w11
-; CHECK-NEXT: fmov w11, s2
-; CHECK-NEXT: orr w9, w9, w12
-; CHECK-NEXT: ubfiz w12, w7, #16, #1
-; CHECK-NEXT: ubfiz w13, w19, #17, #1
-; CHECK-NEXT: ubfiz w8, w8, #29, #1
-; CHECK-NEXT: bfi w6, w2, #6, #1
-; CHECK-NEXT: orr w10, w10, w14
-; CHECK-NEXT: orr w9, w9, w12
-; CHECK-NEXT: ubfiz w11, w11, #30, #1
-; CHECK-NEXT: orr w8, w10, w8
-; CHECK-NEXT: orr w9, w9, w13
-; CHECK-NEXT: orr w9, w6, w9
+; CHECK-NEXT: ubfiz w12, w19, #17, #1
; CHECK-NEXT: orr w8, w8, w11
-; CHECK-NEXT: orr w8, w9, w8
+; CHECK-NEXT: orr w9, w9, w14
+; CHECK-NEXT: ubfiz w11, w13, #30, #1
+; CHECK-NEXT: orr w8, w8, w12
+; CHECK-NEXT: orr w9, w9, w10
+; CHECK-NEXT: orr w8, w6, w8
+; CHECK-NEXT: orr w9, w9, w11
+; CHECK-NEXT: orr w8, w8, w9
; CHECK-NEXT: fmov w9, s1
; CHECK-NEXT: orr w8, w8, w9, lsl #31
; CHECK-NEXT: tbz w8, #0, .LBB41_2
@@ -20197,7 +20174,6 @@ define void @masked_load_sext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .LBB41_35: // %else122
; CHECK-NEXT: sunpklo z0.s, z0.h
; CHECK-NEXT: ptrue p0.d, vl32
-; CHECK-NEXT: ldr x8, [sp] // 8-byte Reload
; CHECK-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; CHECK-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; CHECK-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
@@ -20205,7 +20181,7 @@ define void @masked_load_sext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
; CHECK-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEXT: st1d { z0.d }, p0, [x8]
+; CHECK-NEXT: st1d { z0.d }, p0, [x2]
; CHECK-NEXT: add sp, sp, #112
; CHECK-NEXT: ret
; CHECK-NEXT: .LBB41_36: // %cond.load5
@@ -24208,122 +24184,121 @@ define void @masked_load_zext_v64i16i32(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .cfi_offset w30, -88
; CHECK-NEXT: .cfi_offset w29, -96
; CHECK-NEXT: ptrue p1.h, vl64
-; CHECK-NEXT: str x2, [sp] // 8-byte Spill
; CHECK-NEXT: ld1h { z0.h }, p1/z, [x1]
; CHECK-NEXT: cmpeq p0.h, p1/z, z0.h, #0
; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: uzp1 z0.b, z0.b, z0.b
; CHECK-NEXT: umov w12, v0.b[1]
-; CHECK-NEXT: fmov w25, s0
-; CHECK-NEXT: mov z3.b, z0.b[18]
-; CHECK-NEXT: mov z4.b, z0.b[19]
+; CHECK-NEXT: fmov w22, s0
+; CHECK-NEXT: mov z6.b, z0.b[18]
+; CHECK-NEXT: mov z2.b, z0.b[19]
; CHECK-NEXT: umov w13, v0.b[2]
; CHECK-NEXT: umov w14, v0.b[7]
; CHECK-NEXT: umov w3, v0.b[8]
-; CHECK-NEXT: mov z5.b, z0.b[20]
+; CHECK-NEXT: mov z1.b, z0.b[20]
; CHECK-NEXT: umov w4, v0.b[9]
-; CHECK-NEXT: mov z6.b, z0.b[21]
-; CHECK-NEXT: and x25, x25, #0x1
+; CHECK-NEXT: mov z4.b, z0.b[21]
+; CHECK-NEXT: and x22, x22, #0x1
+; CHECK-NEXT: umov w11, v0.b[3]
; CHECK-NEXT: umov w5, v0.b[10]
; CHECK-NEXT: mov z7.b, z0.b[22]
-; CHECK-NEXT: fmov w19, s3
-; CHECK-NEXT: fmov w20, s4
-; CHECK-NEXT: bfi x25, x12, #1, #1
-; CHECK-NEXT: umov w11, v0.b[3]
+; CHECK-NEXT: fmov w19, s6
+; CHECK-NEXT: fmov w20, s2
+; CHECK-NEXT: bfi x22, x12, #1, #1
; CHECK-NEXT: mov z16.b, z0.b[23]
-; CHECK-NEXT: fmov w21, s5
-; CHECK-NEXT: umov w15, v0.b[11]
-; CHECK-NEXT: fmov w22, s6
-; CHECK-NEXT: bfi x25, x13, #2, #1
-; CHECK-NEXT: ubfiz x13, x14, #7, #1
-; CHECK-NEXT: ubfiz x14, x3, #8, #1
+; CHECK-NEXT: fmov w21, s1
; CHECK-NEXT: umov w10, v0.b[4]
+; CHECK-NEXT: umov w15, v0.b[11]
+; CHECK-NEXT: fmov w23, s4
+; CHECK-NEXT: bfi x22, x13, #2, #1
+; CHECK-NEXT: ubfiz x14, x14, #7, #1
+; CHECK-NEXT: ubfiz x3, x3, #8, #1
; CHECK-NEXT: umov w17, v0.b[12]
; CHECK-NEXT: mov z17.b, z0.b[24]
-; CHECK-NEXT: fmov w23, s7
-; CHECK-NEXT: ubfiz x3, x4, #9, #1
-; CHECK-NEXT: ubfiz x4, x19, #18, #1
-; CHECK-NEXT: ubfiz x19, x20, #19, #1
+; CHECK-NEXT: fmov w24, s7
+; CHECK-NEXT: ubfiz x4, x4, #9, #1
+; CHECK-NEXT: ubfiz x19, x19, #18, #1
+; CHECK-NEXT: ubfiz x20, x20, #19, #1
+; CHECK-NEXT: umov w9, v0.b[5]
; CHECK-NEXT: umov w18, v0.b[13]
; CHECK-NEXT: mov z18.b, z0.b[25]
-; CHECK-NEXT: fmov w24, s16
-; CHECK-NEXT: orr x13, x13, x14
-; CHECK-NEXT: ubfiz x14, x5, #10, #1
+; CHECK-NEXT: fmov w25, s16
+; CHECK-NEXT: orr x14, x14, x3
+; CHECK-NEXT: ubfiz x3, x5, #10, #1
; CHECK-NEXT: ubfiz x5, x21, #20, #1
-; CHECK-NEXT: umov w9, v0.b[5]
+; CHECK-NEXT: bfi x22, x11, #3, #1
; CHECK-NEXT: umov w16, v0.b[14]
; CHECK-NEXT: mov z19.b, z0.b[26]
-; CHECK-NEXT: orr x4, x4, x19
-; CHECK-NEXT: orr x13, x13, x3
-; CHECK-NEXT: ubfiz x3, x22, #21, #1
-; CHECK-NEXT: bfi x25, x11, #3, #1
+; CHECK-NEXT: orr x19, x19, x20
+; CHECK-NEXT: orr x14, x14, x4
+; CHECK-NEXT: ubfiz x4, x23, #21, #1
+; CHECK-NEXT: umov w8, v0.b[6]
+; CHECK-NEXT: umov w1, v0.b[15]
+; CHECK-NEXT: mov z5.b, z0.b[17]
; CHECK-NEXT: mov z20.b, z0.b[27]
; CHECK-NEXT: fmov w26, s17
-; CHECK-NEXT: orr x11, x13, x14
-; CHECK-NEXT: orr x13, x4, x5
-; CHECK-NEXT: ubfiz x14, x15, #11, #1
-; CHECK-NEXT: ubfiz x15, x23, #22, #1
-; CHECK-NEXT: mov z1.b, z0.b[16]
+; CHECK-NEXT: orr x11, x14, x3
+; CHECK-NEXT: orr x14, x19, x5
+; CHECK-NEXT: ubfiz x15, x15, #11, #1
+; CHECK-NEXT: ubfiz x3, x24, #22, #1
+; CHECK-NEXT: bfi x22, x10, #4, #1
+; CHECK-NEXT: mov z3.b, z0.b[16]
; CHECK-NEXT: mov z21.b, z0.b[28]
-; CHECK-NEXT: fmov w27, s18
-; CHECK-NEXT: orr x13, x13, x3
-; CHECK-NEXT: bfi x25, x10, #4, #1
+; CHECK-NEXT: fmov w12, s18
+; CHECK-NEXT: orr x14, x14, x4
; CHECK-NEXT: ubfiz x10, x17, #12, #1
-; CHECK-NEXT: ubfiz x17, x24, #23, #1
-; CHECK-NEXT: umov w1, v0.b[15]
-; CHECK-NEXT: mov z2.b, z0.b[17]
-; CHECK-NEXT: mov z4.b, z0.b[29]
-; CHECK-NEXT: fmov w28, s19
-; CHECK-NEXT: orr x11, x11, x14
-; CHECK-NEXT: orr x13, x13, x15
-; CHECK-NEXT: ubfiz x14, x18, #13, #1
+; CHECK-NEXT: ubfiz x17, x25, #23, #1
+; CHECK-NEXT: mov z22.b, z0.b[29]
+; CHECK-NEXT: fmov w27, s19
+; CHECK-NEXT: orr x11, x11, x15
+; CHECK-NEXT: orr x14, x14, x3
+; CHECK-NEXT: ubfiz x15, x18, #13, #1
+; CHECK-NEXT: bfi x22, x9, #5, #1
+; CHECK-NEXT: fmov w7, s5
; CHECK-NEXT: mov z5.b, z0.b[30]
-; CHECK-NEXT: fmov w29, s20
+; CHECK-NEXT: fmov w28, s20
; CHECK-NEXT: orr x10, x11, x10
-; CHECK-NEXT: bfi x25, x9, #5, #1
-; CHECK-NEXT: orr x9, x13, x17
+; CHECK-NEXT: orr x9, x14, x17
; CHECK-NEXT: ubfiz x11, x16, #14, #1
-; CHECK-NEXT: ubfiz x13, x26, #24, #1
-; CHECK-NEXT: fmov w6, s1
-; CHECK-NEXT: fmov w12, s21
-; CHECK-NEXT: orr x10, x10, x14
-; CHECK-NEXT: ubfiz x15, x27, #25, #1
-; CHECK-NEXT: umov w2, v0.b[6]
-; CHECK-NEXT: fmov w7, s2
-; CHECK-NEXT: fmov w30, s4
+; CHECK-NEXT: ubfiz x14, x26, #24, #1
+; CHECK-NEXT: fmov w6, s3
+; CHECK-NEXT: fmov w29, s21
+; CHECK-NEXT: orr x10, x10, x15
+; CHECK-NEXT: bfi x22, x8, #6, #1
+; CHECK-NEXT: ubfiz x8, x1, #15, #1
+; CHECK-NEXT: ubfiz x12, x12, #25, #1
+; CHECK-NEXT: fmov w30, s22
; CHECK-NEXT: orr x10, x10, x11
-; CHECK-NEXT: orr x9, x9, x13
-; CHECK-NEXT: ubfiz x11, x28, #26, #1
-; CHECK-NEXT: fmov w8, s5
-; CHECK-NEXT: ubfiz x14, x1, #15, #1
-; CHECK-NEXT: orr x9, x9, x15
-; CHECK-NEXT: ubfiz x13, x29, #27, #1
+; CHECK-NEXT: orr x9, x9, x14
+; CHECK-NEXT: ubfiz x11, x27, #26, #1
+; CHECK-NEXT: fmov w13, s5
+; CHECK-NEXT: orr x8, x10, x8
+; CHECK-NEXT: orr x9, x9, x12
+; CHECK-NEXT: ubfiz x10, x28, #27, #1
; CHECK-NEXT: mov z3.b, z0.b[31]
; CHECK-NEXT: orr x9, x9, x11
; CHECK-NEXT: ubfiz x11, x6, #16, #1
-; CHECK-NEXT: ubfiz x12, x12, #28, #1
-; CHECK-NEXT: orr x10, x10, x14
-; CHECK-NEXT: orr x9, x9, x13
-; CHECK-NEXT: ubfiz x13, x7, #17, #1
+; CHECK-NEXT: ubfiz x12, x29, #28, #1
+; CHECK-NEXT: orr x9, x9, x10
+; CHECK-NEXT: ubfiz x10, x7, #17, #1
; CHECK-NEXT: ubfiz x14, x30, #29, #1
; CHECK-NEXT: mov z2.b, z0.b[32]
-; CHECK-NEXT: bfi x25, x2, #6, #1
-; CHECK-NEXT: orr x10, x10, x11
+; CHECK-NEXT: orr x8, x8, x11
; CHECK-NEXT: orr x9, x9, x12
-; CHECK-NEXT: ubfiz x8, x8, #30, #1
-; CHECK-NEXT: fmov w11, s3
-; CHECK-NEXT: orr x10, x10, x13
+; CHECK-NEXT: ubfiz x11, x13, #30, #1
+; CHECK-NEXT: fmov w12, s3
+; CHECK-NEXT: orr x8, x8, x10
; CHECK-NEXT: orr x9, x9, x14
; CHECK-NEXT: mov z1.b, z0.b[33]
-; CHECK-NEXT: orr x10, x25, x10
-; CHECK-NEXT: orr x8, x9, x8
-; CHECK-NEXT: orr x8, x10, x8
-; CHECK-NEXT: fmov w10, s2
-; CHECK-NEXT: lsl w9, w11, #31
-; CHECK-NEXT: mov z2.b, z0.b[34]
+; CHECK-NEXT: orr x8, x22, x8
+; CHECK-NEXT: orr x9, x9, x11
; CHECK-NEXT: orr x8, x8, x9
-; CHECK-NEXT: and w9, w10, #0x1
+; CHECK-NEXT: fmov w9, s2
+; CHECK-NEXT: lsl w10, w12, #31
+; CHECK-NEXT: mov z2.b, z0.b[34]
+; CHECK-NEXT: orr x8, x8, x10
+; CHECK-NEXT: and w9, w9, #0x1
; CHECK-NEXT: orr x8, x8, x9, lsl #32
; CHECK-NEXT: fmov w9, s1
; CHECK-NEXT: mov z1.b, z0.b[35]
@@ -24598,12 +24573,11 @@ define void @masked_load_zext_v64i16i32(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .LBB46_67: // %else250
; CHECK-NEXT: uunpklo z0.s, z0.h
; CHECK-NEXT: ptrue p0.s, vl64
-; CHECK-NEXT: ldr x8, [sp] // 8-byte Reload
; CHECK-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; CHECK-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; CHECK-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
; CHECK-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
-; CHECK-NEXT: st1w { z0.s }, p0, [x8]
+; CHECK-NEXT: st1w { z0.s }, p0, [x2]
; CHECK-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
; CHECK-NEXT: add sp, sp, #112
@@ -25141,19 +25115,18 @@ define void @masked_load_zext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .cfi_offset w30, -88
; CHECK-NEXT: .cfi_offset w29, -96
; CHECK-NEXT: ptrue p1.h, vl32
-; CHECK-NEXT: str x2, [sp] // 8-byte Spill
; CHECK-NEXT: ld1h { z0.h }, p1/z, [x1]
; CHECK-NEXT: cmpeq p0.h, p1/z, z0.h, #0
; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: uzp1 z0.b, z0.b, z0.b
-; CHECK-NEXT: umov w12, v0.b[1]
+; CHECK-NEXT: umov w13, v0.b[1]
; CHECK-NEXT: fmov w6, s0
; CHECK-NEXT: umov w3, v0.b[7]
; CHECK-NEXT: umov w5, v0.b[8]
; CHECK-NEXT: mov z5.b, z0.b[18]
; CHECK-NEXT: mov z6.b, z0.b[19]
-; CHECK-NEXT: umov w13, v0.b[2]
+; CHECK-NEXT: umov w12, v0.b[2]
; CHECK-NEXT: umov w4, v0.b[9]
; CHECK-NEXT: mov z7.b, z0.b[20]
; CHECK-NEXT: umov w1, v0.b[10]
@@ -25161,32 +25134,32 @@ define void @masked_load_zext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: mov z16.b, z0.b[21]
; CHECK-NEXT: fmov w20, s5
; CHECK-NEXT: fmov w21, s6
-; CHECK-NEXT: bfi w6, w12, #1, #1
+; CHECK-NEXT: bfi w6, w13, #1, #1
; CHECK-NEXT: umov w11, v0.b[3]
; CHECK-NEXT: umov w16, v0.b[11]
; CHECK-NEXT: mov z17.b, z0.b[22]
; CHECK-NEXT: fmov w22, s7
-; CHECK-NEXT: ubfiz w12, w3, #7, #1
-; CHECK-NEXT: ubfiz w3, w5, #8, #1
+; CHECK-NEXT: ubfiz w3, w3, #7, #1
+; CHECK-NEXT: ubfiz w5, w5, #8, #1
; CHECK-NEXT: umov w17, v0.b[12]
; CHECK-NEXT: mov z18.b, z0.b[23]
-; CHECK-NEXT: bfi w6, w13, #2, #1
-; CHECK-NEXT: ubfiz w13, w4, #9, #1
+; CHECK-NEXT: bfi w6, w12, #2, #1
+; CHECK-NEXT: ubfiz w12, w4, #9, #1
; CHECK-NEXT: umov w18, v0.b[13]
; CHECK-NEXT: mov z19.b, z0.b[24]
; CHECK-NEXT: fmov w23, s16
-; CHECK-NEXT: ubfiz w5, w20, #18, #1
-; CHECK-NEXT: ubfiz w20, w21, #19, #1
-; CHECK-NEXT: orr w12, w12, w3
+; CHECK-NEXT: ubfiz w20, w20, #18, #1
+; CHECK-NEXT: ubfiz w21, w21, #19, #1
+; CHECK-NEXT: orr w3, w3, w5
; CHECK-NEXT: ubfiz w1, w1, #10, #1
; CHECK-NEXT: umov w10, v0.b[4]
; CHECK-NEXT: mov z20.b, z0.b[25]
; CHECK-NEXT: fmov w24, s17
; CHECK-NEXT: ubfiz w4, w22, #20, #1
-; CHECK-NEXT: orr w12, w12, w13
+; CHECK-NEXT: orr w12, w3, w12
; CHECK-NEXT: mov z21.b, z0.b[26]
; CHECK-NEXT: fmov w25, s18
-; CHECK-NEXT: orr w3, w5, w20
+; CHECK-NEXT: orr w5, w20, w21
; CHECK-NEXT: bfi w6, w11, #3, #1
; CHECK-NEXT: orr w11, w12, w1
; CHECK-NEXT: ubfiz w12, w16, #11, #1
@@ -25194,61 +25167,61 @@ define void @masked_load_zext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: umov w14, v0.b[14]
; CHECK-NEXT: mov z22.b, z0.b[27]
; CHECK-NEXT: fmov w26, s19
-; CHECK-NEXT: orr w13, w3, w4
-; CHECK-NEXT: ubfiz w3, w23, #21, #1
-; CHECK-NEXT: ubfiz w16, w17, #12, #1
+; CHECK-NEXT: orr w3, w5, w4
+; CHECK-NEXT: ubfiz w4, w23, #21, #1
+; CHECK-NEXT: ubfiz w17, w17, #12, #1
+; CHECK-NEXT: umov w15, v0.b[15]
; CHECK-NEXT: fmov w27, s20
-; CHECK-NEXT: ubfiz w17, w24, #22, #1
+; CHECK-NEXT: ubfiz w1, w24, #22, #1
; CHECK-NEXT: orr w11, w11, w12
; CHECK-NEXT: ubfiz w12, w18, #13, #1
+; CHECK-NEXT: umov w8, v0.b[6]
+; CHECK-NEXT: mov z24.b, z0.b[29]
; CHECK-NEXT: fmov w28, s21
-; CHECK-NEXT: orr w13, w13, w3
+; CHECK-NEXT: orr w16, w3, w4
; CHECK-NEXT: ubfiz w18, w25, #23, #1
; CHECK-NEXT: bfi w6, w10, #4, #1
-; CHECK-NEXT: orr w10, w11, w16
-; CHECK-NEXT: umov w15, v0.b[15]
+; CHECK-NEXT: orr w10, w11, w17
; CHECK-NEXT: mov z3.b, z0.b[16]
; CHECK-NEXT: mov z23.b, z0.b[28]
; CHECK-NEXT: fmov w29, s22
-; CHECK-NEXT: orr w11, w13, w17
+; CHECK-NEXT: orr w11, w16, w1
; CHECK-NEXT: orr w10, w10, w12
; CHECK-NEXT: ubfiz w12, w26, #24, #1
; CHECK-NEXT: mov z4.b, z0.b[17]
-; CHECK-NEXT: mov z24.b, z0.b[29]
; CHECK-NEXT: orr w11, w11, w18
; CHECK-NEXT: bfi w6, w9, #5, #1
; CHECK-NEXT: ubfiz w9, w14, #14, #1
-; CHECK-NEXT: ubfiz w13, w27, #25, #1
+; CHECK-NEXT: ubfiz w14, w27, #25, #1
; CHECK-NEXT: mov z2.b, z0.b[30]
+; CHECK-NEXT: fmov w13, s24
; CHECK-NEXT: orr w11, w11, w12
-; CHECK-NEXT: ubfiz w14, w28, #26, #1
+; CHECK-NEXT: ubfiz w12, w15, #15, #1
+; CHECK-NEXT: ubfiz w15, w28, #26, #1
; CHECK-NEXT: fmov w7, s3
; CHECK-NEXT: fmov w30, s23
-; CHECK-NEXT: orr w9, w10, w9
-; CHECK-NEXT: orr w10, w11, w13
-; CHECK-NEXT: ubfiz w11, w29, #27, #1
-; CHECK-NEXT: umov w2, v0.b[6]
+; CHECK-NEXT: bfi w6, w8, #6, #1
+; CHECK-NEXT: orr w8, w10, w9
+; CHECK-NEXT: orr w9, w11, w14
+; CHECK-NEXT: ubfiz w10, w29, #27, #1
; CHECK-NEXT: fmov w19, s4
-; CHECK-NEXT: fmov w8, s24
-; CHECK-NEXT: ubfiz w12, w15, #15, #1
-; CHECK-NEXT: orr w10, w10, w14
+; CHECK-NEXT: orr w9, w9, w15
+; CHECK-NEXT: orr w8, w8, w12
+; CHECK-NEXT: orr w9, w9, w10
+; CHECK-NEXT: ubfiz w10, w13, #29, #1
+; CHECK-NEXT: fmov w13, s2
+; CHECK-NEXT: ubfiz w11, w7, #16, #1
; CHECK-NEXT: ubfiz w14, w30, #28, #1
; CHECK-NEXT: mov z1.b, z0.b[31]
-; CHECK-NEXT: orr w10, w10, w11
-; CHECK-NEXT: fmov w11, s2
-; CHECK-NEXT: orr w9, w9, w12
-; CHECK-NEXT: ubfiz w12, w7, #16, #1
-; CHECK-NEXT: ubfiz w13, w19, #17, #1
-; CHECK-NEXT: ubfiz w8, w8, #29, #1
-; CHECK-NEXT: bfi w6, w2, #6, #1
-; CHECK-NEXT: orr w10, w10, w14
-; CHECK-NEXT: orr w9, w9, w12
-; CHECK-NEXT: ubfiz w11, w11, #30, #1
-; CHECK-NEXT: orr w8, w10, w8
-; CHECK-NEXT: orr w9, w9, w13
-; CHECK-NEXT: orr w9, w6, w9
+; CHECK-NEXT: ubfiz w12, w19, #17, #1
; CHECK-NEXT: orr w8, w8, w11
-; CHECK-NEXT: orr w8, w9, w8
+; CHECK-NEXT: orr w9, w9, w14
+; CHECK-NEXT: ubfiz w11, w13, #30, #1
+; CHECK-NEXT: orr w8, w8, w12
+; CHECK-NEXT: orr w9, w9, w10
+; CHECK-NEXT: orr w8, w6, w8
+; CHECK-NEXT: orr w9, w9, w11
+; CHECK-NEXT: orr w8, w8, w9
; CHECK-NEXT: fmov w9, s1
; CHECK-NEXT: orr w8, w8, w9, lsl #31
; CHECK-NEXT: tbz w8, #0, .LBB47_2
@@ -25339,7 +25312,6 @@ define void @masked_load_zext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: .LBB47_35: // %else122
; CHECK-NEXT: uunpklo z0.s, z0.h
; CHECK-NEXT: ptrue p0.d, vl32
-; CHECK-NEXT: ldr x8, [sp] // 8-byte Reload
; CHECK-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload
; CHECK-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload
; CHECK-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload
@@ -25347,7 +25319,7 @@ define void @masked_load_zext_v32i16i64(ptr %ap, ptr %bp, ptr %c) vscale_range(1
; CHECK-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload
; CHECK-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload
; CHECK-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload
-; CHECK-NEXT: st1d { z0.d }, p0, [x8]
+; CHECK-NEXT: st1d { z0.d }, p0, [x2]
; CHECK-NEXT: add sp, sp, #112
; CHECK-NEXT: ret
; CHECK-NEXT: .LBB47_36: // %cond.load5
diff --git a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll
index 9789d7f564a27..8a14f65b3d1f7 100644
--- a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll
+++ b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll
@@ -214,145 +214,145 @@ define void @sext_v32i8_v32i16(ptr %in, ptr %out) {
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #20]
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #19]
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #16]
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #16]
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #29]
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #31]
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #26]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: add w17, w17, w17
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]
-; NONEON-NOSVE-NEXT: add w5, w14, w14
-; NONEON-NOSVE-NEXT: sxtb w6, w17
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #17]
-; NONEON-NOSVE-NEXT: sxtb w5, w5
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #18]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #28]
+; NONEON-NOSVE-NEXT: ldrb w5, [sp, #39]
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #25]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #30]
-; NONEON-NOSVE-NEXT: strh w6, [sp, #78]
-; NONEON-NOSVE-NEXT: add w6, w30, w30
-; NONEON-NOSVE-NEXT: sxtb w8, w8
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #31]
-; NONEON-NOSVE-NEXT: sxtb w6, w6
; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: strh w5, [sp, #72]
-; NONEON-NOSVE-NEXT: add w5, w29, w29
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #28]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #29]
-; NONEON-NOSVE-NEXT: sxtb w9, w9
-; NONEON-NOSVE-NEXT: sxtb w5, w5
-; NONEON-NOSVE-NEXT: strh w8, [sp, #68]
-; NONEON-NOSVE-NEXT: add w8, w27, w27
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #26]
-; NONEON-NOSVE-NEXT: strh w6, [sp, #70]
-; NONEON-NOSVE-NEXT: add w6, w28, w28
+; NONEON-NOSVE-NEXT: ldrb w15, [sp, #23]
; NONEON-NOSVE-NEXT: sxtb w8, w8
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #27]
-; NONEON-NOSVE-NEXT: sxtb w6, w6
-; NONEON-NOSVE-NEXT: strh w9, [sp, #66]
-; NONEON-NOSVE-NEXT: add w9, w26, w26
-; NONEON-NOSVE-NEXT: strh w5, [sp, #64]
-; NONEON-NOSVE-NEXT: add w5, w25, w25
; NONEON-NOSVE-NEXT: sxtb w9, w9
-; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
-; NONEON-NOSVE-NEXT: sxtb w8, w5
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #24]
-; NONEON-NOSVE-NEXT: ldrb w22, [sp, #25]
-; NONEON-NOSVE-NEXT: strh w6, [sp, #62]
-; NONEON-NOSVE-NEXT: add w6, w24, w24
-; NONEON-NOSVE-NEXT: add w5, w23, w23
-; NONEON-NOSVE-NEXT: strh w9, [sp, #58]
-; NONEON-NOSVE-NEXT: sxtb w9, w6
-; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
-; NONEON-NOSVE-NEXT: sxtb w8, w5
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #21]
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #22]
+; NONEON-NOSVE-NEXT: ldrb w2, [sp, #36]
; NONEON-NOSVE-NEXT: ldrb w4, [sp, #38]
-; NONEON-NOSVE-NEXT: ldrb w20, [sp, #39]
-; NONEON-NOSVE-NEXT: add w6, w22, w22
-; NONEON-NOSVE-NEXT: add w5, w21, w21
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #21]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #54]
-; NONEON-NOSVE-NEXT: sxtb w9, w6
+; NONEON-NOSVE-NEXT: strh w8, [sp, #70]
+; NONEON-NOSVE-NEXT: add w8, w28, w28
+; NONEON-NOSVE-NEXT: add w0, w15, w15
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: strh w9, [sp, #68]
+; NONEON-NOSVE-NEXT: add w9, w27, w27
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: add w6, w17, w17
+; NONEON-NOSVE-NEXT: add w17, w18, w18
+; NONEON-NOSVE-NEXT: strh w8, [sp, #64]
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: sxtb w7, w0
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: strh w9, [sp, #62]
+; NONEON-NOSVE-NEXT: add w9, w24, w24
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: sxtb w19, w17
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #33]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
+; NONEON-NOSVE-NEXT: add w8, w22, w22
+; NONEON-NOSVE-NEXT: ldrb w0, [sp, #35]
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: strh w9, [sp, #56]
+; NONEON-NOSVE-NEXT: add w9, w21, w21
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #17]
+; NONEON-NOSVE-NEXT: sxtb w6, w6
; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
-; NONEON-NOSVE-NEXT: sxtb w8, w5
-; NONEON-NOSVE-NEXT: ldrb w2, [sp, #36]
-; NONEON-NOSVE-NEXT: ldrb w3, [sp, #37]
-; NONEON-NOSVE-NEXT: add w6, w20, w20
-; NONEON-NOSVE-NEXT: add w4, w4, w4
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
-; NONEON-NOSVE-NEXT: add w18, w15, w15
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
+; NONEON-NOSVE-NEXT: sxtb w8, w8
; NONEON-NOSVE-NEXT: strh w9, [sp, #50]
-; NONEON-NOSVE-NEXT: sxtb w9, w6
-; NONEON-NOSVE-NEXT: sxtb w19, w18
-; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
-; NONEON-NOSVE-NEXT: sxtb w8, w4
-; NONEON-NOSVE-NEXT: ldrb w18, [sp, #34]
-; NONEON-NOSVE-NEXT: ldrb w0, [sp, #35]
-; NONEON-NOSVE-NEXT: add w3, w3, w3
-; NONEON-NOSVE-NEXT: add w2, w2, w2
-; NONEON-NOSVE-NEXT: add w16, w16, w16
-; NONEON-NOSVE-NEXT: strh w9, [sp, #110]
-; NONEON-NOSVE-NEXT: sxtb w9, w3
-; NONEON-NOSVE-NEXT: strh w8, [sp, #108]
-; NONEON-NOSVE-NEXT: sxtb w8, w2
-; NONEON-NOSVE-NEXT: sxtb w7, w16
+; NONEON-NOSVE-NEXT: add w9, w4, w4
+; NONEON-NOSVE-NEXT: sxtb w9, w9
; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #33]
-; NONEON-NOSVE-NEXT: add w0, w0, w0
-; NONEON-NOSVE-NEXT: add w18, w18, w18
-; NONEON-NOSVE-NEXT: strh w9, [sp, #106]
-; NONEON-NOSVE-NEXT: sxtb w9, w0
+; NONEON-NOSVE-NEXT: strh w6, [sp, #74]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #110]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: add w6, w30, w30
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: strh w9, [sp, #108]
+; NONEON-NOSVE-NEXT: add w9, w0, w0
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #30]
+; NONEON-NOSVE-NEXT: sxtb w6, w6
; NONEON-NOSVE-NEXT: strh w8, [sp, #104]
-; NONEON-NOSVE-NEXT: sxtb w8, w18
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
-; NONEON-NOSVE-NEXT: add w17, w17, w17
-; NONEON-NOSVE-NEXT: add w16, w16, w16
+; NONEON-NOSVE-NEXT: add w8, w17, w17
+; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
+; NONEON-NOSVE-NEXT: sxtb w8, w8
; NONEON-NOSVE-NEXT: strh w9, [sp, #102]
-; NONEON-NOSVE-NEXT: sxtb w9, w17
-; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
-; NONEON-NOSVE-NEXT: strh w8, [sp, #100]
-; NONEON-NOSVE-NEXT: sxtb w8, w16
+; NONEON-NOSVE-NEXT: add w9, w16, w16
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
-; NONEON-NOSVE-NEXT: add w15, w15, w15
-; NONEON-NOSVE-NEXT: add w14, w14, w14
-; NONEON-NOSVE-NEXT: strh w9, [sp, #98]
-; NONEON-NOSVE-NEXT: sxtb w9, w15
-; NONEON-NOSVE-NEXT: strh w8, [sp, #96]
-; NONEON-NOSVE-NEXT: sxtb w8, w14
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: strh w6, [sp, #66]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #98]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: add w6, w26, w26
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #27]
+; NONEON-NOSVE-NEXT: sxtb w6, w6
+; NONEON-NOSVE-NEXT: strh w9, [sp, #96]
+; NONEON-NOSVE-NEXT: add w9, w13, w13
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
-; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
-; NONEON-NOSVE-NEXT: add w13, w13, w13
-; NONEON-NOSVE-NEXT: add w12, w12, w12
-; NONEON-NOSVE-NEXT: strh w9, [sp, #94]
-; NONEON-NOSVE-NEXT: sxtb w9, w13
; NONEON-NOSVE-NEXT: strh w8, [sp, #92]
-; NONEON-NOSVE-NEXT: sxtb w8, w12
-; NONEON-NOSVE-NEXT: add w11, w11, w11
-; NONEON-NOSVE-NEXT: add w10, w10, w10
+; NONEON-NOSVE-NEXT: add w8, w11, w11
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: strh w6, [sp, #60]
+; NONEON-NOSVE-NEXT: add w6, w23, w23
+; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
+; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #34]
+; NONEON-NOSVE-NEXT: ldrb w3, [sp, #37]
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #24]
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #20]
+; NONEON-NOSVE-NEXT: sxtb w6, w6
; NONEON-NOSVE-NEXT: strh w9, [sp, #90]
-; NONEON-NOSVE-NEXT: sxtb w9, w11
-; NONEON-NOSVE-NEXT: ldr w11, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strh w8, [sp, #88]
-; NONEON-NOSVE-NEXT: sxtb w8, w10
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strh w9, [sp, #86]
-; NONEON-NOSVE-NEXT: add w11, w11, w11
-; NONEON-NOSVE-NEXT: strh w8, [sp, #84]
+; NONEON-NOSVE-NEXT: add w9, w10, w10
+; NONEON-NOSVE-NEXT: ldr w10, [sp, #8] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strh w8, [sp, #86]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strh w7, [sp, #78]
+; NONEON-NOSVE-NEXT: add w7, w29, w29
+; NONEON-NOSVE-NEXT: add w3, w3, w3
+; NONEON-NOSVE-NEXT: strh w6, [sp, #54]
+; NONEON-NOSVE-NEXT: add w6, w20, w20
+; NONEON-NOSVE-NEXT: add w18, w18, w18
+; NONEON-NOSVE-NEXT: add w15, w15, w15
+; NONEON-NOSVE-NEXT: add w12, w12, w12
; NONEON-NOSVE-NEXT: add w10, w10, w10
-; NONEON-NOSVE-NEXT: sxtb w9, w11
-; NONEON-NOSVE-NEXT: strh w7, [sp, #76]
-; NONEON-NOSVE-NEXT: sxtb w8, w10
-; NONEON-NOSVE-NEXT: strh w19, [sp, #74]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #82]
-; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #48]
-; NONEON-NOSVE-NEXT: strh w8, [sp, #80]
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: sxtb w7, w7
+; NONEON-NOSVE-NEXT: sxtb w5, w6
+; NONEON-NOSVE-NEXT: sxtb w2, w3
+; NONEON-NOSVE-NEXT: sxtb w17, w18
+; NONEON-NOSVE-NEXT: sxtb w14, w15
+; NONEON-NOSVE-NEXT: sxtb w11, w12
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: sxtb w10, w10
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: strh w19, [sp, #76]
+; NONEON-NOSVE-NEXT: strh w7, [sp, #72]
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #192] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #80]
+; NONEON-NOSVE-NEXT: strh w5, [sp, #48]
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #176] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
+; NONEON-NOSVE-NEXT: strh w2, [sp, #106]
+; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #48]
+; NONEON-NOSVE-NEXT: strh w17, [sp, #100]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #160] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strh w14, [sp, #94]
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #144] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
+; NONEON-NOSVE-NEXT: strh w11, [sp, #88]
; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #128] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strh w9, [sp, #84]
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #112] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strh w10, [sp, #82]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #80]
+; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #80]
+; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
+; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
; NONEON-NOSVE-NEXT: add sp, sp, #208
; NONEON-NOSVE-NEXT: ret
%a = load <32 x i8>, ptr %in
@@ -522,135 +522,135 @@ define void @sext_v32i8_v32i32(ptr %in, ptr %out) {
; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #18]
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #19]
+; NONEON-NOSVE-NEXT: ldrb w15, [sp, #19]
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #17]
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #18]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #45]
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #17]
-; NONEON-NOSVE-NEXT: add w16, w16, w16
-; NONEON-NOSVE-NEXT: add w17, w17, w17
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #23]
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #16]
+; NONEON-NOSVE-NEXT: add w0, w15, w15
+; NONEON-NOSVE-NEXT: add w6, w17, w17
+; NONEON-NOSVE-NEXT: add w17, w18, w18
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: sxtb w6, w17
-; NONEON-NOSVE-NEXT: sxtb w7, w16
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]
-; NONEON-NOSVE-NEXT: add w5, w14, w14
-; NONEON-NOSVE-NEXT: add w18, w15, w15
-; NONEON-NOSVE-NEXT: sxtb w19, w18
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #20]
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #21]
-; NONEON-NOSVE-NEXT: stp w7, w6, [sp, #104]
-; NONEON-NOSVE-NEXT: add w6, w30, w30
-; NONEON-NOSVE-NEXT: sxtb w5, w5
+; NONEON-NOSVE-NEXT: sxtb w7, w0
+; NONEON-NOSVE-NEXT: sxtb w19, w17
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #22]
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #20]
+; NONEON-NOSVE-NEXT: stp w19, w7, [sp, #104]
+; NONEON-NOSVE-NEXT: add w7, w29, w29
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #26]
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #27]
+; NONEON-NOSVE-NEXT: add w9, w9, w9
; NONEON-NOSVE-NEXT: sxtb w6, w6
+; NONEON-NOSVE-NEXT: sxtb w7, w7
; NONEON-NOSVE-NEXT: sxtb w8, w8
-; NONEON-NOSVE-NEXT: stp w5, w19, [sp, #96]
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: add w5, w29, w29
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #24]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #25]
; NONEON-NOSVE-NEXT: sxtb w9, w9
-; NONEON-NOSVE-NEXT: stp w8, w6, [sp, #88]
-; NONEON-NOSVE-NEXT: add w6, w28, w28
-; NONEON-NOSVE-NEXT: sxtb w5, w5
-; NONEON-NOSVE-NEXT: add w8, w27, w27
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #26]
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #27]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #24]
+; NONEON-NOSVE-NEXT: stp w7, w6, [sp, #96]
+; NONEON-NOSVE-NEXT: add w6, w30, w30
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #25]
+; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #88]
+; NONEON-NOSVE-NEXT: add w8, w28, w28
; NONEON-NOSVE-NEXT: sxtb w6, w6
; NONEON-NOSVE-NEXT: sxtb w8, w8
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #30]
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #31]
-; NONEON-NOSVE-NEXT: stp w5, w9, [sp, #80]
-; NONEON-NOSVE-NEXT: add w9, w26, w26
-; NONEON-NOSVE-NEXT: add w5, w25, w25
-; NONEON-NOSVE-NEXT: stp w8, w6, [sp, #72]
+; NONEON-NOSVE-NEXT: add w9, w27, w27
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #30]
; NONEON-NOSVE-NEXT: sxtb w9, w9
-; NONEON-NOSVE-NEXT: sxtb w8, w5
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #28]
-; NONEON-NOSVE-NEXT: ldrb w22, [sp, #29]
-; NONEON-NOSVE-NEXT: add w6, w24, w24
-; NONEON-NOSVE-NEXT: add w5, w23, w23
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #31]
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #28]
+; NONEON-NOSVE-NEXT: stp w8, w6, [sp, #80]
+; NONEON-NOSVE-NEXT: add w6, w26, w26
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: sxtb w6, w6
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #29]
+; NONEON-NOSVE-NEXT: ldrb w5, [sp, #35]
; NONEON-NOSVE-NEXT: ldrb w4, [sp, #34]
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #64]
-; NONEON-NOSVE-NEXT: sxtb w9, w6
-; NONEON-NOSVE-NEXT: sxtb w8, w5
-; NONEON-NOSVE-NEXT: ldrb w20, [sp, #35]
-; NONEON-NOSVE-NEXT: add w6, w22, w22
-; NONEON-NOSVE-NEXT: add w5, w21, w21
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
-; NONEON-NOSVE-NEXT: sxtb w9, w6
-; NONEON-NOSVE-NEXT: sxtb w8, w5
; NONEON-NOSVE-NEXT: ldrb w2, [sp, #32]
+; NONEON-NOSVE-NEXT: stp w6, w9, [sp, #72]
+; NONEON-NOSVE-NEXT: add w9, w24, w24
+; NONEON-NOSVE-NEXT: add w6, w23, w23
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: sxtb w6, w6
; NONEON-NOSVE-NEXT: ldrb w3, [sp, #33]
-; NONEON-NOSVE-NEXT: add w6, w20, w20
-; NONEON-NOSVE-NEXT: add w4, w4, w4
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
-; NONEON-NOSVE-NEXT: sxtb w9, w6
-; NONEON-NOSVE-NEXT: sxtb w8, w4
; NONEON-NOSVE-NEXT: ldrb w18, [sp, #38]
; NONEON-NOSVE-NEXT: ldrb w0, [sp, #39]
-; NONEON-NOSVE-NEXT: add w3, w3, w3
-; NONEON-NOSVE-NEXT: add w2, w2, w2
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #36]
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #168]
-; NONEON-NOSVE-NEXT: sxtb w9, w3
-; NONEON-NOSVE-NEXT: sxtb w8, w2
; NONEON-NOSVE-NEXT: ldrb w17, [sp, #37]
-; NONEON-NOSVE-NEXT: add w0, w0, w0
+; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #64]
+; NONEON-NOSVE-NEXT: add w8, w22, w22
+; NONEON-NOSVE-NEXT: add w9, w21, w21
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: add w3, w3, w3
; NONEON-NOSVE-NEXT: add w18, w18, w18
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #160]
-; NONEON-NOSVE-NEXT: sxtb w9, w0
-; NONEON-NOSVE-NEXT: sxtb w8, w18
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #36]
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #42]
+; NONEON-NOSVE-NEXT: stp w8, w6, [sp, #56]
+; NONEON-NOSVE-NEXT: add w6, w20, w20
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: sxtb w5, w6
+; NONEON-NOSVE-NEXT: sxtb w8, w8
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #43]
-; NONEON-NOSVE-NEXT: add w17, w17, w17
-; NONEON-NOSVE-NEXT: add w16, w16, w16
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
-; NONEON-NOSVE-NEXT: sxtb w9, w17
-; NONEON-NOSVE-NEXT: sxtb w8, w16
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #40]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #41]
-; NONEON-NOSVE-NEXT: add w15, w15, w15
-; NONEON-NOSVE-NEXT: add w14, w14, w14
-; NONEON-NOSVE-NEXT: ldrb w10, [sp, #46]
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
-; NONEON-NOSVE-NEXT: sxtb w9, w15
-; NONEON-NOSVE-NEXT: sxtb w8, w14
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #47]
-; NONEON-NOSVE-NEXT: add w13, w13, w13
+; NONEON-NOSVE-NEXT: stp w5, w9, [sp, #48]
+; NONEON-NOSVE-NEXT: add w9, w4, w4
+; NONEON-NOSVE-NEXT: add w15, w15, w15
+; NONEON-NOSVE-NEXT: sxtb w9, w9
; NONEON-NOSVE-NEXT: add w12, w12, w12
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
-; NONEON-NOSVE-NEXT: sxtb w9, w13
-; NONEON-NOSVE-NEXT: sxtb w8, w12
-; NONEON-NOSVE-NEXT: add w11, w11, w11
-; NONEON-NOSVE-NEXT: add w10, w10, w10
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
-; NONEON-NOSVE-NEXT: sxtb w9, w11
-; NONEON-NOSVE-NEXT: ldr w11, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: sxtb w8, w10
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: add w11, w11, w11
+; NONEON-NOSVE-NEXT: ldrb w10, [sp, #46]
; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #80]
-; NONEON-NOSVE-NEXT: add w10, w10, w10
-; NONEON-NOSVE-NEXT: sxtb w11, w11
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
-; NONEON-NOSVE-NEXT: sxtb w8, w10
+; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #168]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: sxtb w2, w3
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: add w9, w0, w0
+; NONEON-NOSVE-NEXT: sxtb w9, w9
; NONEON-NOSVE-NEXT: ldp q4, q3, [sp, #48]
-; NONEON-NOSVE-NEXT: ldp q7, q6, [sp, #144]
-; NONEON-NOSVE-NEXT: stp w8, w11, [sp, #112]
+; NONEON-NOSVE-NEXT: stp w8, w2, [sp, #160]
+; NONEON-NOSVE-NEXT: add w8, w17, w17
+; NONEON-NOSVE-NEXT: sxtb w17, w18
+; NONEON-NOSVE-NEXT: sxtb w8, w8
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #256] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp q2, q5, [sp, #112]
-; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
+; NONEON-NOSVE-NEXT: stp w17, w9, [sp, #152]
+; NONEON-NOSVE-NEXT: add w9, w16, w16
+; NONEON-NOSVE-NEXT: sxtb w9, w9
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #240] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #224] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
+; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #144]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: sxtb w14, w15
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: add w9, w13, w13
+; NONEON-NOSVE-NEXT: sxtb w9, w9
+; NONEON-NOSVE-NEXT: ldp q7, q6, [sp, #144]
+; NONEON-NOSVE-NEXT: stp w8, w14, [sp, #136]
+; NONEON-NOSVE-NEXT: add w8, w11, w11
+; NONEON-NOSVE-NEXT: sxtb w11, w12
+; NONEON-NOSVE-NEXT: sxtb w8, w8
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #208] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
+; NONEON-NOSVE-NEXT: stp w11, w9, [sp, #128]
+; NONEON-NOSVE-NEXT: add w9, w10, w10
+; NONEON-NOSVE-NEXT: ldr w10, [sp, #8] // 4-byte Reload
+; NONEON-NOSVE-NEXT: sxtb w9, w9
; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #192] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: add w10, w10, w10
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #176] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #120]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: sxtb w10, w10
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: sxtb w8, w8
+; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #112]
+; NONEON-NOSVE-NEXT: ldp q2, q5, [sp, #112]
+; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
+; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
+; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
+; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
; NONEON-NOSVE-NEXT: add sp, sp, #272
; NONEON-NOSVE-NEXT: ret
%a = load <32 x i8>, ptr %in
@@ -924,141 +924,141 @@ define void @sext_v32i8_v32i64(ptr %in, ptr %out) {
; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #17]
+; NONEON-NOSVE-NEXT: ldrb w15, [sp, #17]
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #19]
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #16]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #47]
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #18]
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #19]
-; NONEON-NOSVE-NEXT: add w16, w16, w16
-; NONEON-NOSVE-NEXT: add w17, w17, w17
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #18]
+; NONEON-NOSVE-NEXT: add w0, w15, w15
+; NONEON-NOSVE-NEXT: add w19, w17, w17
+; NONEON-NOSVE-NEXT: add w17, w18, w18
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: sxtb x19, w17
-; NONEON-NOSVE-NEXT: sxtb x20, w16
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
-; NONEON-NOSVE-NEXT: add w7, w14, w14
-; NONEON-NOSVE-NEXT: add w18, w15, w15
-; NONEON-NOSVE-NEXT: sxtb x21, w18
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #22]
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #23]
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #160]
-; NONEON-NOSVE-NEXT: add w19, w30, w30
-; NONEON-NOSVE-NEXT: sxtb x7, w7
+; NONEON-NOSVE-NEXT: sxtb x20, w0
+; NONEON-NOSVE-NEXT: sxtb x21, w17
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #20]
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #22]
+; NONEON-NOSVE-NEXT: stp x21, x20, [sp, #160]
+; NONEON-NOSVE-NEXT: add w20, w29, w29
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #23]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #24]
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #25]
+; NONEON-NOSVE-NEXT: add w9, w9, w9
; NONEON-NOSVE-NEXT: sxtb x19, w19
+; NONEON-NOSVE-NEXT: sxtb x20, w20
; NONEON-NOSVE-NEXT: sxtb x8, w8
-; NONEON-NOSVE-NEXT: stp x7, x21, [sp, #144]
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: add w7, w29, w29
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #26]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #27]
; NONEON-NOSVE-NEXT: sxtb x9, w9
-; NONEON-NOSVE-NEXT: stp x8, x19, [sp, #128]
-; NONEON-NOSVE-NEXT: add w19, w28, w28
-; NONEON-NOSVE-NEXT: sxtb x7, w7
-; NONEON-NOSVE-NEXT: add w8, w27, w27
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #24]
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #25]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #26]
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #144]
+; NONEON-NOSVE-NEXT: add w19, w30, w30
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #27]
+; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #128]
+; NONEON-NOSVE-NEXT: add w8, w28, w28
; NONEON-NOSVE-NEXT: sxtb x19, w19
; NONEON-NOSVE-NEXT: sxtb x8, w8
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
-; NONEON-NOSVE-NEXT: stp x7, x9, [sp, #112]
-; NONEON-NOSVE-NEXT: add w9, w26, w26
-; NONEON-NOSVE-NEXT: add w7, w25, w25
-; NONEON-NOSVE-NEXT: stp x8, x19, [sp, #96]
+; NONEON-NOSVE-NEXT: add w9, w27, w27
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #28]
; NONEON-NOSVE-NEXT: sxtb x9, w9
-; NONEON-NOSVE-NEXT: sxtb x8, w7
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #29]
; NONEON-NOSVE-NEXT: ldrb w6, [sp, #30]
-; NONEON-NOSVE-NEXT: ldrb w22, [sp, #31]
-; NONEON-NOSVE-NEXT: add w19, w24, w24
-; NONEON-NOSVE-NEXT: add w7, w23, w23
-; NONEON-NOSVE-NEXT: ldrb w4, [sp, #32]
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #80]
-; NONEON-NOSVE-NEXT: sxtb x9, w19
-; NONEON-NOSVE-NEXT: sxtb x8, w7
+; NONEON-NOSVE-NEXT: stp x8, x19, [sp, #112]
+; NONEON-NOSVE-NEXT: add w19, w26, w26
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: sxtb x19, w19
+; NONEON-NOSVE-NEXT: sxtb x8, w8
+; NONEON-NOSVE-NEXT: ldrb w7, [sp, #31]
; NONEON-NOSVE-NEXT: ldrb w5, [sp, #33]
-; NONEON-NOSVE-NEXT: add w19, w22, w22
; NONEON-NOSVE-NEXT: add w6, w6, w6
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #64]
-; NONEON-NOSVE-NEXT: sxtb x9, w19
-; NONEON-NOSVE-NEXT: sxtb x8, w6
+; NONEON-NOSVE-NEXT: ldrb w4, [sp, #32]
+; NONEON-NOSVE-NEXT: stp x19, x9, [sp, #96]
+; NONEON-NOSVE-NEXT: add w9, w24, w24
+; NONEON-NOSVE-NEXT: add w19, w23, w23
+; NONEON-NOSVE-NEXT: sxtb x9, w9
+; NONEON-NOSVE-NEXT: sxtb x19, w19
; NONEON-NOSVE-NEXT: ldrb w2, [sp, #34]
; NONEON-NOSVE-NEXT: ldrb w3, [sp, #35]
-; NONEON-NOSVE-NEXT: add w5, w5, w5
-; NONEON-NOSVE-NEXT: add w4, w4, w4
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]
-; NONEON-NOSVE-NEXT: sxtb x9, w5
-; NONEON-NOSVE-NEXT: sxtb x8, w4
; NONEON-NOSVE-NEXT: ldrb w18, [sp, #36]
; NONEON-NOSVE-NEXT: ldrb w0, [sp, #37]
+; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #80]
+; NONEON-NOSVE-NEXT: add w8, w22, w22
+; NONEON-NOSVE-NEXT: add w9, w7, w7
+; NONEON-NOSVE-NEXT: sxtb x8, w8
+; NONEON-NOSVE-NEXT: sxtb x9, w9
; NONEON-NOSVE-NEXT: add w3, w3, w3
-; NONEON-NOSVE-NEXT: add w2, w2, w2
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #38]
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #288]
-; NONEON-NOSVE-NEXT: sxtb x9, w3
-; NONEON-NOSVE-NEXT: sxtb x8, w2
; NONEON-NOSVE-NEXT: ldrb w17, [sp, #39]
-; NONEON-NOSVE-NEXT: add w0, w0, w0
; NONEON-NOSVE-NEXT: add w18, w18, w18
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #272]
-; NONEON-NOSVE-NEXT: sxtb x9, w0
-; NONEON-NOSVE-NEXT: sxtb x8, w18
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #38]
+; NONEON-NOSVE-NEXT: stp x8, x19, [sp, #64]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: sxtb x5, w6
+; NONEON-NOSVE-NEXT: sxtb x8, w8
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #40]
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #41]
-; NONEON-NOSVE-NEXT: add w17, w17, w17
-; NONEON-NOSVE-NEXT: add w16, w16, w16
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #256]
-; NONEON-NOSVE-NEXT: sxtb x9, w17
-; NONEON-NOSVE-NEXT: sxtb x8, w16
+; NONEON-NOSVE-NEXT: stp x5, x9, [sp, #48]
+; NONEON-NOSVE-NEXT: add w9, w4, w4
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #42]
+; NONEON-NOSVE-NEXT: sxtb x9, w9
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #43]
; NONEON-NOSVE-NEXT: add w15, w15, w15
-; NONEON-NOSVE-NEXT: add w14, w14, w14
-; NONEON-NOSVE-NEXT: ldrb w10, [sp, #44]
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #240]
-; NONEON-NOSVE-NEXT: sxtb x9, w15
-; NONEON-NOSVE-NEXT: sxtb x8, w14
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #45]
-; NONEON-NOSVE-NEXT: add w13, w13, w13
; NONEON-NOSVE-NEXT: add w12, w12, w12
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #224]
-; NONEON-NOSVE-NEXT: sxtb x9, w13
-; NONEON-NOSVE-NEXT: sxtb x8, w12
-; NONEON-NOSVE-NEXT: add w11, w11, w11
-; NONEON-NOSVE-NEXT: add w10, w10, w10
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #208]
-; NONEON-NOSVE-NEXT: sxtb x9, w11
-; NONEON-NOSVE-NEXT: ldr w11, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: sxtb x8, w10
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: add w11, w11, w11
+; NONEON-NOSVE-NEXT: ldrb w10, [sp, #44]
+; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #288]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: sxtb x2, w3
+; NONEON-NOSVE-NEXT: sxtb x8, w8
+; NONEON-NOSVE-NEXT: add w9, w0, w0
+; NONEON-NOSVE-NEXT: sxtb x9, w9
; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #144]
-; NONEON-NOSVE-NEXT: add w10, w10, w10
-; NONEON-NOSVE-NEXT: sxtb x11, w11
-; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #192]
-; NONEON-NOSVE-NEXT: sxtb x8, w10
+; NONEON-NOSVE-NEXT: stp x8, x2, [sp, #272]
+; NONEON-NOSVE-NEXT: add w8, w17, w17
+; NONEON-NOSVE-NEXT: sxtb x17, w18
+; NONEON-NOSVE-NEXT: sxtb x8, w8
; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #112]
+; NONEON-NOSVE-NEXT: stp x17, x9, [sp, #256]
+; NONEON-NOSVE-NEXT: add w9, w16, w16
+; NONEON-NOSVE-NEXT: sxtb x9, w9
; NONEON-NOSVE-NEXT: ldp q5, q4, [sp, #80]
-; NONEON-NOSVE-NEXT: stp x8, x11, [sp, #176]
; NONEON-NOSVE-NEXT: ldp q7, q6, [sp, #48]
+; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #240]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: sxtb x14, w15
+; NONEON-NOSVE-NEXT: sxtb x8, w8
+; NONEON-NOSVE-NEXT: add w9, w13, w13
+; NONEON-NOSVE-NEXT: sxtb x9, w9
; NONEON-NOSVE-NEXT: ldp q17, q16, [sp, #272]
-; NONEON-NOSVE-NEXT: ldp q18, q21, [sp, #176]
+; NONEON-NOSVE-NEXT: stp x8, x14, [sp, #224]
+; NONEON-NOSVE-NEXT: add w8, w11, w11
+; NONEON-NOSVE-NEXT: sxtb x11, w12
+; NONEON-NOSVE-NEXT: sxtb x8, w8
; NONEON-NOSVE-NEXT: ldp q20, q19, [sp, #240]
+; NONEON-NOSVE-NEXT: stp x11, x9, [sp, #208]
+; NONEON-NOSVE-NEXT: add w9, w10, w10
+; NONEON-NOSVE-NEXT: ldr w10, [sp, #8] // 4-byte Reload
+; NONEON-NOSVE-NEXT: sxtb x9, w9
; NONEON-NOSVE-NEXT: ldp q23, q22, [sp, #208]
-; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
+; NONEON-NOSVE-NEXT: add w10, w10, w10
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #384] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q2, q3, [x1, #32]
+; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #192]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: sxtb x10, w10
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #368] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q4, q5, [x1, #64]
+; NONEON-NOSVE-NEXT: add w8, w8, w8
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #352] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #96]
+; NONEON-NOSVE-NEXT: sxtb x8, w8
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #336] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q16, q17, [x1, #128]
; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #320] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q19, q20, [x1, #160]
+; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #176]
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #304] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp q18, q21, [sp, #176]
+; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
+; NONEON-NOSVE-NEXT: stp q2, q3, [x1, #32]
+; NONEON-NOSVE-NEXT: stp q4, q5, [x1, #64]
+; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #96]
+; NONEON-NOSVE-NEXT: stp q16, q17, [x1, #128]
+; NONEON-NOSVE-NEXT: stp q19, q20, [x1, #160]
; NONEON-NOSVE-NEXT: stp q22, q23, [x1, #192]
; NONEON-NOSVE-NEXT: stp q21, q18, [x1, #224]
; NONEON-NOSVE-NEXT: add sp, sp, #400
@@ -1599,144 +1599,144 @@ define void @zext_v32i8_v32i16(ptr %in, ptr %out) {
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #41]
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #21]
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #17]
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #31]
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #18]
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #16]
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #30]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #18]
-; NONEON-NOSVE-NEXT: add w5, w17, w17
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #29]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #30]
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #31]
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #28]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #29]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: and w5, w5, #0xff
; NONEON-NOSVE-NEXT: add w9, w9, w9
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #26]
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: strh w5, [sp, #74]
-; NONEON-NOSVE-NEXT: add w5, w29, w29
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: strh w8, [sp, #70]
-; NONEON-NOSVE-NEXT: add w8, w28, w28
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #28]
-; NONEON-NOSVE-NEXT: and w5, w5, #0xff
-; NONEON-NOSVE-NEXT: strh w9, [sp, #68]
-; NONEON-NOSVE-NEXT: add w9, w27, w27
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #27]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #72]
+; NONEON-NOSVE-NEXT: add w8, w30, w30
+; NONEON-NOSVE-NEXT: ldrb w19, [sp, #24]
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #27]
-; NONEON-NOSVE-NEXT: strh w5, [sp, #66]
-; NONEON-NOSVE-NEXT: add w5, w26, w26
+; NONEON-NOSVE-NEXT: strh w9, [sp, #70]
+; NONEON-NOSVE-NEXT: add w9, w28, w28
+; NONEON-NOSVE-NEXT: strh w8, [sp, #68]
+; NONEON-NOSVE-NEXT: add w8, w27, w27
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: strh w9, [sp, #66]
+; NONEON-NOSVE-NEXT: add w9, w26, w26
; NONEON-NOSVE-NEXT: strh w8, [sp, #64]
; NONEON-NOSVE-NEXT: add w8, w25, w25
-; NONEON-NOSVE-NEXT: ldrb w22, [sp, #26]
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: strh w9, [sp, #62]
-; NONEON-NOSVE-NEXT: and w9, w5, #0xff
-; NONEON-NOSVE-NEXT: add w5, w24, w24
+; NONEON-NOSVE-NEXT: add w9, w24, w24
+; NONEON-NOSVE-NEXT: strh w8, [sp, #60]
+; NONEON-NOSVE-NEXT: add w8, w23, w23
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #25]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #60]
-; NONEON-NOSVE-NEXT: add w9, w23, w23
-; NONEON-NOSVE-NEXT: strh w8, [sp, #58]
-; NONEON-NOSVE-NEXT: and w8, w5, #0xff
-; NONEON-NOSVE-NEXT: ldrb w20, [sp, #24]
-; NONEON-NOSVE-NEXT: add w5, w22, w22
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #25]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #58]
+; NONEON-NOSVE-NEXT: add w9, w22, w22
; NONEON-NOSVE-NEXT: strh w8, [sp, #56]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w19, [sp, #39]
-; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: strh w8, [sp, #54]
-; NONEON-NOSVE-NEXT: and w8, w5, #0xff
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #23]
-; NONEON-NOSVE-NEXT: ldrb w4, [sp, #38]
-; NONEON-NOSVE-NEXT: add w5, w20, w20
+; NONEON-NOSVE-NEXT: add w8, w21, w21
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w6, [sp, #38]
+; NONEON-NOSVE-NEXT: ldrb w7, [sp, #39]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #54]
+; NONEON-NOSVE-NEXT: add w9, w20, w20
; NONEON-NOSVE-NEXT: strh w8, [sp, #52]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #22]
-; NONEON-NOSVE-NEXT: ldrb w3, [sp, #37]
-; NONEON-NOSVE-NEXT: add w9, w19, w19
-; NONEON-NOSVE-NEXT: strh w8, [sp, #50]
-; NONEON-NOSVE-NEXT: and w8, w5, #0xff
-; NONEON-NOSVE-NEXT: add w0, w16, w16
+; NONEON-NOSVE-NEXT: add w8, w19, w19
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #23]
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w2, [sp, #36]
-; NONEON-NOSVE-NEXT: add w4, w4, w4
+; NONEON-NOSVE-NEXT: ldrb w3, [sp, #37]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #50]
+; NONEON-NOSVE-NEXT: add w9, w7, w7
; NONEON-NOSVE-NEXT: strh w8, [sp, #48]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
-; NONEON-NOSVE-NEXT: add w18, w15, w15
-; NONEON-NOSVE-NEXT: and w6, w0, #0xff
+; NONEON-NOSVE-NEXT: add w8, w6, w6
+; NONEON-NOSVE-NEXT: add w18, w17, w17
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #22]
+; NONEON-NOSVE-NEXT: and w5, w18, #0xff
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #34]
; NONEON-NOSVE-NEXT: ldrb w0, [sp, #35]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #110]
; NONEON-NOSVE-NEXT: add w9, w3, w3
-; NONEON-NOSVE-NEXT: strh w8, [sp, #110]
-; NONEON-NOSVE-NEXT: and w8, w4, #0xff
-; NONEON-NOSVE-NEXT: and w7, w18, #0xff
-; NONEON-NOSVE-NEXT: ldrb w18, [sp, #34]
-; NONEON-NOSVE-NEXT: add w2, w2, w2
+; NONEON-NOSVE-NEXT: add w4, w16, w16
; NONEON-NOSVE-NEXT: strh w8, [sp, #108]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
; NONEON-NOSVE-NEXT: ldrb w17, [sp, #33]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #106]
; NONEON-NOSVE-NEXT: add w9, w0, w0
-; NONEON-NOSVE-NEXT: strh w8, [sp, #106]
-; NONEON-NOSVE-NEXT: and w8, w2, #0xff
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #32]
-; NONEON-NOSVE-NEXT: add w18, w18, w18
+; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
; NONEON-NOSVE-NEXT: strh w8, [sp, #104]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w8, w18, w18
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #47]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #102]
; NONEON-NOSVE-NEXT: add w9, w17, w17
-; NONEON-NOSVE-NEXT: strh w8, [sp, #102]
-; NONEON-NOSVE-NEXT: and w8, w18, #0xff
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #46]
-; NONEON-NOSVE-NEXT: add w16, w16, w16
; NONEON-NOSVE-NEXT: strh w8, [sp, #100]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w8, w16, w16
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #45]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #98]
; NONEON-NOSVE-NEXT: add w9, w15, w15
-; NONEON-NOSVE-NEXT: strh w8, [sp, #98]
-; NONEON-NOSVE-NEXT: and w8, w16, #0xff
-; NONEON-NOSVE-NEXT: ldrb w12, [sp, #44]
-; NONEON-NOSVE-NEXT: add w14, w14, w14
; NONEON-NOSVE-NEXT: strh w8, [sp, #96]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #43]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #94]
; NONEON-NOSVE-NEXT: add w9, w13, w13
-; NONEON-NOSVE-NEXT: strh w8, [sp, #94]
-; NONEON-NOSVE-NEXT: and w8, w14, #0xff
-; NONEON-NOSVE-NEXT: ldrb w10, [sp, #42]
-; NONEON-NOSVE-NEXT: add w12, w12, w12
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #21]
; NONEON-NOSVE-NEXT: strh w8, [sp, #92]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w8, w12, w12
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: strh w9, [sp, #90]
; NONEON-NOSVE-NEXT: add w9, w11, w11
-; NONEON-NOSVE-NEXT: strh w8, [sp, #90]
-; NONEON-NOSVE-NEXT: and w8, w12, #0xff
-; NONEON-NOSVE-NEXT: add w10, w10, w10
; NONEON-NOSVE-NEXT: strh w8, [sp, #88]
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w8, w10, w10
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: strh w9, [sp, #86]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #20]
-; NONEON-NOSVE-NEXT: strh w8, [sp, #86]
-; NONEON-NOSVE-NEXT: and w8, w10, #0xff
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strh w6, [sp, #78]
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: add w6, w30, w30
; NONEON-NOSVE-NEXT: strh w8, [sp, #84]
-; NONEON-NOSVE-NEXT: add w10, w10, w10
-; NONEON-NOSVE-NEXT: and w8, w9, #0xff
-; NONEON-NOSVE-NEXT: and w6, w6, #0xff
-; NONEON-NOSVE-NEXT: strh w8, [sp, #82]
-; NONEON-NOSVE-NEXT: and w8, w10, #0xff
-; NONEON-NOSVE-NEXT: strh w7, [sp, #76]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #192] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strh w6, [sp, #72]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #176] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strh w8, [sp, #80]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: and w4, w4, #0xff
+; NONEON-NOSVE-NEXT: strh w5, [sp, #78]
+; NONEON-NOSVE-NEXT: add w5, w29, w29
+; NONEON-NOSVE-NEXT: add w9, w9, w9
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: strh w4, [sp, #76]
+; NONEON-NOSVE-NEXT: and w4, w5, #0xff
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: strh w4, [sp, #74]
+; NONEON-NOSVE-NEXT: strh w9, [sp, #82]
; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #48]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #80]
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #192] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #80]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #176] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #160] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #144] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q2, q3, [x1]
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #128] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: stp q1, q0, [x1, #32]
+; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #128] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #112] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: add sp, sp, #208
; NONEON-NOSVE-NEXT: ret
@@ -1909,132 +1909,131 @@ define void @zext_v32i8_v32i32(ptr %in, ptr %out) {
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #44]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #45]
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #18]
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #19]
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #17]
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #16]
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #18]
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #19]
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #17]
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #22]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: add w18, w15, w15
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #22]
-; NONEON-NOSVE-NEXT: add w0, w16, w16
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]
-; NONEON-NOSVE-NEXT: and w19, w18, #0xff
-; NONEON-NOSVE-NEXT: and w7, w0, #0xff
-; NONEON-NOSVE-NEXT: add w6, w17, w17
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #20]
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #21]
-; NONEON-NOSVE-NEXT: stp w19, w7, [sp, #104]
-; NONEON-NOSVE-NEXT: add w7, w30, w30
+; NONEON-NOSVE-NEXT: add w18, w16, w16
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]
+; NONEON-NOSVE-NEXT: add w0, w17, w17
+; NONEON-NOSVE-NEXT: and w7, w18, #0xff
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #23]
+; NONEON-NOSVE-NEXT: and w6, w0, #0xff
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: and w6, w6, #0xff
-; NONEON-NOSVE-NEXT: and w7, w7, #0xff
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #20]
+; NONEON-NOSVE-NEXT: stp w7, w6, [sp, #104]
+; NONEON-NOSVE-NEXT: add w6, w28, w28
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #26]
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #27]
-; NONEON-NOSVE-NEXT: stp w7, w6, [sp, #96]
-; NONEON-NOSVE-NEXT: add w6, w29, w29
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #88]
-; NONEON-NOSVE-NEXT: add w8, w28, w28
; NONEON-NOSVE-NEXT: and w6, w6, #0xff
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #21]
+; NONEON-NOSVE-NEXT: add w9, w9, w9
+; NONEON-NOSVE-NEXT: stp w8, w6, [sp, #96]
+; NONEON-NOSVE-NEXT: add w8, w30, w30
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #24]
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #25]
-; NONEON-NOSVE-NEXT: add w9, w27, w27
-; NONEON-NOSVE-NEXT: stp w8, w6, [sp, #80]
-; NONEON-NOSVE-NEXT: add w6, w26, w26
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #26]
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #27]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #88]
+; NONEON-NOSVE-NEXT: add w9, w29, w29
+; NONEON-NOSVE-NEXT: add w8, w27, w27
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w22, [sp, #30]
-; NONEON-NOSVE-NEXT: and w6, w6, #0xff
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #31]
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #24]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #25]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #80]
+; NONEON-NOSVE-NEXT: add w9, w26, w26
; NONEON-NOSVE-NEXT: add w8, w25, w25
-; NONEON-NOSVE-NEXT: stp w6, w9, [sp, #72]
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #30]
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #31]
+; NONEON-NOSVE-NEXT: ldrb w19, [sp, #28]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #72]
; NONEON-NOSVE-NEXT: add w9, w24, w24
+; NONEON-NOSVE-NEXT: add w8, w23, w23
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #29]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #64]
+; NONEON-NOSVE-NEXT: add w9, w22, w22
+; NONEON-NOSVE-NEXT: add w8, w21, w21
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w20, [sp, #28]
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #29]
-; NONEON-NOSVE-NEXT: add w6, w23, w23
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #64]
-; NONEON-NOSVE-NEXT: add w8, w22, w22
-; NONEON-NOSVE-NEXT: and w9, w6, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w4, [sp, #34]
; NONEON-NOSVE-NEXT: ldrb w5, [sp, #35]
-; NONEON-NOSVE-NEXT: add w6, w21, w21
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]
; NONEON-NOSVE-NEXT: add w9, w20, w20
-; NONEON-NOSVE-NEXT: and w8, w6, #0xff
-; NONEON-NOSVE-NEXT: ldrb w2, [sp, #32]
+; NONEON-NOSVE-NEXT: add w8, w19, w19
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: ldrb w2, [sp, #32]
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w3, [sp, #33]
-; NONEON-NOSVE-NEXT: add w5, w5, w5
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #48]
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #38]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]
+; NONEON-NOSVE-NEXT: add w9, w5, w5
; NONEON-NOSVE-NEXT: add w8, w4, w4
-; NONEON-NOSVE-NEXT: and w9, w5, #0xff
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w18, [sp, #38]
; NONEON-NOSVE-NEXT: ldrb w0, [sp, #39]
-; NONEON-NOSVE-NEXT: add w3, w3, w3
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #168]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
-; NONEON-NOSVE-NEXT: and w8, w3, #0xff
+; NONEON-NOSVE-NEXT: add w9, w3, w3
+; NONEON-NOSVE-NEXT: add w8, w2, w2
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w16, [sp, #36]
; NONEON-NOSVE-NEXT: ldrb w17, [sp, #37]
-; NONEON-NOSVE-NEXT: add w0, w0, w0
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #160]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #160]
+; NONEON-NOSVE-NEXT: add w9, w0, w0
; NONEON-NOSVE-NEXT: add w8, w18, w18
-; NONEON-NOSVE-NEXT: and w9, w0, #0xff
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #42]
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #43]
-; NONEON-NOSVE-NEXT: add w17, w17, w17
+; NONEON-NOSVE-NEXT: ldrb w12, [sp, #40]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #152]
-; NONEON-NOSVE-NEXT: add w9, w16, w16
-; NONEON-NOSVE-NEXT: and w8, w17, #0xff
+; NONEON-NOSVE-NEXT: add w9, w17, w17
+; NONEON-NOSVE-NEXT: add w8, w16, w16
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w12, [sp, #40]
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #41]
-; NONEON-NOSVE-NEXT: add w15, w15, w15
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #144]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #144]
+; NONEON-NOSVE-NEXT: add w9, w15, w15
; NONEON-NOSVE-NEXT: add w8, w14, w14
-; NONEON-NOSVE-NEXT: and w9, w15, #0xff
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #46]
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #47]
-; NONEON-NOSVE-NEXT: add w13, w13, w13
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #136]
-; NONEON-NOSVE-NEXT: add w9, w12, w12
-; NONEON-NOSVE-NEXT: and w8, w13, #0xff
+; NONEON-NOSVE-NEXT: add w9, w13, w13
+; NONEON-NOSVE-NEXT: add w8, w12, w12
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: add w11, w11, w11
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #128]
-; NONEON-NOSVE-NEXT: add w8, w10, w10
-; NONEON-NOSVE-NEXT: and w9, w11, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: add w10, w10, w10
; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #80]
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: and w8, w10, #0xff
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #128]
+; NONEON-NOSVE-NEXT: add w9, w11, w11
+; NONEON-NOSVE-NEXT: add w8, w10, w10
; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #120]
; NONEON-NOSVE-NEXT: ldp q4, q3, [sp, #48]
-; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #112]
+; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #8] // 8-byte Folded Reload
; NONEON-NOSVE-NEXT: ldp q7, q6, [sp, #144]
-; NONEON-NOSVE-NEXT: ldp q2, q5, [sp, #112]
-; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #256] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
+; NONEON-NOSVE-NEXT: add w9, w9, w9
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #112]
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #240] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
+; NONEON-NOSVE-NEXT: ldp q2, q5, [sp, #112]
+; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #224] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
+; NONEON-NOSVE-NEXT: stp q3, q4, [x1, #32]
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #208] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q6, q7, [x1, #64]
; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #192] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q5, q2, [x1, #96]
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #176] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: add sp, sp, #272
; NONEON-NOSVE-NEXT: ret
@@ -2318,152 +2317,150 @@ define void @zext_v32i8_v32i64(ptr %in, ptr %out) {
; NONEON-NOSVE-NEXT: .cfi_offset w30, -88
; NONEON-NOSVE-NEXT: .cfi_offset w29, -96
; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]
-; NONEON-NOSVE-NEXT: str wzr, [sp, #172]
-; NONEON-NOSVE-NEXT: str wzr, [sp, #292]
; NONEON-NOSVE-NEXT: str wzr, [sp, #300]
+; NONEON-NOSVE-NEXT: str wzr, [sp, #292]
+; NONEON-NOSVE-NEXT: str wzr, [sp, #284]
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #47]
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
; NONEON-NOSVE-NEXT: ldrb w29, [sp, #20]
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #21]
; NONEON-NOSVE-NEXT: ldrb w27, [sp, #22]
; NONEON-NOSVE-NEXT: ldrb w28, [sp, #23]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #25]
; NONEON-NOSVE-NEXT: ldrb w25, [sp, #24]
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #25]
; NONEON-NOSVE-NEXT: ldrb w24, [sp, #26]
; NONEON-NOSVE-NEXT: add w8, w8, w8
; NONEON-NOSVE-NEXT: add w9, w9, w9
; NONEON-NOSVE-NEXT: ldrb w21, [sp, #27]
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: ldrb w19, [sp, #29]
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #140]
-; NONEON-NOSVE-NEXT: add w8, w30, w30
; NONEON-NOSVE-NEXT: ldrb w20, [sp, #28]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #148]
-; NONEON-NOSVE-NEXT: add w9, w29, w29
-; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #132]
-; NONEON-NOSVE-NEXT: add w8, w27, w27
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #124]
-; NONEON-NOSVE-NEXT: add w9, w28, w28
-; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #108]
-; NONEON-NOSVE-NEXT: add w8, w26, w26
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #116]
-; NONEON-NOSVE-NEXT: add w9, w25, w25
-; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #100]
-; NONEON-NOSVE-NEXT: add w8, w24, w24
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #92]
-; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w19, [sp, #29]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #144]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w30, w30
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #152]
+; NONEON-NOSVE-NEXT: add w8, w29, w29
; NONEON-NOSVE-NEXT: ldrb w7, [sp, #30]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #76]
-; NONEON-NOSVE-NEXT: add w8, w19, w19
-; NONEON-NOSVE-NEXT: ldrb w6, [sp, #31]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #84]
-; NONEON-NOSVE-NEXT: add w9, w20, w20
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w4, [sp, #33]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #68]
-; NONEON-NOSVE-NEXT: add w8, w7, w7
+; NONEON-NOSVE-NEXT: ldrb w6, [sp, #31]
; NONEON-NOSVE-NEXT: ldrb w5, [sp, #32]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #60]
-; NONEON-NOSVE-NEXT: add w9, w6, w6
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #128]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w28, w28
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #136]
+; NONEON-NOSVE-NEXT: add w8, w27, w27
+; NONEON-NOSVE-NEXT: ldrb w4, [sp, #33]
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldrb w16, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w18, [sp, #17]
; NONEON-NOSVE-NEXT: ldrb w3, [sp, #34]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: str w8, [sp, #48]
-; NONEON-NOSVE-NEXT: add w8, w4, w4
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #112]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w26, w26
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #120]
+; NONEON-NOSVE-NEXT: add w8, w25, w25
; NONEON-NOSVE-NEXT: ldrb w2, [sp, #35]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #52]
-; NONEON-NOSVE-NEXT: add w9, w5, w5
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #17]
; NONEON-NOSVE-NEXT: add w0, w16, w16
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #96]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w21, w21
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #104]
+; NONEON-NOSVE-NEXT: add w8, w24, w24
+; NONEON-NOSVE-NEXT: and w23, w0, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w0, [sp, #36]
; NONEON-NOSVE-NEXT: add w22, w18, w18
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #80]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w19, w19
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #88]
+; NONEON-NOSVE-NEXT: add w8, w20, w20
; NONEON-NOSVE-NEXT: ldrb w18, [sp, #37]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #38]
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #39]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #64]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w6, w6
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #72]
+; NONEON-NOSVE-NEXT: add w8, w7, w7
+; NONEON-NOSVE-NEXT: ldrb w15, [sp, #40]
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w14, [sp, #41]
+; NONEON-NOSVE-NEXT: ldrb w12, [sp, #42]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #48]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w4, w4
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #56]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: ldrb w13, [sp, #43]
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
+; NONEON-NOSVE-NEXT: ldrb w10, [sp, #44]
+; NONEON-NOSVE-NEXT: ldrb w11, [sp, #45]
+; NONEON-NOSVE-NEXT: str w8, [sp, #288]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w2, w2
; NONEON-NOSVE-NEXT: str w8, [sp, #296]
; NONEON-NOSVE-NEXT: add w8, w3, w3
-; NONEON-NOSVE-NEXT: and w23, w0, #0xff
-; NONEON-NOSVE-NEXT: ldrb w0, [sp, #36]
-; NONEON-NOSVE-NEXT: str w9, [sp, #288]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
+; NONEON-NOSVE-NEXT: and w22, w22, #0xff
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #38]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: stp w23, wzr, [sp, #160]
; NONEON-NOSVE-NEXT: str w8, [sp, #272]
-; NONEON-NOSVE-NEXT: add w8, w18, w18
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #39]
-; NONEON-NOSVE-NEXT: str w9, [sp, #280]
-; NONEON-NOSVE-NEXT: add w9, w0, w0
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w18, w18
+; NONEON-NOSVE-NEXT: str w8, [sp, #280]
+; NONEON-NOSVE-NEXT: add w8, w0, w0
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #41]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
+; NONEON-NOSVE-NEXT: stp w22, wzr, [sp, #168]
+; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #252]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: add w9, w16, w16
; NONEON-NOSVE-NEXT: str w8, [sp, #264]
; NONEON-NOSVE-NEXT: add w8, w17, w17
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #40]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #252]
-; NONEON-NOSVE-NEXT: add w9, w16, w16
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w12, [sp, #42]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #236]
-; NONEON-NOSVE-NEXT: add w8, w15, w15
-; NONEON-NOSVE-NEXT: ldrb w13, [sp, #43]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #244]
+; NONEON-NOSVE-NEXT: str wzr, [sp, #276]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #240]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
; NONEON-NOSVE-NEXT: add w9, w14, w14
+; NONEON-NOSVE-NEXT: str w8, [sp, #248]
+; NONEON-NOSVE-NEXT: add w8, w15, w15
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: ldrb w11, [sp, #45]
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #228]
-; NONEON-NOSVE-NEXT: add w8, w12, w12
-; NONEON-NOSVE-NEXT: ldrb w10, [sp, #44]
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #220]
+; NONEON-NOSVE-NEXT: str wzr, [sp, #268]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #224]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
; NONEON-NOSVE-NEXT: add w9, w13, w13
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #232]
+; NONEON-NOSVE-NEXT: add w8, w12, w12
; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #204]
-; NONEON-NOSVE-NEXT: add w8, w11, w11
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #212]
-; NONEON-NOSVE-NEXT: add w9, w10, w10
-; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: and w9, w9, #0xff
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #196]
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: stp wzr, w9, [sp, #188]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: and w22, w22, #0xff
-; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: stp wzr, w22, [sp, #164]
-; NONEON-NOSVE-NEXT: and w8, w8, #0xff
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: stp wzr, w23, [sp, #156]
-; NONEON-NOSVE-NEXT: stp wzr, w8, [sp, #180]
+; NONEON-NOSVE-NEXT: str wzr, [sp, #260]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #208]
; NONEON-NOSVE-NEXT: and w8, w9, #0xff
-; NONEON-NOSVE-NEXT: str wzr, [sp, #276]
+; NONEON-NOSVE-NEXT: add w9, w11, w11
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #216]
+; NONEON-NOSVE-NEXT: add w8, w10, w10
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #144]
-; NONEON-NOSVE-NEXT: str wzr, [sp, #284]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #192]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #200]
; NONEON-NOSVE-NEXT: ldp q3, q2, [sp, #112]
-; NONEON-NOSVE-NEXT: str wzr, [sp, #260]
+; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #8] // 8-byte Folded Reload
; NONEON-NOSVE-NEXT: ldp q5, q4, [sp, #80]
-; NONEON-NOSVE-NEXT: str wzr, [sp, #268]
; NONEON-NOSVE-NEXT: ldp q7, q6, [sp, #48]
-; NONEON-NOSVE-NEXT: str w8, [sp, #176]
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: add w9, w9, w9
+; NONEON-NOSVE-NEXT: and w8, w8, #0xff
; NONEON-NOSVE-NEXT: ldp q17, q16, [sp, #272]
-; NONEON-NOSVE-NEXT: ldp q18, q21, [sp, #176]
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #176]
+; NONEON-NOSVE-NEXT: and w8, w9, #0xff
+; NONEON-NOSVE-NEXT: stp w8, wzr, [sp, #184]
; NONEON-NOSVE-NEXT: ldp q20, q19, [sp, #240]
+; NONEON-NOSVE-NEXT: ldp q18, q21, [sp, #176]
; NONEON-NOSVE-NEXT: ldp q23, q22, [sp, #208]
; NONEON-NOSVE-NEXT: stp q0, q1, [x1]
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #384] // 16-byte Folded Reload
diff --git a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-mulh.ll b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-mulh.ll
index 05051a43484f5..38786823b9284 100644
--- a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-mulh.ll
+++ b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-mulh.ll
@@ -150,116 +150,112 @@ define <16 x i8> @smulh_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
;
; NONEON-NOSVE-LABEL: smulh_v16i8:
; NONEON-NOSVE: // %bb.0:
-; NONEON-NOSVE-NEXT: sub sp, sp, #160
-; NONEON-NOSVE-NEXT: str x27, [sp, #80] // 8-byte Spill
-; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #96] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #112] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #128] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #144] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
+; NONEON-NOSVE-NEXT: sub sp, sp, #144
+; NONEON-NOSVE-NEXT: str x25, [sp, #80] // 8-byte Spill
+; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #96] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #112] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #128] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 144
; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
-; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
-; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
-; NONEON-NOSVE-NEXT: .cfi_offset w27, -80
+; NONEON-NOSVE-NEXT: .cfi_offset w25, -64
; NONEON-NOSVE-NEXT: str q0, [sp]
; NONEON-NOSVE-NEXT: ldp d2, d0, [sp]
; NONEON-NOSVE-NEXT: str q1, [sp, #16]
; NONEON-NOSVE-NEXT: stp d0, d2, [sp, #40]
; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrsb w6, [sp, #44]
-; NONEON-NOSVE-NEXT: ldrsb w7, [sp, #45]
-; NONEON-NOSVE-NEXT: ldrsb w19, [sp, #46]
-; NONEON-NOSVE-NEXT: ldrsb w20, [sp, #47]
+; NONEON-NOSVE-NEXT: ldrsb w1, [sp, #42]
+; NONEON-NOSVE-NEXT: ldrsb w4, [sp, #43]
+; NONEON-NOSVE-NEXT: ldrsb w5, [sp, #44]
+; NONEON-NOSVE-NEXT: ldrsb w6, [sp, #45]
+; NONEON-NOSVE-NEXT: ldrsb w7, [sp, #46]
+; NONEON-NOSVE-NEXT: ldrsb w19, [sp, #47]
+; NONEON-NOSVE-NEXT: str d0, [sp, #56]
; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #48]
; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #49]
-; NONEON-NOSVE-NEXT: str d0, [sp, #56]
+; NONEON-NOSVE-NEXT: ldrsb w20, [sp, #63]
+; NONEON-NOSVE-NEXT: ldrsb w21, [sp, #62]
+; NONEON-NOSVE-NEXT: ldrsb w22, [sp, #61]
+; NONEON-NOSVE-NEXT: ldrsb w23, [sp, #60]
+; NONEON-NOSVE-NEXT: ldrsb w24, [sp, #59]
+; NONEON-NOSVE-NEXT: ldrsb w25, [sp, #58]
+; NONEON-NOSVE-NEXT: mul w19, w19, w20
+; NONEON-NOSVE-NEXT: str d1, [sp, #88]
; NONEON-NOSVE-NEXT: ldrsb w10, [sp, #50]
+; NONEON-NOSVE-NEXT: mul w7, w7, w21
; NONEON-NOSVE-NEXT: ldrsb w11, [sp, #51]
-; NONEON-NOSVE-NEXT: ldrsb w21, [sp, #63]
-; NONEON-NOSVE-NEXT: ldrsb w23, [sp, #62]
-; NONEON-NOSVE-NEXT: ldrsb w25, [sp, #61]
-; NONEON-NOSVE-NEXT: ldrsb w26, [sp, #60]
-; NONEON-NOSVE-NEXT: str d1, [sp, #88]
; NONEON-NOSVE-NEXT: ldrsb w12, [sp, #52]
-; NONEON-NOSVE-NEXT: mul w20, w20, w21
+; NONEON-NOSVE-NEXT: mul w6, w6, w22
; NONEON-NOSVE-NEXT: ldrsb w13, [sp, #53]
; NONEON-NOSVE-NEXT: ldrsb w15, [sp, #54]
-; NONEON-NOSVE-NEXT: mul w19, w19, w23
-; NONEON-NOSVE-NEXT: ldrsb w17, [sp, #55]
-; NONEON-NOSVE-NEXT: ldrsb w0, [sp, #40]
-; NONEON-NOSVE-NEXT: mul w7, w7, w25
-; NONEON-NOSVE-NEXT: ldrsb w2, [sp, #41]
-; NONEON-NOSVE-NEXT: ldrsb w3, [sp, #42]
-; NONEON-NOSVE-NEXT: mul w6, w6, w26
-; NONEON-NOSVE-NEXT: lsr w20, w20, #8
-; NONEON-NOSVE-NEXT: ldrsb w4, [sp, #43]
-; NONEON-NOSVE-NEXT: ldrsb w14, [sp, #88]
+; NONEON-NOSVE-NEXT: mul w5, w5, w23
; NONEON-NOSVE-NEXT: lsr w19, w19, #8
-; NONEON-NOSVE-NEXT: ldrsb w16, [sp, #89]
-; NONEON-NOSVE-NEXT: ldrsb w18, [sp, #90]
+; NONEON-NOSVE-NEXT: ldrsb w16, [sp, #55]
+; NONEON-NOSVE-NEXT: ldrsb w17, [sp, #40]
+; NONEON-NOSVE-NEXT: mul w4, w4, w24
; NONEON-NOSVE-NEXT: lsr w7, w7, #8
-; NONEON-NOSVE-NEXT: ldrsb w1, [sp, #91]
-; NONEON-NOSVE-NEXT: ldrsb w5, [sp, #92]
-; NONEON-NOSVE-NEXT: mul w9, w9, w16
+; NONEON-NOSVE-NEXT: ldrsb w18, [sp, #41]
+; NONEON-NOSVE-NEXT: ldrsb w14, [sp, #88]
+; NONEON-NOSVE-NEXT: mul w1, w1, w25
+; NONEON-NOSVE-NEXT: ldrsb w0, [sp, #89]
+; NONEON-NOSVE-NEXT: ldrsb w2, [sp, #90]
; NONEON-NOSVE-NEXT: lsr w6, w6, #8
-; NONEON-NOSVE-NEXT: ldrsb w22, [sp, #93]
-; NONEON-NOSVE-NEXT: ldrsb w24, [sp, #94]
-; NONEON-NOSVE-NEXT: mul w11, w11, w1
-; NONEON-NOSVE-NEXT: ldrsb w21, [sp, #95]
-; NONEON-NOSVE-NEXT: ldrsb w23, [sp, #56]
-; NONEON-NOSVE-NEXT: mul w12, w12, w5
-; NONEON-NOSVE-NEXT: ldrsb w27, [sp, #59]
-; NONEON-NOSVE-NEXT: ldrsb w25, [sp, #58]
-; NONEON-NOSVE-NEXT: mul w15, w15, w24
-; NONEON-NOSVE-NEXT: ldrsb w26, [sp, #57]
-; NONEON-NOSVE-NEXT: mul w0, w0, w23
-; NONEON-NOSVE-NEXT: lsr w11, w11, #8
-; NONEON-NOSVE-NEXT: mul w4, w4, w27
+; NONEON-NOSVE-NEXT: ldrsb w3, [sp, #91]
+; NONEON-NOSVE-NEXT: ldrsb w20, [sp, #92]
+; NONEON-NOSVE-NEXT: mul w8, w8, w14
+; NONEON-NOSVE-NEXT: ldrsb w21, [sp, #93]
+; NONEON-NOSVE-NEXT: ldrsb w22, [sp, #94]
+; NONEON-NOSVE-NEXT: mul w10, w10, w2
+; NONEON-NOSVE-NEXT: ldrsb w23, [sp, #95]
+; NONEON-NOSVE-NEXT: ldrsb w24, [sp, #57]
+; NONEON-NOSVE-NEXT: mul w12, w12, w20
+; NONEON-NOSVE-NEXT: ldrsb w25, [sp, #56]
+; NONEON-NOSVE-NEXT: mul w15, w15, w22
+; NONEON-NOSVE-NEXT: lsr w5, w5, #8
+; NONEON-NOSVE-NEXT: mul w18, w18, w24
+; NONEON-NOSVE-NEXT: lsr w4, w4, #8
+; NONEON-NOSVE-NEXT: lsr w1, w1, #8
+; NONEON-NOSVE-NEXT: mul w17, w17, w25
; NONEON-NOSVE-NEXT: lsr w12, w12, #8
-; NONEON-NOSVE-NEXT: lsr w9, w9, #8
-; NONEON-NOSVE-NEXT: mul w3, w3, w25
+; NONEON-NOSVE-NEXT: lsr w10, w10, #8
+; NONEON-NOSVE-NEXT: mul w16, w16, w23
; NONEON-NOSVE-NEXT: lsr w15, w15, #8
-; NONEON-NOSVE-NEXT: strb w20, [sp, #79]
-; NONEON-NOSVE-NEXT: mul w2, w2, w26
-; NONEON-NOSVE-NEXT: lsr w0, w0, #8
-; NONEON-NOSVE-NEXT: strb w19, [sp, #78]
-; NONEON-NOSVE-NEXT: mul w17, w17, w21
-; NONEON-NOSVE-NEXT: lsr w4, w4, #8
-; NONEON-NOSVE-NEXT: strb w7, [sp, #77]
-; NONEON-NOSVE-NEXT: mul w13, w13, w22
-; NONEON-NOSVE-NEXT: lsr w3, w3, #8
-; NONEON-NOSVE-NEXT: strb w6, [sp, #76]
-; NONEON-NOSVE-NEXT: mul w10, w10, w18
-; NONEON-NOSVE-NEXT: lsr w2, w2, #8
-; NONEON-NOSVE-NEXT: strb w4, [sp, #75]
-; NONEON-NOSVE-NEXT: mul w8, w8, w14
+; NONEON-NOSVE-NEXT: lsr w8, w8, #8
+; NONEON-NOSVE-NEXT: mul w13, w13, w21
+; NONEON-NOSVE-NEXT: lsr w18, w18, #8
+; NONEON-NOSVE-NEXT: strb w19, [sp, #79]
+; NONEON-NOSVE-NEXT: mul w11, w11, w3
; NONEON-NOSVE-NEXT: lsr w17, w17, #8
-; NONEON-NOSVE-NEXT: strb w3, [sp, #74]
+; NONEON-NOSVE-NEXT: strb w7, [sp, #78]
+; NONEON-NOSVE-NEXT: mul w9, w9, w0
+; NONEON-NOSVE-NEXT: lsr w16, w16, #8
+; NONEON-NOSVE-NEXT: strb w6, [sp, #77]
; NONEON-NOSVE-NEXT: lsr w13, w13, #8
-; NONEON-NOSVE-NEXT: strb w2, [sp, #73]
-; NONEON-NOSVE-NEXT: ldr x27, [sp, #80] // 8-byte Reload
-; NONEON-NOSVE-NEXT: lsr w10, w10, #8
-; NONEON-NOSVE-NEXT: strb w0, [sp, #72]
-; NONEON-NOSVE-NEXT: lsr w8, w8, #8
-; NONEON-NOSVE-NEXT: strb w17, [sp, #71]
+; NONEON-NOSVE-NEXT: strb w5, [sp, #76]
+; NONEON-NOSVE-NEXT: ldr x25, [sp, #80] // 8-byte Reload
+; NONEON-NOSVE-NEXT: lsr w11, w11, #8
+; NONEON-NOSVE-NEXT: strb w4, [sp, #75]
+; NONEON-NOSVE-NEXT: lsr w9, w9, #8
+; NONEON-NOSVE-NEXT: strb w1, [sp, #74]
+; NONEON-NOSVE-NEXT: strb w18, [sp, #73]
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #128] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w17, [sp, #72]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #112] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w16, [sp, #71]
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #96] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w15, [sp, #70]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #144] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w13, [sp, #69]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #128] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w12, [sp, #68]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #112] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w11, [sp, #67]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #96] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w10, [sp, #66]
; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #64]
-; NONEON-NOSVE-NEXT: add sp, sp, #160
+; NONEON-NOSVE-NEXT: add sp, sp, #144
; NONEON-NOSVE-NEXT: ret
%1 = sext <16 x i8> %op1 to <16 x i16>
%2 = sext <16 x i8> %op2 to <16 x i16>
@@ -733,13 +729,12 @@ define void @smulh_v16i16(ptr %a, ptr %b) {
;
; NONEON-NOSVE-LABEL: smulh_v16i16:
; NONEON-NOSVE: // %bb.0:
-; NONEON-NOSVE-NEXT: sub sp, sp, #240
-; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #160] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #176] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #192] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #208] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #224] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 240
+; NONEON-NOSVE-NEXT: sub sp, sp, #224
+; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #160] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #176] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #192] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #208] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 224
; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
@@ -748,8 +743,6 @@ define void @smulh_v16i16(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
-; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
-; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
; NONEON-NOSVE-NEXT: ldp q0, q1, [x0]
; NONEON-NOSVE-NEXT: ldp q3, q2, [x1]
; NONEON-NOSVE-NEXT: str q0, [sp]
@@ -767,91 +760,90 @@ define void @smulh_v16i16(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: ldrsh w13, [sp, #50]
; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrsh w7, [sp, #96]
-; NONEON-NOSVE-NEXT: ldrsh w19, [sp, #98]
-; NONEON-NOSVE-NEXT: ldrsh w20, [sp, #100]
-; NONEON-NOSVE-NEXT: ldrsh w21, [sp, #102]
+; NONEON-NOSVE-NEXT: ldrsh w1, [sp, #108]
+; NONEON-NOSVE-NEXT: ldrsh w5, [sp, #110]
+; NONEON-NOSVE-NEXT: ldrsh w6, [sp, #96]
+; NONEON-NOSVE-NEXT: ldrsh w7, [sp, #98]
+; NONEON-NOSVE-NEXT: ldrsh w19, [sp, #100]
+; NONEON-NOSVE-NEXT: ldrsh w20, [sp, #102]
+; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
; NONEON-NOSVE-NEXT: ldrsh w14, [sp, #52]
; NONEON-NOSVE-NEXT: ldrsh w16, [sp, #54]
-; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
-; NONEON-NOSVE-NEXT: ldrsh w18, [sp, #104]
-; NONEON-NOSVE-NEXT: ldrsh w2, [sp, #106]
-; NONEON-NOSVE-NEXT: ldrsh w4, [sp, #108]
-; NONEON-NOSVE-NEXT: ldrsh w5, [sp, #110]
+; NONEON-NOSVE-NEXT: ldrsh w17, [sp, #104]
+; NONEON-NOSVE-NEXT: ldrsh w18, [sp, #106]
; NONEON-NOSVE-NEXT: ldrsh w15, [sp, #88]
-; NONEON-NOSVE-NEXT: ldrsh w17, [sp, #90]
-; NONEON-NOSVE-NEXT: ldrsh w1, [sp, #92]
-; NONEON-NOSVE-NEXT: ldrsh w3, [sp, #94]
+; NONEON-NOSVE-NEXT: ldrsh w2, [sp, #90]
+; NONEON-NOSVE-NEXT: ldrsh w3, [sp, #92]
+; NONEON-NOSVE-NEXT: ldrsh w4, [sp, #94]
; NONEON-NOSVE-NEXT: mul w8, w8, w15
-; NONEON-NOSVE-NEXT: ldrsh w6, [sp, #80]
-; NONEON-NOSVE-NEXT: ldrsh w23, [sp, #82]
-; NONEON-NOSVE-NEXT: mul w11, w11, w3
-; NONEON-NOSVE-NEXT: ldrsh w25, [sp, #84]
-; NONEON-NOSVE-NEXT: mul w13, w13, w23
; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #64]
-; NONEON-NOSVE-NEXT: mul w14, w14, w25
+; NONEON-NOSVE-NEXT: mul w11, w11, w4
+; NONEON-NOSVE-NEXT: mul w10, w10, w3
+; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #112]
+; NONEON-NOSVE-NEXT: mul w9, w9, w2
; NONEON-NOSVE-NEXT: lsr w8, w8, #16
-; NONEON-NOSVE-NEXT: mul w12, w12, w6
+; NONEON-NOSVE-NEXT: ldrsh w21, [sp, #118]
+; NONEON-NOSVE-NEXT: ldrsh w22, [sp, #116]
; NONEON-NOSVE-NEXT: lsr w11, w11, #16
-; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #112]
-; NONEON-NOSVE-NEXT: mul w10, w10, w1
-; NONEON-NOSVE-NEXT: lsr w13, w13, #16
-; NONEON-NOSVE-NEXT: ldrsh w22, [sp, #118]
-; NONEON-NOSVE-NEXT: ldrsh w24, [sp, #116]
-; NONEON-NOSVE-NEXT: ldrsh w26, [sp, #114]
-; NONEON-NOSVE-NEXT: ldrsh w27, [sp, #112]
-; NONEON-NOSVE-NEXT: ldrsh w28, [sp, #126]
-; NONEON-NOSVE-NEXT: mul w9, w9, w17
-; NONEON-NOSVE-NEXT: mul w21, w21, w22
-; NONEON-NOSVE-NEXT: ldrsh w22, [sp, #86]
-; NONEON-NOSVE-NEXT: lsr w14, w14, #16
-; NONEON-NOSVE-NEXT: mul w20, w20, w24
-; NONEON-NOSVE-NEXT: ldrsh w24, [sp, #120]
-; NONEON-NOSVE-NEXT: lsr w12, w12, #16
-; NONEON-NOSVE-NEXT: mul w19, w19, w26
-; NONEON-NOSVE-NEXT: ldrsh w26, [sp, #124]
+; NONEON-NOSVE-NEXT: ldrsh w23, [sp, #114]
+; NONEON-NOSVE-NEXT: ldrsh w24, [sp, #112]
; NONEON-NOSVE-NEXT: lsr w10, w10, #16
-; NONEON-NOSVE-NEXT: mul w7, w7, w27
-; NONEON-NOSVE-NEXT: ldrsh w27, [sp, #122]
-; NONEON-NOSVE-NEXT: lsr w21, w21, #16
-; NONEON-NOSVE-NEXT: mul w5, w5, w28
-; NONEON-NOSVE-NEXT: lsr w20, w20, #16
+; NONEON-NOSVE-NEXT: ldrsh w25, [sp, #126]
+; NONEON-NOSVE-NEXT: ldrsh w26, [sp, #124]
+; NONEON-NOSVE-NEXT: mul w20, w20, w21
+; NONEON-NOSVE-NEXT: ldrsh w21, [sp, #80]
+; NONEON-NOSVE-NEXT: mul w19, w19, w22
+; NONEON-NOSVE-NEXT: ldrsh w22, [sp, #82]
+; NONEON-NOSVE-NEXT: mul w7, w7, w23
+; NONEON-NOSVE-NEXT: ldrsh w23, [sp, #84]
; NONEON-NOSVE-NEXT: lsr w9, w9, #16
-; NONEON-NOSVE-NEXT: mul w4, w4, w26
+; NONEON-NOSVE-NEXT: mul w6, w6, w24
+; NONEON-NOSVE-NEXT: ldrsh w24, [sp, #86]
+; NONEON-NOSVE-NEXT: lsr w20, w20, #16
+; NONEON-NOSVE-NEXT: mul w5, w5, w25
+; NONEON-NOSVE-NEXT: ldrsh w25, [sp, #122]
; NONEON-NOSVE-NEXT: lsr w19, w19, #16
-; NONEON-NOSVE-NEXT: strh w21, [sp, #158]
-; NONEON-NOSVE-NEXT: mul w2, w2, w27
+; NONEON-NOSVE-NEXT: mul w1, w1, w26
+; NONEON-NOSVE-NEXT: ldrsh w26, [sp, #120]
; NONEON-NOSVE-NEXT: lsr w7, w7, #16
-; NONEON-NOSVE-NEXT: strh w20, [sp, #156]
-; NONEON-NOSVE-NEXT: mul w18, w18, w24
+; NONEON-NOSVE-NEXT: mul w18, w18, w25
+; NONEON-NOSVE-NEXT: lsr w6, w6, #16
+; NONEON-NOSVE-NEXT: strh w20, [sp, #158]
+; NONEON-NOSVE-NEXT: mul w17, w17, w26
; NONEON-NOSVE-NEXT: lsr w5, w5, #16
-; NONEON-NOSVE-NEXT: strh w19, [sp, #154]
-; NONEON-NOSVE-NEXT: mul w16, w16, w22
-; NONEON-NOSVE-NEXT: lsr w4, w4, #16
-; NONEON-NOSVE-NEXT: strh w7, [sp, #152]
-; NONEON-NOSVE-NEXT: lsr w2, w2, #16
-; NONEON-NOSVE-NEXT: strh w5, [sp, #150]
+; NONEON-NOSVE-NEXT: strh w19, [sp, #156]
+; NONEON-NOSVE-NEXT: mul w16, w16, w24
+; NONEON-NOSVE-NEXT: lsr w1, w1, #16
+; NONEON-NOSVE-NEXT: strh w7, [sp, #154]
+; NONEON-NOSVE-NEXT: mul w14, w14, w23
; NONEON-NOSVE-NEXT: lsr w18, w18, #16
-; NONEON-NOSVE-NEXT: strh w4, [sp, #148]
+; NONEON-NOSVE-NEXT: strh w6, [sp, #152]
+; NONEON-NOSVE-NEXT: mul w13, w13, w22
+; NONEON-NOSVE-NEXT: lsr w17, w17, #16
+; NONEON-NOSVE-NEXT: strh w5, [sp, #150]
+; NONEON-NOSVE-NEXT: mul w12, w12, w21
; NONEON-NOSVE-NEXT: lsr w16, w16, #16
-; NONEON-NOSVE-NEXT: strh w2, [sp, #146]
-; NONEON-NOSVE-NEXT: strh w18, [sp, #144]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #224] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strh w1, [sp, #148]
+; NONEON-NOSVE-NEXT: lsr w14, w14, #16
+; NONEON-NOSVE-NEXT: strh w18, [sp, #146]
+; NONEON-NOSVE-NEXT: lsr w13, w13, #16
+; NONEON-NOSVE-NEXT: strh w17, [sp, #144]
+; NONEON-NOSVE-NEXT: lsr w12, w12, #16
; NONEON-NOSVE-NEXT: strh w16, [sp, #142]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #208] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w14, [sp, #140]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #192] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #208] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w13, [sp, #138]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #176] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #192] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w12, [sp, #136]
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #160] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #176] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w11, [sp, #134]
+; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #160] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w10, [sp, #132]
; NONEON-NOSVE-NEXT: strh w9, [sp, #130]
; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #128]
; NONEON-NOSVE-NEXT: stp q0, q1, [x0]
-; NONEON-NOSVE-NEXT: add sp, sp, #240
+; NONEON-NOSVE-NEXT: add sp, sp, #224
; NONEON-NOSVE-NEXT: ret
%op1 = load <16 x i16>, ptr %a
%op2 = load <16 x i16>, ptr %b
@@ -1279,116 +1271,112 @@ define <16 x i8> @umulh_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
;
; NONEON-NOSVE-LABEL: umulh_v16i8:
; NONEON-NOSVE: // %bb.0:
-; NONEON-NOSVE-NEXT: sub sp, sp, #160
-; NONEON-NOSVE-NEXT: str x27, [sp, #80] // 8-byte Spill
-; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #96] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #112] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #128] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #144] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 160
+; NONEON-NOSVE-NEXT: sub sp, sp, #144
+; NONEON-NOSVE-NEXT: str x25, [sp, #80] // 8-byte Spill
+; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #96] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #112] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #128] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 144
; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
; NONEON-NOSVE-NEXT: .cfi_offset w22, -32
; NONEON-NOSVE-NEXT: .cfi_offset w23, -40
; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
-; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
-; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
-; NONEON-NOSVE-NEXT: .cfi_offset w27, -80
+; NONEON-NOSVE-NEXT: .cfi_offset w25, -64
; NONEON-NOSVE-NEXT: str q0, [sp]
; NONEON-NOSVE-NEXT: ldp d2, d0, [sp]
; NONEON-NOSVE-NEXT: str q1, [sp, #16]
; NONEON-NOSVE-NEXT: stp d0, d2, [sp, #40]
; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrb w6, [sp, #44]
-; NONEON-NOSVE-NEXT: ldrb w7, [sp, #45]
-; NONEON-NOSVE-NEXT: ldrb w19, [sp, #46]
-; NONEON-NOSVE-NEXT: ldrb w20, [sp, #47]
+; NONEON-NOSVE-NEXT: ldrb w1, [sp, #42]
+; NONEON-NOSVE-NEXT: ldrb w4, [sp, #43]
+; NONEON-NOSVE-NEXT: ldrb w5, [sp, #44]
+; NONEON-NOSVE-NEXT: ldrb w6, [sp, #45]
+; NONEON-NOSVE-NEXT: ldrb w7, [sp, #46]
+; NONEON-NOSVE-NEXT: ldrb w19, [sp, #47]
+; NONEON-NOSVE-NEXT: str d0, [sp, #56]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #49]
-; NONEON-NOSVE-NEXT: str d0, [sp, #56]
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #63]
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #62]
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #61]
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #60]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #59]
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #58]
+; NONEON-NOSVE-NEXT: mul w19, w19, w20
+; NONEON-NOSVE-NEXT: str d1, [sp, #88]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #50]
+; NONEON-NOSVE-NEXT: mul w7, w7, w21
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #51]
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #63]
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #62]
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #61]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #60]
-; NONEON-NOSVE-NEXT: str d1, [sp, #88]
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #52]
-; NONEON-NOSVE-NEXT: mul w20, w20, w21
+; NONEON-NOSVE-NEXT: mul w6, w6, w22
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #53]
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #54]
-; NONEON-NOSVE-NEXT: mul w19, w19, w23
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #55]
-; NONEON-NOSVE-NEXT: ldrb w0, [sp, #40]
-; NONEON-NOSVE-NEXT: mul w7, w7, w25
-; NONEON-NOSVE-NEXT: ldrb w2, [sp, #41]
-; NONEON-NOSVE-NEXT: ldrb w3, [sp, #42]
-; NONEON-NOSVE-NEXT: mul w6, w6, w26
-; NONEON-NOSVE-NEXT: lsr w20, w20, #8
-; NONEON-NOSVE-NEXT: ldrb w4, [sp, #43]
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #88]
+; NONEON-NOSVE-NEXT: mul w5, w5, w23
; NONEON-NOSVE-NEXT: lsr w19, w19, #8
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #89]
-; NONEON-NOSVE-NEXT: ldrb w18, [sp, #90]
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #55]
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #40]
+; NONEON-NOSVE-NEXT: mul w4, w4, w24
; NONEON-NOSVE-NEXT: lsr w7, w7, #8
-; NONEON-NOSVE-NEXT: ldrb w1, [sp, #91]
-; NONEON-NOSVE-NEXT: ldrb w5, [sp, #92]
-; NONEON-NOSVE-NEXT: mul w9, w9, w16
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #41]
+; NONEON-NOSVE-NEXT: ldrb w14, [sp, #88]
+; NONEON-NOSVE-NEXT: mul w1, w1, w25
+; NONEON-NOSVE-NEXT: ldrb w0, [sp, #89]
+; NONEON-NOSVE-NEXT: ldrb w2, [sp, #90]
; NONEON-NOSVE-NEXT: lsr w6, w6, #8
-; NONEON-NOSVE-NEXT: ldrb w22, [sp, #93]
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #94]
-; NONEON-NOSVE-NEXT: mul w11, w11, w1
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #95]
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #56]
-; NONEON-NOSVE-NEXT: mul w12, w12, w5
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #59]
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #58]
-; NONEON-NOSVE-NEXT: mul w15, w15, w24
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #57]
-; NONEON-NOSVE-NEXT: mul w0, w0, w23
-; NONEON-NOSVE-NEXT: lsr w11, w11, #8
-; NONEON-NOSVE-NEXT: mul w4, w4, w27
+; NONEON-NOSVE-NEXT: ldrb w3, [sp, #91]
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #92]
+; NONEON-NOSVE-NEXT: mul w8, w8, w14
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #93]
+; NONEON-NOSVE-NEXT: ldrb w22, [sp, #94]
+; NONEON-NOSVE-NEXT: mul w10, w10, w2
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #95]
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #57]
+; NONEON-NOSVE-NEXT: mul w12, w12, w20
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #56]
+; NONEON-NOSVE-NEXT: mul w15, w15, w22
+; NONEON-NOSVE-NEXT: lsr w5, w5, #8
+; NONEON-NOSVE-NEXT: mul w18, w18, w24
+; NONEON-NOSVE-NEXT: lsr w4, w4, #8
+; NONEON-NOSVE-NEXT: lsr w1, w1, #8
+; NONEON-NOSVE-NEXT: mul w17, w17, w25
; NONEON-NOSVE-NEXT: lsr w12, w12, #8
-; NONEON-NOSVE-NEXT: lsr w9, w9, #8
-; NONEON-NOSVE-NEXT: mul w3, w3, w25
+; NONEON-NOSVE-NEXT: lsr w10, w10, #8
+; NONEON-NOSVE-NEXT: mul w16, w16, w23
; NONEON-NOSVE-NEXT: lsr w15, w15, #8
-; NONEON-NOSVE-NEXT: strb w20, [sp, #79]
-; NONEON-NOSVE-NEXT: mul w2, w2, w26
-; NONEON-NOSVE-NEXT: lsr w0, w0, #8
-; NONEON-NOSVE-NEXT: strb w19, [sp, #78]
-; NONEON-NOSVE-NEXT: mul w17, w17, w21
-; NONEON-NOSVE-NEXT: lsr w4, w4, #8
-; NONEON-NOSVE-NEXT: strb w7, [sp, #77]
-; NONEON-NOSVE-NEXT: mul w13, w13, w22
-; NONEON-NOSVE-NEXT: lsr w3, w3, #8
-; NONEON-NOSVE-NEXT: strb w6, [sp, #76]
-; NONEON-NOSVE-NEXT: mul w10, w10, w18
-; NONEON-NOSVE-NEXT: lsr w2, w2, #8
-; NONEON-NOSVE-NEXT: strb w4, [sp, #75]
-; NONEON-NOSVE-NEXT: mul w8, w8, w14
+; NONEON-NOSVE-NEXT: lsr w8, w8, #8
+; NONEON-NOSVE-NEXT: mul w13, w13, w21
+; NONEON-NOSVE-NEXT: lsr w18, w18, #8
+; NONEON-NOSVE-NEXT: strb w19, [sp, #79]
+; NONEON-NOSVE-NEXT: mul w11, w11, w3
; NONEON-NOSVE-NEXT: lsr w17, w17, #8
-; NONEON-NOSVE-NEXT: strb w3, [sp, #74]
+; NONEON-NOSVE-NEXT: strb w7, [sp, #78]
+; NONEON-NOSVE-NEXT: mul w9, w9, w0
+; NONEON-NOSVE-NEXT: lsr w16, w16, #8
+; NONEON-NOSVE-NEXT: strb w6, [sp, #77]
; NONEON-NOSVE-NEXT: lsr w13, w13, #8
-; NONEON-NOSVE-NEXT: strb w2, [sp, #73]
-; NONEON-NOSVE-NEXT: ldr x27, [sp, #80] // 8-byte Reload
-; NONEON-NOSVE-NEXT: lsr w10, w10, #8
-; NONEON-NOSVE-NEXT: strb w0, [sp, #72]
-; NONEON-NOSVE-NEXT: lsr w8, w8, #8
-; NONEON-NOSVE-NEXT: strb w17, [sp, #71]
+; NONEON-NOSVE-NEXT: strb w5, [sp, #76]
+; NONEON-NOSVE-NEXT: ldr x25, [sp, #80] // 8-byte Reload
+; NONEON-NOSVE-NEXT: lsr w11, w11, #8
+; NONEON-NOSVE-NEXT: strb w4, [sp, #75]
+; NONEON-NOSVE-NEXT: lsr w9, w9, #8
+; NONEON-NOSVE-NEXT: strb w1, [sp, #74]
+; NONEON-NOSVE-NEXT: strb w18, [sp, #73]
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #128] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w17, [sp, #72]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #112] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w16, [sp, #71]
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #96] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w15, [sp, #70]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #144] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w13, [sp, #69]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #128] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w12, [sp, #68]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #112] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w11, [sp, #67]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #96] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w10, [sp, #66]
; NONEON-NOSVE-NEXT: strb w9, [sp, #65]
; NONEON-NOSVE-NEXT: strb w8, [sp, #64]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #64]
-; NONEON-NOSVE-NEXT: add sp, sp, #160
+; NONEON-NOSVE-NEXT: add sp, sp, #144
; NONEON-NOSVE-NEXT: ret
%1 = zext <16 x i8> %op1 to <16 x i16>
%2 = zext <16 x i8> %op2 to <16 x i16>
@@ -1861,13 +1849,12 @@ define void @umulh_v16i16(ptr %a, ptr %b) {
;
; NONEON-NOSVE-LABEL: umulh_v16i16:
; NONEON-NOSVE: // %bb.0:
-; NONEON-NOSVE-NEXT: sub sp, sp, #240
-; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #160] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #176] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #192] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #208] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #224] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 240
+; NONEON-NOSVE-NEXT: sub sp, sp, #224
+; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #160] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #176] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #192] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #208] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 224
; NONEON-NOSVE-NEXT: .cfi_offset w19, -8
; NONEON-NOSVE-NEXT: .cfi_offset w20, -16
; NONEON-NOSVE-NEXT: .cfi_offset w21, -24
@@ -1876,8 +1863,6 @@ define void @umulh_v16i16(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: .cfi_offset w24, -48
; NONEON-NOSVE-NEXT: .cfi_offset w25, -56
; NONEON-NOSVE-NEXT: .cfi_offset w26, -64
-; NONEON-NOSVE-NEXT: .cfi_offset w27, -72
-; NONEON-NOSVE-NEXT: .cfi_offset w28, -80
; NONEON-NOSVE-NEXT: ldp q0, q1, [x0]
; NONEON-NOSVE-NEXT: ldp q3, q2, [x1]
; NONEON-NOSVE-NEXT: str q0, [sp]
@@ -1895,91 +1880,90 @@ define void @umulh_v16i16(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: ldrh w13, [sp, #50]
; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #96]
; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrh w7, [sp, #96]
-; NONEON-NOSVE-NEXT: ldrh w19, [sp, #98]
-; NONEON-NOSVE-NEXT: ldrh w20, [sp, #100]
-; NONEON-NOSVE-NEXT: ldrh w21, [sp, #102]
+; NONEON-NOSVE-NEXT: ldrh w1, [sp, #108]
+; NONEON-NOSVE-NEXT: ldrh w5, [sp, #110]
+; NONEON-NOSVE-NEXT: ldrh w6, [sp, #96]
+; NONEON-NOSVE-NEXT: ldrh w7, [sp, #98]
+; NONEON-NOSVE-NEXT: ldrh w19, [sp, #100]
+; NONEON-NOSVE-NEXT: ldrh w20, [sp, #102]
+; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
; NONEON-NOSVE-NEXT: ldrh w14, [sp, #52]
; NONEON-NOSVE-NEXT: ldrh w16, [sp, #54]
-; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #80]
-; NONEON-NOSVE-NEXT: ldrh w18, [sp, #104]
-; NONEON-NOSVE-NEXT: ldrh w2, [sp, #106]
-; NONEON-NOSVE-NEXT: ldrh w4, [sp, #108]
-; NONEON-NOSVE-NEXT: ldrh w5, [sp, #110]
+; NONEON-NOSVE-NEXT: ldrh w17, [sp, #104]
+; NONEON-NOSVE-NEXT: ldrh w18, [sp, #106]
; NONEON-NOSVE-NEXT: ldrh w15, [sp, #88]
-; NONEON-NOSVE-NEXT: ldrh w17, [sp, #90]
-; NONEON-NOSVE-NEXT: ldrh w1, [sp, #92]
-; NONEON-NOSVE-NEXT: ldrh w3, [sp, #94]
+; NONEON-NOSVE-NEXT: ldrh w2, [sp, #90]
+; NONEON-NOSVE-NEXT: ldrh w3, [sp, #92]
+; NONEON-NOSVE-NEXT: ldrh w4, [sp, #94]
; NONEON-NOSVE-NEXT: mul w8, w8, w15
-; NONEON-NOSVE-NEXT: ldrh w6, [sp, #80]
-; NONEON-NOSVE-NEXT: ldrh w23, [sp, #82]
-; NONEON-NOSVE-NEXT: mul w11, w11, w3
-; NONEON-NOSVE-NEXT: ldrh w25, [sp, #84]
-; NONEON-NOSVE-NEXT: mul w13, w13, w23
; NONEON-NOSVE-NEXT: ldp d1, d0, [sp, #64]
-; NONEON-NOSVE-NEXT: mul w14, w14, w25
+; NONEON-NOSVE-NEXT: mul w11, w11, w4
+; NONEON-NOSVE-NEXT: mul w10, w10, w3
+; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #112]
+; NONEON-NOSVE-NEXT: mul w9, w9, w2
; NONEON-NOSVE-NEXT: lsr w8, w8, #16
-; NONEON-NOSVE-NEXT: mul w12, w12, w6
+; NONEON-NOSVE-NEXT: ldrh w21, [sp, #118]
+; NONEON-NOSVE-NEXT: ldrh w22, [sp, #116]
; NONEON-NOSVE-NEXT: lsr w11, w11, #16
-; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #112]
-; NONEON-NOSVE-NEXT: mul w10, w10, w1
-; NONEON-NOSVE-NEXT: lsr w13, w13, #16
-; NONEON-NOSVE-NEXT: ldrh w22, [sp, #118]
-; NONEON-NOSVE-NEXT: ldrh w24, [sp, #116]
-; NONEON-NOSVE-NEXT: ldrh w26, [sp, #114]
-; NONEON-NOSVE-NEXT: ldrh w27, [sp, #112]
-; NONEON-NOSVE-NEXT: ldrh w28, [sp, #126]
-; NONEON-NOSVE-NEXT: mul w9, w9, w17
-; NONEON-NOSVE-NEXT: mul w21, w21, w22
-; NONEON-NOSVE-NEXT: ldrh w22, [sp, #86]
-; NONEON-NOSVE-NEXT: lsr w14, w14, #16
-; NONEON-NOSVE-NEXT: mul w20, w20, w24
-; NONEON-NOSVE-NEXT: ldrh w24, [sp, #120]
-; NONEON-NOSVE-NEXT: lsr w12, w12, #16
-; NONEON-NOSVE-NEXT: mul w19, w19, w26
-; NONEON-NOSVE-NEXT: ldrh w26, [sp, #124]
+; NONEON-NOSVE-NEXT: ldrh w23, [sp, #114]
+; NONEON-NOSVE-NEXT: ldrh w24, [sp, #112]
; NONEON-NOSVE-NEXT: lsr w10, w10, #16
-; NONEON-NOSVE-NEXT: mul w7, w7, w27
-; NONEON-NOSVE-NEXT: ldrh w27, [sp, #122]
-; NONEON-NOSVE-NEXT: lsr w21, w21, #16
-; NONEON-NOSVE-NEXT: mul w5, w5, w28
-; NONEON-NOSVE-NEXT: lsr w20, w20, #16
+; NONEON-NOSVE-NEXT: ldrh w25, [sp, #126]
+; NONEON-NOSVE-NEXT: ldrh w26, [sp, #124]
+; NONEON-NOSVE-NEXT: mul w20, w20, w21
+; NONEON-NOSVE-NEXT: ldrh w21, [sp, #80]
+; NONEON-NOSVE-NEXT: mul w19, w19, w22
+; NONEON-NOSVE-NEXT: ldrh w22, [sp, #82]
+; NONEON-NOSVE-NEXT: mul w7, w7, w23
+; NONEON-NOSVE-NEXT: ldrh w23, [sp, #84]
; NONEON-NOSVE-NEXT: lsr w9, w9, #16
-; NONEON-NOSVE-NEXT: mul w4, w4, w26
+; NONEON-NOSVE-NEXT: mul w6, w6, w24
+; NONEON-NOSVE-NEXT: ldrh w24, [sp, #86]
+; NONEON-NOSVE-NEXT: lsr w20, w20, #16
+; NONEON-NOSVE-NEXT: mul w5, w5, w25
+; NONEON-NOSVE-NEXT: ldrh w25, [sp, #122]
; NONEON-NOSVE-NEXT: lsr w19, w19, #16
-; NONEON-NOSVE-NEXT: strh w21, [sp, #158]
-; NONEON-NOSVE-NEXT: mul w2, w2, w27
+; NONEON-NOSVE-NEXT: mul w1, w1, w26
+; NONEON-NOSVE-NEXT: ldrh w26, [sp, #120]
; NONEON-NOSVE-NEXT: lsr w7, w7, #16
-; NONEON-NOSVE-NEXT: strh w20, [sp, #156]
-; NONEON-NOSVE-NEXT: mul w18, w18, w24
+; NONEON-NOSVE-NEXT: mul w18, w18, w25
+; NONEON-NOSVE-NEXT: lsr w6, w6, #16
+; NONEON-NOSVE-NEXT: strh w20, [sp, #158]
+; NONEON-NOSVE-NEXT: mul w17, w17, w26
; NONEON-NOSVE-NEXT: lsr w5, w5, #16
-; NONEON-NOSVE-NEXT: strh w19, [sp, #154]
-; NONEON-NOSVE-NEXT: mul w16, w16, w22
-; NONEON-NOSVE-NEXT: lsr w4, w4, #16
-; NONEON-NOSVE-NEXT: strh w7, [sp, #152]
-; NONEON-NOSVE-NEXT: lsr w2, w2, #16
-; NONEON-NOSVE-NEXT: strh w5, [sp, #150]
+; NONEON-NOSVE-NEXT: strh w19, [sp, #156]
+; NONEON-NOSVE-NEXT: mul w16, w16, w24
+; NONEON-NOSVE-NEXT: lsr w1, w1, #16
+; NONEON-NOSVE-NEXT: strh w7, [sp, #154]
+; NONEON-NOSVE-NEXT: mul w14, w14, w23
; NONEON-NOSVE-NEXT: lsr w18, w18, #16
-; NONEON-NOSVE-NEXT: strh w4, [sp, #148]
+; NONEON-NOSVE-NEXT: strh w6, [sp, #152]
+; NONEON-NOSVE-NEXT: mul w13, w13, w22
+; NONEON-NOSVE-NEXT: lsr w17, w17, #16
+; NONEON-NOSVE-NEXT: strh w5, [sp, #150]
+; NONEON-NOSVE-NEXT: mul w12, w12, w21
; NONEON-NOSVE-NEXT: lsr w16, w16, #16
-; NONEON-NOSVE-NEXT: strh w2, [sp, #146]
-; NONEON-NOSVE-NEXT: strh w18, [sp, #144]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #224] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strh w1, [sp, #148]
+; NONEON-NOSVE-NEXT: lsr w14, w14, #16
+; NONEON-NOSVE-NEXT: strh w18, [sp, #146]
+; NONEON-NOSVE-NEXT: lsr w13, w13, #16
+; NONEON-NOSVE-NEXT: strh w17, [sp, #144]
+; NONEON-NOSVE-NEXT: lsr w12, w12, #16
; NONEON-NOSVE-NEXT: strh w16, [sp, #142]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #208] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w14, [sp, #140]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #192] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #208] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w13, [sp, #138]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #176] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #192] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w12, [sp, #136]
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #160] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #176] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w11, [sp, #134]
+; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #160] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w10, [sp, #132]
; NONEON-NOSVE-NEXT: strh w9, [sp, #130]
; NONEON-NOSVE-NEXT: strh w8, [sp, #128]
; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #128]
; NONEON-NOSVE-NEXT: stp q0, q1, [x0]
-; NONEON-NOSVE-NEXT: add sp, sp, #240
+; NONEON-NOSVE-NEXT: add sp, sp, #224
; NONEON-NOSVE-NEXT: ret
%op1 = load <16 x i16>, ptr %a
%op2 = load <16 x i16>, ptr %b
diff --git a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-vselect.ll b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-vselect.ll
index ff78732434dc8..9f4737a5d3408 100644
--- a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-vselect.ll
+++ b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-vselect.ll
@@ -329,151 +329,151 @@ define void @select_v32i8(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: str w8, [sp, #12] // 4-byte Spill
; NONEON-NOSVE-NEXT: csel w8, w13, w12, eq
; NONEON-NOSVE-NEXT: cmp w16, w14
-; NONEON-NOSVE-NEXT: ldrb w13, [sp, #38]
-; NONEON-NOSVE-NEXT: ldrb w2, [sp, #22]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #4] // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: csel w8, w16, w14, eq
; NONEON-NOSVE-NEXT: cmp w1, w18
-; NONEON-NOSVE-NEXT: ldrb w14, [sp, #39]
-; NONEON-NOSVE-NEXT: ldrb w16, [sp, #23]
+; NONEON-NOSVE-NEXT: ldrb w13, [sp, #38]
+; NONEON-NOSVE-NEXT: ldrb w14, [sp, #22]
; NONEON-NOSVE-NEXT: csel w12, w1, w18, eq
-; NONEON-NOSVE-NEXT: cmp w2, w13
-; NONEON-NOSVE-NEXT: ldrb w18, [sp, #40]
-; NONEON-NOSVE-NEXT: ldrb w1, [sp, #24]
-; NONEON-NOSVE-NEXT: csel w13, w2, w13, eq
-; NONEON-NOSVE-NEXT: cmp w16, w14
-; NONEON-NOSVE-NEXT: ldrb w2, [sp, #41]
-; NONEON-NOSVE-NEXT: ldrb w5, [sp, #25]
-; NONEON-NOSVE-NEXT: csel w14, w16, w14, eq
-; NONEON-NOSVE-NEXT: cmp w1, w18
-; NONEON-NOSVE-NEXT: ldrb w6, [sp, #26]
-; NONEON-NOSVE-NEXT: csel w16, w1, w18, eq
+; NONEON-NOSVE-NEXT: ldrb w16, [sp, #39]
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #23]
+; NONEON-NOSVE-NEXT: ldrb w1, [sp, #40]
+; NONEON-NOSVE-NEXT: cmp w14, w13
+; NONEON-NOSVE-NEXT: ldrb w2, [sp, #24]
+; NONEON-NOSVE-NEXT: ldrb w4, [sp, #25]
+; NONEON-NOSVE-NEXT: csel w13, w14, w13, eq
+; NONEON-NOSVE-NEXT: cmp w18, w16
+; NONEON-NOSVE-NEXT: ldrb w6, [sp, #27]
+; NONEON-NOSVE-NEXT: csel w14, w18, w16, eq
+; NONEON-NOSVE-NEXT: ldrb w18, [sp, #41]
+; NONEON-NOSVE-NEXT: cmp w2, w1
+; NONEON-NOSVE-NEXT: csel w16, w2, w1, eq
; NONEON-NOSVE-NEXT: ldrb w1, [sp, #42]
-; NONEON-NOSVE-NEXT: cmp w5, w2
-; NONEON-NOSVE-NEXT: csel w18, w5, w2, eq
-; NONEON-NOSVE-NEXT: ldrb w2, [sp, #43]
-; NONEON-NOSVE-NEXT: ldrb w5, [sp, #27]
-; NONEON-NOSVE-NEXT: cmp w6, w1
-; NONEON-NOSVE-NEXT: ldrb w19, [sp, #28]
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #45]
-; NONEON-NOSVE-NEXT: csel w1, w6, w1, eq
-; NONEON-NOSVE-NEXT: ldrb w6, [sp, #44]
-; NONEON-NOSVE-NEXT: cmp w5, w2
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #29]
+; NONEON-NOSVE-NEXT: ldrb w2, [sp, #26]
+; NONEON-NOSVE-NEXT: cmp w4, w18
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #44]
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #28]
+; NONEON-NOSVE-NEXT: csel w18, w4, w18, eq
+; NONEON-NOSVE-NEXT: ldrb w4, [sp, #43]
+; NONEON-NOSVE-NEXT: cmp w2, w1
; NONEON-NOSVE-NEXT: str w8, [sp] // 4-byte Spill
-; NONEON-NOSVE-NEXT: csel w2, w5, w2, eq
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #46]
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]
-; NONEON-NOSVE-NEXT: cmp w19, w6
+; NONEON-NOSVE-NEXT: csel w1, w2, w1, eq
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #45]
+; NONEON-NOSVE-NEXT: cmp w6, w4
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]
+; NONEON-NOSVE-NEXT: ldrb w7, [sp, #46]
+; NONEON-NOSVE-NEXT: csel w2, w6, w4, eq
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #30]
+; NONEON-NOSVE-NEXT: cmp w29, w28
; NONEON-NOSVE-NEXT: stp q2, q3, [sp, #48]
-; NONEON-NOSVE-NEXT: ldrb w21, [sp, #47]
-; NONEON-NOSVE-NEXT: ldrb w10, [sp, #31]
-; NONEON-NOSVE-NEXT: csel w5, w19, w6, eq
-; NONEON-NOSVE-NEXT: cmp w30, w29
+; NONEON-NOSVE-NEXT: ldrb w20, [sp, #47]
+; NONEON-NOSVE-NEXT: csel w4, w29, w28, eq
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #31]
+; NONEON-NOSVE-NEXT: cmp w8, w30
; NONEON-NOSVE-NEXT: ldrb w22, [sp, #64]
-; NONEON-NOSVE-NEXT: ldrb w11, [sp, #48]
-; NONEON-NOSVE-NEXT: csel w6, w30, w29, eq
-; NONEON-NOSVE-NEXT: cmp w8, w9
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #65]
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #49]
-; NONEON-NOSVE-NEXT: csel w19, w8, w9, eq
-; NONEON-NOSVE-NEXT: cmp w10, w21
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #66]
-; NONEON-NOSVE-NEXT: ldrb w8, [sp, #50]
-; NONEON-NOSVE-NEXT: csel w21, w10, w21, eq
-; NONEON-NOSVE-NEXT: cmp w11, w22
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #67]
-; NONEON-NOSVE-NEXT: ldrb w9, [sp, #51]
-; NONEON-NOSVE-NEXT: csel w22, w11, w22, eq
-; NONEON-NOSVE-NEXT: cmp w29, w28
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #68]
-; NONEON-NOSVE-NEXT: ldrb w10, [sp, #52]
-; NONEON-NOSVE-NEXT: csel w11, w29, w28, eq
-; NONEON-NOSVE-NEXT: cmp w8, w27
-; NONEON-NOSVE-NEXT: ldrb w24, [sp, #69]
+; NONEON-NOSVE-NEXT: csel w6, w8, w30, eq
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #48]
+; NONEON-NOSVE-NEXT: cmp w9, w7
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #65]
+; NONEON-NOSVE-NEXT: csel w7, w9, w7, eq
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #49]
+; NONEON-NOSVE-NEXT: cmp w28, w20
+; NONEON-NOSVE-NEXT: ldrb w26, [sp, #66]
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #67]
+; NONEON-NOSVE-NEXT: csel w20, w28, w20, eq
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #50]
+; NONEON-NOSVE-NEXT: cmp w8, w22
+; NONEON-NOSVE-NEXT: csel w22, w8, w22, eq
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #51]
+; NONEON-NOSVE-NEXT: cmp w9, w27
+; NONEON-NOSVE-NEXT: ldrb w24, [sp, #68]
+; NONEON-NOSVE-NEXT: csel w11, w9, w27, eq
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #52]
+; NONEON-NOSVE-NEXT: cmp w28, w26
+; NONEON-NOSVE-NEXT: ldrb w23, [sp, #69]
+; NONEON-NOSVE-NEXT: ldrb w21, [sp, #70]
+; NONEON-NOSVE-NEXT: csel w26, w28, w26, eq
; NONEON-NOSVE-NEXT: ldrb w28, [sp, #53]
-; NONEON-NOSVE-NEXT: csel w8, w8, w27, eq
-; NONEON-NOSVE-NEXT: cmp w9, w26
-; NONEON-NOSVE-NEXT: ldrb w23, [sp, #70]
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #54]
-; NONEON-NOSVE-NEXT: csel w9, w9, w26, eq
-; NONEON-NOSVE-NEXT: cmp w10, w25
-; NONEON-NOSVE-NEXT: ldrb w20, [sp, #71]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #55]
-; NONEON-NOSVE-NEXT: csel w10, w10, w25, eq
-; NONEON-NOSVE-NEXT: cmp w28, w24
-; NONEON-NOSVE-NEXT: ldrb w7, [sp, #72]
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #56]
-; NONEON-NOSVE-NEXT: csel w24, w28, w24, eq
-; NONEON-NOSVE-NEXT: cmp w27, w23
-; NONEON-NOSVE-NEXT: ldrb w4, [sp, #73]
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #57]
-; NONEON-NOSVE-NEXT: csel w23, w27, w23, eq
-; NONEON-NOSVE-NEXT: cmp w26, w20
-; NONEON-NOSVE-NEXT: ldrb w3, [sp, #74]
+; NONEON-NOSVE-NEXT: cmp w8, w25
+; NONEON-NOSVE-NEXT: csel w10, w8, w25, eq
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #54]
+; NONEON-NOSVE-NEXT: cmp w27, w24
+; NONEON-NOSVE-NEXT: ldrb w19, [sp, #71]
+; NONEON-NOSVE-NEXT: csel w24, w27, w24, eq
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #55]
+; NONEON-NOSVE-NEXT: cmp w28, w23
+; NONEON-NOSVE-NEXT: ldrb w5, [sp, #72]
+; NONEON-NOSVE-NEXT: ldrb w3, [sp, #73]
+; NONEON-NOSVE-NEXT: csel w23, w28, w23, eq
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #56]
+; NONEON-NOSVE-NEXT: cmp w25, w21
+; NONEON-NOSVE-NEXT: csel w21, w25, w21, eq
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #57]
+; NONEON-NOSVE-NEXT: cmp w27, w19
+; NONEON-NOSVE-NEXT: ldrb w17, [sp, #74]
+; NONEON-NOSVE-NEXT: csel w19, w27, w19, eq
; NONEON-NOSVE-NEXT: ldrb w27, [sp, #58]
-; NONEON-NOSVE-NEXT: csel w20, w26, w20, eq
-; NONEON-NOSVE-NEXT: cmp w25, w7
-; NONEON-NOSVE-NEXT: ldrb w17, [sp, #75]
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #59]
-; NONEON-NOSVE-NEXT: csel w7, w25, w7, eq
-; NONEON-NOSVE-NEXT: cmp w28, w4
-; NONEON-NOSVE-NEXT: ldrb w15, [sp, #76]
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #60]
-; NONEON-NOSVE-NEXT: csel w4, w28, w4, eq
-; NONEON-NOSVE-NEXT: cmp w27, w3
-; NONEON-NOSVE-NEXT: csel w3, w27, w3, eq
-; NONEON-NOSVE-NEXT: cmp w26, w17
+; NONEON-NOSVE-NEXT: cmp w28, w5
+; NONEON-NOSVE-NEXT: ldrb w15, [sp, #75]
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #61]
+; NONEON-NOSVE-NEXT: csel w5, w28, w5, eq
+; NONEON-NOSVE-NEXT: cmp w25, w3
+; NONEON-NOSVE-NEXT: ldrb w28, [sp, #59]
+; NONEON-NOSVE-NEXT: csel w3, w25, w3, eq
+; NONEON-NOSVE-NEXT: cmp w27, w17
+; NONEON-NOSVE-NEXT: ldrb w25, [sp, #76]
+; NONEON-NOSVE-NEXT: csel w17, w27, w17, eq
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #60]
+; NONEON-NOSVE-NEXT: cmp w28, w15
+; NONEON-NOSVE-NEXT: csel w15, w28, w15, eq
; NONEON-NOSVE-NEXT: ldrb w28, [sp, #77]
-; NONEON-NOSVE-NEXT: ldrb w27, [sp, #61]
-; NONEON-NOSVE-NEXT: csel w17, w26, w17, eq
-; NONEON-NOSVE-NEXT: cmp w25, w15
-; NONEON-NOSVE-NEXT: ldrb w26, [sp, #78]
-; NONEON-NOSVE-NEXT: csel w15, w25, w15, eq
-; NONEON-NOSVE-NEXT: ldrb w25, [sp, #62]
-; NONEON-NOSVE-NEXT: cmp w27, w28
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #79]
-; NONEON-NOSVE-NEXT: ldrb w30, [sp, #63]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #99]
-; NONEON-NOSVE-NEXT: csel w27, w27, w28, eq
-; NONEON-NOSVE-NEXT: cmp w25, w26
-; NONEON-NOSVE-NEXT: strb w8, [sp, #98]
-; NONEON-NOSVE-NEXT: csel w25, w25, w26, eq
-; NONEON-NOSVE-NEXT: cmp w30, w29
-; NONEON-NOSVE-NEXT: ldp w9, w8, [sp] // 8-byte Folded Reload
-; NONEON-NOSVE-NEXT: csel w26, w30, w29, eq
-; NONEON-NOSVE-NEXT: ldrb w28, [sp, #32]
-; NONEON-NOSVE-NEXT: ldrb w29, [sp, #16]
-; NONEON-NOSVE-NEXT: strb w26, [sp, #111]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #84]
+; NONEON-NOSVE-NEXT: ldrb w30, [sp, #62]
+; NONEON-NOSVE-NEXT: cmp w27, w25
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #79]
+; NONEON-NOSVE-NEXT: ldrb w8, [sp, #63]
+; NONEON-NOSVE-NEXT: csel w25, w27, w25, eq
+; NONEON-NOSVE-NEXT: ldrb w27, [sp, #78]
; NONEON-NOSVE-NEXT: cmp w29, w28
+; NONEON-NOSVE-NEXT: csel w28, w29, w28, eq
+; NONEON-NOSVE-NEXT: strb w10, [sp, #99]
+; NONEON-NOSVE-NEXT: ldrb w29, [sp, #16]
+; NONEON-NOSVE-NEXT: cmp w30, w27
+; NONEON-NOSVE-NEXT: strb w28, [sp, #109]
+; NONEON-NOSVE-NEXT: csel w27, w30, w27, eq
+; NONEON-NOSVE-NEXT: cmp w8, w9
+; NONEON-NOSVE-NEXT: strb w25, [sp, #108]
+; NONEON-NOSVE-NEXT: csel w8, w8, w9, eq
+; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]
+; NONEON-NOSVE-NEXT: strb w27, [sp, #110]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #111]
+; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #128] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp w10, w8, [sp] // 8-byte Folded Reload
+; NONEON-NOSVE-NEXT: cmp w29, w9
+; NONEON-NOSVE-NEXT: strb w15, [sp, #107]
+; NONEON-NOSVE-NEXT: strb w17, [sp, #106]
+; NONEON-NOSVE-NEXT: strb w10, [sp, #84]
; NONEON-NOSVE-NEXT: strb w8, [sp, #83]
-; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #8] // 8-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w25, [sp, #110]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #144] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w27, [sp, #109]
+; NONEON-NOSVE-NEXT: ldp w10, w8, [sp, #8] // 8-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w3, [sp, #105]
+; NONEON-NOSVE-NEXT: strb w5, [sp, #104]
; NONEON-NOSVE-NEXT: strb w8, [sp, #81]
-; NONEON-NOSVE-NEXT: csel w8, w29, w28, eq
-; NONEON-NOSVE-NEXT: strb w15, [sp, #108]
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #128] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w17, [sp, #107]
+; NONEON-NOSVE-NEXT: csel w8, w29, w9, eq
+; NONEON-NOSVE-NEXT: strb w19, [sp, #103]
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #112] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w3, [sp, #106]
-; NONEON-NOSVE-NEXT: strb w4, [sp, #105]
-; NONEON-NOSVE-NEXT: strb w7, [sp, #104]
-; NONEON-NOSVE-NEXT: strb w20, [sp, #103]
-; NONEON-NOSVE-NEXT: strb w23, [sp, #102]
-; NONEON-NOSVE-NEXT: strb w24, [sp, #101]
+; NONEON-NOSVE-NEXT: strb w21, [sp, #102]
+; NONEON-NOSVE-NEXT: strb w23, [sp, #101]
+; NONEON-NOSVE-NEXT: strb w24, [sp, #100]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #160] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w10, [sp, #100]
+; NONEON-NOSVE-NEXT: strb w26, [sp, #98]
+; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #144] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w11, [sp, #97]
; NONEON-NOSVE-NEXT: strb w22, [sp, #96]
-; NONEON-NOSVE-NEXT: strb w21, [sp, #95]
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #176] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w19, [sp, #94]
+; NONEON-NOSVE-NEXT: strb w20, [sp, #95]
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #192] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w7, [sp, #94]
; NONEON-NOSVE-NEXT: strb w6, [sp, #93]
-; NONEON-NOSVE-NEXT: strb w5, [sp, #92]
+; NONEON-NOSVE-NEXT: strb w4, [sp, #92]
; NONEON-NOSVE-NEXT: strb w2, [sp, #91]
; NONEON-NOSVE-NEXT: strb w1, [sp, #90]
; NONEON-NOSVE-NEXT: strb w18, [sp, #89]
@@ -481,7 +481,7 @@ define void @select_v32i8(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: strb w14, [sp, #87]
; NONEON-NOSVE-NEXT: strb w13, [sp, #86]
; NONEON-NOSVE-NEXT: strb w12, [sp, #85]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #82]
+; NONEON-NOSVE-NEXT: strb w10, [sp, #82]
; NONEON-NOSVE-NEXT: strb w8, [sp, #80]
; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #80]
; NONEON-NOSVE-NEXT: stp q0, q1, [x0]
@@ -680,13 +680,10 @@ define void @select_v16i16(ptr %a, ptr %b) {
;
; NONEON-NOSVE-LABEL: select_v16i16:
; NONEON-NOSVE: // %bb.0:
-; NONEON-NOSVE-NEXT: sub sp, sp, #112
-; NONEON-NOSVE-NEXT: str x19, [sp, #96] // 8-byte Spill
-; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 112
-; NONEON-NOSVE-NEXT: .cfi_offset w19, -16
; NONEON-NOSVE-NEXT: ldp q0, q3, [x1]
; NONEON-NOSVE-NEXT: ldp q1, q2, [x0]
-; NONEON-NOSVE-NEXT: stp q1, q0, [sp]
+; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-96]!
+; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]
; NONEON-NOSVE-NEXT: ldrh w12, [sp, #20]
@@ -724,35 +721,34 @@ define void @select_v16i16(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: ldrh w4, [sp, #36]
; NONEON-NOSVE-NEXT: cmp w5, w1
; NONEON-NOSVE-NEXT: ldrh w13, [sp, #54]
-; NONEON-NOSVE-NEXT: ldrh w19, [sp, #38]
; NONEON-NOSVE-NEXT: csel w1, w5, w1, eq
+; NONEON-NOSVE-NEXT: ldrh w5, [sp, #38]
; NONEON-NOSVE-NEXT: cmp w7, w6
; NONEON-NOSVE-NEXT: ldrh w18, [sp, #56]
-; NONEON-NOSVE-NEXT: ldrh w5, [sp, #40]
+; NONEON-NOSVE-NEXT: ldrh w15, [sp, #58]
; NONEON-NOSVE-NEXT: csel w6, w7, w6, eq
+; NONEON-NOSVE-NEXT: ldrh w7, [sp, #40]
; NONEON-NOSVE-NEXT: cmp w4, w2
-; NONEON-NOSVE-NEXT: ldrh w15, [sp, #58]
-; NONEON-NOSVE-NEXT: ldrh w7, [sp, #42]
; NONEON-NOSVE-NEXT: csel w2, w4, w2, eq
-; NONEON-NOSVE-NEXT: cmp w19, w13
+; NONEON-NOSVE-NEXT: ldrh w4, [sp, #42]
+; NONEON-NOSVE-NEXT: cmp w5, w13
; NONEON-NOSVE-NEXT: ldrh w11, [sp, #60]
-; NONEON-NOSVE-NEXT: ldrh w4, [sp, #44]
-; NONEON-NOSVE-NEXT: csel w13, w19, w13, eq
-; NONEON-NOSVE-NEXT: cmp w5, w18
+; NONEON-NOSVE-NEXT: csel w13, w5, w13, eq
+; NONEON-NOSVE-NEXT: ldrh w5, [sp, #44]
+; NONEON-NOSVE-NEXT: cmp w7, w18
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #62]
-; NONEON-NOSVE-NEXT: ldrh w19, [sp, #46]
-; NONEON-NOSVE-NEXT: csel w18, w5, w18, eq
-; NONEON-NOSVE-NEXT: cmp w7, w15
-; NONEON-NOSVE-NEXT: ldrh w5, [sp]
-; NONEON-NOSVE-NEXT: csel w15, w7, w15, eq
-; NONEON-NOSVE-NEXT: cmp w4, w11
; NONEON-NOSVE-NEXT: strh w8, [sp, #66]
-; NONEON-NOSVE-NEXT: csel w11, w4, w11, eq
+; NONEON-NOSVE-NEXT: csel w18, w7, w18, eq
+; NONEON-NOSVE-NEXT: cmp w4, w15
+; NONEON-NOSVE-NEXT: ldrh w7, [sp, #46]
+; NONEON-NOSVE-NEXT: csel w15, w4, w15, eq
+; NONEON-NOSVE-NEXT: cmp w5, w11
; NONEON-NOSVE-NEXT: ldrh w4, [sp, #16]
-; NONEON-NOSVE-NEXT: cmp w19, w10
-; NONEON-NOSVE-NEXT: csel w10, w19, w10, eq
+; NONEON-NOSVE-NEXT: csel w11, w5, w11, eq
+; NONEON-NOSVE-NEXT: ldrh w5, [sp]
+; NONEON-NOSVE-NEXT: cmp w7, w10
+; NONEON-NOSVE-NEXT: csel w10, w7, w10, eq
; NONEON-NOSVE-NEXT: strh w11, [sp, #92]
-; NONEON-NOSVE-NEXT: ldr x19, [sp, #96] // 8-byte Reload
; NONEON-NOSVE-NEXT: cmp w5, w4
; NONEON-NOSVE-NEXT: strh w10, [sp, #94]
; NONEON-NOSVE-NEXT: csel w8, w5, w4, eq
@@ -771,7 +767,7 @@ define void @select_v16i16(ptr %a, ptr %b) {
; NONEON-NOSVE-NEXT: strh w8, [sp, #64]
; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #64]
; NONEON-NOSVE-NEXT: stp q0, q1, [x0]
-; NONEON-NOSVE-NEXT: add sp, sp, #112
+; NONEON-NOSVE-NEXT: add sp, sp, #96
; NONEON-NOSVE-NEXT: ret
%op1 = load <16 x i16>, ptr %a
%op2 = load <16 x i16>, ptr %b
diff --git a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-trunc.ll b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-trunc.ll
index e3f35f86ec92a..6cc9175a1f478 100644
--- a/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-trunc.ll
+++ b/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-trunc.ll
@@ -93,107 +93,107 @@ define void @trunc_v32i16_v32i8(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #160] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: stp q3, q1, [sp, #16]
; NONEON-NOSVE-NEXT: stp q2, q0, [sp, #48]
-; NONEON-NOSVE-NEXT: ldrh w25, [sp, #28]
-; NONEON-NOSVE-NEXT: ldrh w26, [sp, #30]
+; NONEON-NOSVE-NEXT: ldrh w25, [sp, #30]
+; NONEON-NOSVE-NEXT: ldrh w24, [sp, #28]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #64]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #66]
+; NONEON-NOSVE-NEXT: ldrh w30, [sp, #54]
; NONEON-NOSVE-NEXT: ldrh w29, [sp, #52]
-; NONEON-NOSVE-NEXT: ldrh w27, [sp, #48]
-; NONEON-NOSVE-NEXT: ldrh w28, [sp, #50]
-; NONEON-NOSVE-NEXT: ldrh w23, [sp, #24]
+; NONEON-NOSVE-NEXT: ldrh w27, [sp, #50]
+; NONEON-NOSVE-NEXT: ldrh w26, [sp, #48]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldrh w8, [sp, #56]
-; NONEON-NOSVE-NEXT: ldrh w9, [sp, #54]
-; NONEON-NOSVE-NEXT: ldrh w24, [sp, #26]
+; NONEON-NOSVE-NEXT: ldrh w8, [sp, #58]
+; NONEON-NOSVE-NEXT: ldrh w9, [sp, #56]
+; NONEON-NOSVE-NEXT: ldrh w23, [sp, #26]
; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #176] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldrh w21, [sp, #20]
+; NONEON-NOSVE-NEXT: ldrh w22, [sp, #24]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: ldrh w22, [sp, #22]
+; NONEON-NOSVE-NEXT: ldrh w21, [sp, #22]
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #192] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: strb w8, [sp, #93]
+; NONEON-NOSVE-NEXT: add w8, w9, w9
+; NONEON-NOSVE-NEXT: ldrh w20, [sp, #20]
; NONEON-NOSVE-NEXT: strb w8, [sp, #92]
+; NONEON-NOSVE-NEXT: add w8, w30, w30
+; NONEON-NOSVE-NEXT: ldrh w19, [sp, #18]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #91]
; NONEON-NOSVE-NEXT: add w8, w29, w29
-; NONEON-NOSVE-NEXT: ldrh w4, [sp, #44]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #91]
-; NONEON-NOSVE-NEXT: add w9, w28, w28
-; NONEON-NOSVE-NEXT: ldrh w7, [sp, #46]
+; NONEON-NOSVE-NEXT: ldrh w7, [sp, #16]
; NONEON-NOSVE-NEXT: strb w8, [sp, #90]
; NONEON-NOSVE-NEXT: add w8, w27, w27
-; NONEON-NOSVE-NEXT: ldrh w2, [sp, #40]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #89]
-; NONEON-NOSVE-NEXT: add w9, w26, w26
-; NONEON-NOSVE-NEXT: ldrh w3, [sp, #42]
+; NONEON-NOSVE-NEXT: ldrh w6, [sp, #46]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #89]
+; NONEON-NOSVE-NEXT: add w8, w26, w26
+; NONEON-NOSVE-NEXT: ldrh w5, [sp, #44]
; NONEON-NOSVE-NEXT: strb w8, [sp, #88]
; NONEON-NOSVE-NEXT: add w8, w25, w25
-; NONEON-NOSVE-NEXT: ldrh w18, [sp, #36]
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #192] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldrh w19, [sp, #16]
-; NONEON-NOSVE-NEXT: ldrh w20, [sp, #18]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #87]
-; NONEON-NOSVE-NEXT: add w9, w24, w24
-; NONEON-NOSVE-NEXT: ldrh w0, [sp, #38]
+; NONEON-NOSVE-NEXT: ldrh w4, [sp, #42]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #87]
+; NONEON-NOSVE-NEXT: add w8, w24, w24
+; NONEON-NOSVE-NEXT: ldrh w3, [sp, #40]
; NONEON-NOSVE-NEXT: strb w8, [sp, #86]
; NONEON-NOSVE-NEXT: add w8, w23, w23
-; NONEON-NOSVE-NEXT: ldrh w12, [sp, #60]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #85]
-; NONEON-NOSVE-NEXT: add w9, w22, w22
-; NONEON-NOSVE-NEXT: ldrh w13, [sp, #62]
-; NONEON-NOSVE-NEXT: add w6, w12, w12
+; NONEON-NOSVE-NEXT: ldrh w2, [sp, #38]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #85]
+; NONEON-NOSVE-NEXT: add w8, w22, w22
+; NONEON-NOSVE-NEXT: ldrh w0, [sp, #36]
; NONEON-NOSVE-NEXT: strb w8, [sp, #84]
; NONEON-NOSVE-NEXT: add w8, w21, w21
-; NONEON-NOSVE-NEXT: add w5, w13, w13
-; NONEON-NOSVE-NEXT: strb w9, [sp, #83]
-; NONEON-NOSVE-NEXT: add w9, w20, w20
+; NONEON-NOSVE-NEXT: ldrh w17, [sp, #34]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #83]
+; NONEON-NOSVE-NEXT: add w8, w20, w20
+; NONEON-NOSVE-NEXT: ldrh w16, [sp, #32]
; NONEON-NOSVE-NEXT: strb w8, [sp, #82]
; NONEON-NOSVE-NEXT: add w8, w19, w19
-; NONEON-NOSVE-NEXT: ldrh w16, [sp, #32]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #81]
-; NONEON-NOSVE-NEXT: add w9, w7, w7
-; NONEON-NOSVE-NEXT: ldrh w17, [sp, #34]
+; NONEON-NOSVE-NEXT: ldrh w13, [sp, #62]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #81]
+; NONEON-NOSVE-NEXT: add w8, w7, w7
+; NONEON-NOSVE-NEXT: ldrh w15, [sp, #78]
+; NONEON-NOSVE-NEXT: add w18, w13, w13
; NONEON-NOSVE-NEXT: strb w8, [sp, #80]
-; NONEON-NOSVE-NEXT: add w8, w4, w4
+; NONEON-NOSVE-NEXT: add w8, w6, w6
+; NONEON-NOSVE-NEXT: strb w8, [sp, #111]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
; NONEON-NOSVE-NEXT: ldrh w14, [sp, #76]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #111]
-; NONEON-NOSVE-NEXT: add w9, w3, w3
-; NONEON-NOSVE-NEXT: ldrh w15, [sp, #78]
; NONEON-NOSVE-NEXT: strb w8, [sp, #110]
-; NONEON-NOSVE-NEXT: add w8, w2, w2
-; NONEON-NOSVE-NEXT: ldrh w12, [sp, #72]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #109]
-; NONEON-NOSVE-NEXT: add w9, w0, w0
+; NONEON-NOSVE-NEXT: add w8, w4, w4
; NONEON-NOSVE-NEXT: ldrh w13, [sp, #74]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #109]
+; NONEON-NOSVE-NEXT: add w8, w3, w3
+; NONEON-NOSVE-NEXT: ldrh w12, [sp, #72]
; NONEON-NOSVE-NEXT: strb w8, [sp, #108]
-; NONEON-NOSVE-NEXT: add w8, w18, w18
-; NONEON-NOSVE-NEXT: ldrh w10, [sp, #68]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #107]
-; NONEON-NOSVE-NEXT: add w9, w17, w17
+; NONEON-NOSVE-NEXT: add w8, w2, w2
; NONEON-NOSVE-NEXT: ldrh w11, [sp, #70]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #107]
+; NONEON-NOSVE-NEXT: add w8, w0, w0
+; NONEON-NOSVE-NEXT: ldrh w10, [sp, #68]
; NONEON-NOSVE-NEXT: strb w8, [sp, #106]
+; NONEON-NOSVE-NEXT: add w8, w17, w17
+; NONEON-NOSVE-NEXT: ldrh w28, [sp, #60]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #105]
; NONEON-NOSVE-NEXT: add w8, w16, w16
-; NONEON-NOSVE-NEXT: ldrh w30, [sp, #58]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #105]
-; NONEON-NOSVE-NEXT: add w9, w15, w15
; NONEON-NOSVE-NEXT: strb w8, [sp, #104]
+; NONEON-NOSVE-NEXT: add w8, w15, w15
+; NONEON-NOSVE-NEXT: strb w8, [sp, #103]
; NONEON-NOSVE-NEXT: add w8, w14, w14
-; NONEON-NOSVE-NEXT: strb w9, [sp, #103]
-; NONEON-NOSVE-NEXT: add w9, w13, w13
; NONEON-NOSVE-NEXT: strb w8, [sp, #102]
+; NONEON-NOSVE-NEXT: add w8, w13, w13
+; NONEON-NOSVE-NEXT: strb w8, [sp, #101]
; NONEON-NOSVE-NEXT: add w8, w12, w12
-; NONEON-NOSVE-NEXT: strb w9, [sp, #101]
-; NONEON-NOSVE-NEXT: add w9, w11, w11
; NONEON-NOSVE-NEXT: strb w8, [sp, #100]
+; NONEON-NOSVE-NEXT: add w8, w11, w11
+; NONEON-NOSVE-NEXT: strb w8, [sp, #99]
; NONEON-NOSVE-NEXT: add w8, w10, w10
-; NONEON-NOSVE-NEXT: strb w9, [sp, #99]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] // 4-byte Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #98]
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strb w5, [sp, #95]
-; NONEON-NOSVE-NEXT: add w5, w30, w30
-; NONEON-NOSVE-NEXT: add w9, w9, w9
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strb w18, [sp, #95]
+; NONEON-NOSVE-NEXT: add w18, w28, w28
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: strb w6, [sp, #94]
-; NONEON-NOSVE-NEXT: strb w5, [sp, #93]
+; NONEON-NOSVE-NEXT: strb w18, [sp, #94]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #97]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #192] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w9, [sp, #97]
+; NONEON-NOSVE-NEXT: add w8, w8, w8
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #176] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #96]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #160] // 16-byte Folded Reload
@@ -1305,113 +1305,114 @@ define void @trunc_v32i32_v32i8(ptr %in, ptr %out) nounwind {
;
; NONEON-NOSVE-LABEL: trunc_v32i32_v32i8:
; NONEON-NOSVE: // %bb.0:
-; NONEON-NOSVE-NEXT: sub sp, sp, #272
+; NONEON-NOSVE-NEXT: sub sp, sp, #288
; NONEON-NOSVE-NEXT: ldp q3, q2, [x0, #32]
-; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #192] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: str x1, [sp, #24] // 8-byte Spill
; NONEON-NOSVE-NEXT: ldp q5, q4, [x0]
-; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #208] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #224] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x28, x27, [sp, #208] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #224] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: ldp q1, q0, [x0, #64]
-; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #240] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #240] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: ldp q7, q6, [x0, #96]
-; NONEON-NOSVE-NEXT: stp q2, q4, [sp, #80]
-; NONEON-NOSVE-NEXT: stp q3, q1, [sp, #112]
-; NONEON-NOSVE-NEXT: stp q5, q7, [sp, #16]
-; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #88]
-; NONEON-NOSVE-NEXT: ldp w27, w28, [sp, #112]
-; NONEON-NOSVE-NEXT: ldp w25, w26, [sp, #104]
-; NONEON-NOSVE-NEXT: add w6, w8, w8
-; NONEON-NOSVE-NEXT: add w5, w9, w9
-; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #256] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldp w10, w8, [sp, #128]
-; NONEON-NOSVE-NEXT: ldp w23, w24, [sp, #96]
-; NONEON-NOSVE-NEXT: ldp w21, w22, [sp, #24]
-; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #120]
-; NONEON-NOSVE-NEXT: stp q6, q0, [sp, #48]
-; NONEON-NOSVE-NEXT: ldp w19, w20, [sp, #16]
+; NONEON-NOSVE-NEXT: stp q2, q4, [sp, #96]
+; NONEON-NOSVE-NEXT: stp q3, q1, [sp, #128]
+; NONEON-NOSVE-NEXT: stp q5, q7, [sp, #32]
+; NONEON-NOSVE-NEXT: ldp w18, w8, [sp, #104]
+; NONEON-NOSVE-NEXT: ldp w27, w28, [sp, #128]
+; NONEON-NOSVE-NEXT: ldp w25, w26, [sp, #120]
+; NONEON-NOSVE-NEXT: add w0, w8, w8
+; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #256] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: add w18, w18, w18
+; NONEON-NOSVE-NEXT: ldp w8, w1, [sp, #144]
+; NONEON-NOSVE-NEXT: ldp w23, w24, [sp, #112]
+; NONEON-NOSVE-NEXT: ldp w21, w22, [sp, #40]
+; NONEON-NOSVE-NEXT: str w8, [sp, #20] // 4-byte Spill
+; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #136]
+; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #272] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: ldp w19, w20, [sp, #32]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #176] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: strb w8, [sp, #155]
+; NONEON-NOSVE-NEXT: stp q6, q0, [sp, #64]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #171]
+; NONEON-NOSVE-NEXT: add w8, w9, w9
+; NONEON-NOSVE-NEXT: strb w8, [sp, #170]
; NONEON-NOSVE-NEXT: add w8, w28, w28
-; NONEON-NOSVE-NEXT: strb w9, [sp, #154]
-; NONEON-NOSVE-NEXT: add w9, w27, w27
-; NONEON-NOSVE-NEXT: strb w8, [sp, #153]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #169]
+; NONEON-NOSVE-NEXT: add w8, w27, w27
+; NONEON-NOSVE-NEXT: strb w8, [sp, #168]
; NONEON-NOSVE-NEXT: add w8, w26, w26
-; NONEON-NOSVE-NEXT: strb w9, [sp, #152]
-; NONEON-NOSVE-NEXT: add w9, w25, w25
-; NONEON-NOSVE-NEXT: ldp w4, w7, [sp, #56]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #151]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #167]
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: strb w8, [sp, #166]
; NONEON-NOSVE-NEXT: add w8, w24, w24
-; NONEON-NOSVE-NEXT: strb w9, [sp, #150]
-; NONEON-NOSVE-NEXT: add w9, w23, w23
-; NONEON-NOSVE-NEXT: ldp w2, w3, [sp, #48]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #149]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #165]
+; NONEON-NOSVE-NEXT: add w8, w23, w23
+; NONEON-NOSVE-NEXT: strb w8, [sp, #164]
; NONEON-NOSVE-NEXT: add w8, w22, w22
-; NONEON-NOSVE-NEXT: strb w9, [sp, #148]
-; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: ldp w18, w0, [sp, #40]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #147]
+; NONEON-NOSVE-NEXT: ldp w6, w7, [sp, #72]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #163]
+; NONEON-NOSVE-NEXT: add w8, w21, w21
+; NONEON-NOSVE-NEXT: strb w8, [sp, #162]
; NONEON-NOSVE-NEXT: add w8, w20, w20
-; NONEON-NOSVE-NEXT: strb w9, [sp, #146]
-; NONEON-NOSVE-NEXT: add w9, w19, w19
-; NONEON-NOSVE-NEXT: ldp w16, w17, [sp, #32]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #145]
+; NONEON-NOSVE-NEXT: ldp w4, w5, [sp, #64]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #161]
+; NONEON-NOSVE-NEXT: add w8, w19, w19
+; NONEON-NOSVE-NEXT: strb w8, [sp, #160]
; NONEON-NOSVE-NEXT: add w8, w7, w7
-; NONEON-NOSVE-NEXT: strb w9, [sp, #144]
-; NONEON-NOSVE-NEXT: add w9, w4, w4
-; NONEON-NOSVE-NEXT: ldp w14, w15, [sp, #72]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #175]
+; NONEON-NOSVE-NEXT: ldp w2, w3, [sp, #56]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #191]
+; NONEON-NOSVE-NEXT: add w8, w6, w6
+; NONEON-NOSVE-NEXT: strb w8, [sp, #190]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: ldp w16, w17, [sp, #48]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #189]
+; NONEON-NOSVE-NEXT: add w8, w4, w4
+; NONEON-NOSVE-NEXT: strb w8, [sp, #188]
; NONEON-NOSVE-NEXT: add w8, w3, w3
-; NONEON-NOSVE-NEXT: strb w9, [sp, #174]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
-; NONEON-NOSVE-NEXT: ldp w12, w13, [sp, #64]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #173]
-; NONEON-NOSVE-NEXT: add w8, w0, w0
-; NONEON-NOSVE-NEXT: strb w9, [sp, #172]
-; NONEON-NOSVE-NEXT: add w9, w18, w18
-; NONEON-NOSVE-NEXT: ldp w10, w11, [sp, #136]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #171]
+; NONEON-NOSVE-NEXT: ldp w14, w15, [sp, #88]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #187]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: strb w8, [sp, #186]
; NONEON-NOSVE-NEXT: add w8, w17, w17
-; NONEON-NOSVE-NEXT: strb w9, [sp, #170]
-; NONEON-NOSVE-NEXT: add w9, w16, w16
-; NONEON-NOSVE-NEXT: strb w8, [sp, #169]
+; NONEON-NOSVE-NEXT: ldp w12, w13, [sp, #80]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #185]
+; NONEON-NOSVE-NEXT: add w8, w16, w16
+; NONEON-NOSVE-NEXT: strb w8, [sp, #184]
; NONEON-NOSVE-NEXT: add w8, w15, w15
-; NONEON-NOSVE-NEXT: strb w9, [sp, #168]
-; NONEON-NOSVE-NEXT: add w9, w14, w14
-; NONEON-NOSVE-NEXT: strb w8, [sp, #167]
+; NONEON-NOSVE-NEXT: ldp w10, w11, [sp, #152]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #183]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: strb w8, [sp, #182]
; NONEON-NOSVE-NEXT: add w8, w13, w13
-; NONEON-NOSVE-NEXT: strb w9, [sp, #166]
-; NONEON-NOSVE-NEXT: add w9, w12, w12
-; NONEON-NOSVE-NEXT: ldp w29, w30, [sp, #80]
-; NONEON-NOSVE-NEXT: strb w8, [sp, #165]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #181]
+; NONEON-NOSVE-NEXT: add w8, w12, w12
+; NONEON-NOSVE-NEXT: strb w8, [sp, #180]
; NONEON-NOSVE-NEXT: add w8, w11, w11
-; NONEON-NOSVE-NEXT: strb w9, [sp, #164]
-; NONEON-NOSVE-NEXT: add w9, w10, w10
-; NONEON-NOSVE-NEXT: strb w8, [sp, #163]
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strb w9, [sp, #162]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strb w5, [sp, #159]
-; NONEON-NOSVE-NEXT: add w5, w30, w30
-; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: strb w6, [sp, #158]
-; NONEON-NOSVE-NEXT: add w6, w29, w29
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: strb w5, [sp, #157]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #256] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w6, [sp, #156]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #240] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w8, [sp, #161]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #224] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w9, [sp, #160]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #208] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #144]
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #192] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #176] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q1, q0, [x1]
-; NONEON-NOSVE-NEXT: add sp, sp, #272
+; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #192] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #272] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp w29, w30, [sp, #96]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #179]
+; NONEON-NOSVE-NEXT: add w8, w10, w10
+; NONEON-NOSVE-NEXT: strb w8, [sp, #178]
+; NONEON-NOSVE-NEXT: add w8, w1, w1
+; NONEON-NOSVE-NEXT: strb w8, [sp, #177]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #20] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strb w18, [sp, #174]
+; NONEON-NOSVE-NEXT: add w18, w30, w30
+; NONEON-NOSVE-NEXT: strb w18, [sp, #173]
+; NONEON-NOSVE-NEXT: add w18, w29, w29
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: strb w0, [sp, #175]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #256] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w18, [sp, #172]
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #240] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w8, [sp, #176]
+; NONEON-NOSVE-NEXT: ldr x8, [sp, #24] // 8-byte Reload
+; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #160]
+; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #224] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #208] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #192] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q1, q0, [x8]
+; NONEON-NOSVE-NEXT: add sp, sp, #288
; NONEON-NOSVE-NEXT: ret
%a = load <32 x i32>, ptr %in
%b = trunc <32 x i32> %a to <32 x i8>
@@ -1912,102 +1913,102 @@ define void @trunc_v32i32_v32i16(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: stp q2, q4, [sp, #80]
; NONEON-NOSVE-NEXT: stp q3, q1, [sp, #112]
; NONEON-NOSVE-NEXT: stp q5, q7, [sp, #16]
-; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #88]
+; NONEON-NOSVE-NEXT: ldp w18, w8, [sp, #88]
; NONEON-NOSVE-NEXT: ldp w27, w28, [sp, #112]
; NONEON-NOSVE-NEXT: ldp w25, w26, [sp, #104]
-; NONEON-NOSVE-NEXT: add w6, w8, w8
-; NONEON-NOSVE-NEXT: add w5, w9, w9
+; NONEON-NOSVE-NEXT: add w0, w8, w8
; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #288] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldp w10, w8, [sp, #128]
+; NONEON-NOSVE-NEXT: add w18, w18, w18
+; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #128]
; NONEON-NOSVE-NEXT: ldp w23, w24, [sp, #96]
; NONEON-NOSVE-NEXT: ldp w21, w22, [sp, #24]
-; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #8] // 8-byte Folded Spill
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: ldp w9, w8, [sp, #120]
-; NONEON-NOSVE-NEXT: stp q6, q0, [sp, #48]
; NONEON-NOSVE-NEXT: ldp w19, w20, [sp, #16]
+; NONEON-NOSVE-NEXT: stp q6, q0, [sp, #48]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: add w9, w9, w9
; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #208] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: strh w8, [sp, #182]
+; NONEON-NOSVE-NEXT: add w8, w9, w9
+; NONEON-NOSVE-NEXT: strh w8, [sp, #180]
; NONEON-NOSVE-NEXT: add w8, w28, w28
-; NONEON-NOSVE-NEXT: strh w9, [sp, #180]
-; NONEON-NOSVE-NEXT: add w9, w27, w27
; NONEON-NOSVE-NEXT: strh w8, [sp, #178]
+; NONEON-NOSVE-NEXT: add w8, w27, w27
+; NONEON-NOSVE-NEXT: strh w8, [sp, #176]
; NONEON-NOSVE-NEXT: add w8, w26, w26
-; NONEON-NOSVE-NEXT: strh w9, [sp, #176]
-; NONEON-NOSVE-NEXT: add w9, w25, w25
-; NONEON-NOSVE-NEXT: ldp w4, w7, [sp, #56]
; NONEON-NOSVE-NEXT: strh w8, [sp, #174]
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: strh w8, [sp, #172]
; NONEON-NOSVE-NEXT: add w8, w24, w24
-; NONEON-NOSVE-NEXT: strh w9, [sp, #172]
-; NONEON-NOSVE-NEXT: add w9, w23, w23
-; NONEON-NOSVE-NEXT: ldp w2, w3, [sp, #48]
; NONEON-NOSVE-NEXT: strh w8, [sp, #170]
+; NONEON-NOSVE-NEXT: add w8, w23, w23
+; NONEON-NOSVE-NEXT: strh w8, [sp, #168]
; NONEON-NOSVE-NEXT: add w8, w22, w22
-; NONEON-NOSVE-NEXT: strh w9, [sp, #168]
-; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: ldp w18, w0, [sp, #40]
+; NONEON-NOSVE-NEXT: ldp w6, w7, [sp, #56]
; NONEON-NOSVE-NEXT: strh w8, [sp, #166]
+; NONEON-NOSVE-NEXT: add w8, w21, w21
+; NONEON-NOSVE-NEXT: strh w8, [sp, #164]
; NONEON-NOSVE-NEXT: add w8, w20, w20
-; NONEON-NOSVE-NEXT: strh w9, [sp, #164]
-; NONEON-NOSVE-NEXT: add w9, w19, w19
-; NONEON-NOSVE-NEXT: ldp w16, w17, [sp, #32]
+; NONEON-NOSVE-NEXT: ldp w4, w5, [sp, #48]
; NONEON-NOSVE-NEXT: strh w8, [sp, #162]
+; NONEON-NOSVE-NEXT: add w8, w19, w19
+; NONEON-NOSVE-NEXT: strh w8, [sp, #160]
; NONEON-NOSVE-NEXT: add w8, w7, w7
-; NONEON-NOSVE-NEXT: strh w9, [sp, #160]
-; NONEON-NOSVE-NEXT: add w9, w4, w4
-; NONEON-NOSVE-NEXT: ldp w14, w15, [sp, #72]
+; NONEON-NOSVE-NEXT: ldp w2, w3, [sp, #40]
; NONEON-NOSVE-NEXT: strh w8, [sp, #158]
-; NONEON-NOSVE-NEXT: add w8, w3, w3
-; NONEON-NOSVE-NEXT: strh w9, [sp, #156]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
-; NONEON-NOSVE-NEXT: ldp w12, w13, [sp, #64]
+; NONEON-NOSVE-NEXT: add w8, w6, w6
+; NONEON-NOSVE-NEXT: strh w8, [sp, #156]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: ldp w16, w17, [sp, #32]
; NONEON-NOSVE-NEXT: strh w8, [sp, #154]
-; NONEON-NOSVE-NEXT: add w8, w0, w0
-; NONEON-NOSVE-NEXT: strh w9, [sp, #152]
-; NONEON-NOSVE-NEXT: add w9, w18, w18
-; NONEON-NOSVE-NEXT: ldp w10, w11, [sp, #136]
+; NONEON-NOSVE-NEXT: add w8, w4, w4
+; NONEON-NOSVE-NEXT: strh w8, [sp, #152]
+; NONEON-NOSVE-NEXT: add w8, w3, w3
+; NONEON-NOSVE-NEXT: ldp w14, w15, [sp, #72]
; NONEON-NOSVE-NEXT: strh w8, [sp, #150]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: strh w8, [sp, #148]
; NONEON-NOSVE-NEXT: add w8, w17, w17
-; NONEON-NOSVE-NEXT: strh w9, [sp, #148]
-; NONEON-NOSVE-NEXT: add w9, w16, w16
+; NONEON-NOSVE-NEXT: ldp w12, w13, [sp, #64]
; NONEON-NOSVE-NEXT: strh w8, [sp, #146]
+; NONEON-NOSVE-NEXT: add w8, w16, w16
+; NONEON-NOSVE-NEXT: strh w8, [sp, #144]
; NONEON-NOSVE-NEXT: add w8, w15, w15
-; NONEON-NOSVE-NEXT: strh w9, [sp, #144]
-; NONEON-NOSVE-NEXT: add w9, w14, w14
+; NONEON-NOSVE-NEXT: ldp w10, w11, [sp, #136]
; NONEON-NOSVE-NEXT: strh w8, [sp, #206]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: strh w8, [sp, #204]
; NONEON-NOSVE-NEXT: add w8, w13, w13
-; NONEON-NOSVE-NEXT: strh w9, [sp, #204]
-; NONEON-NOSVE-NEXT: add w9, w12, w12
-; NONEON-NOSVE-NEXT: ldp w29, w30, [sp, #80]
; NONEON-NOSVE-NEXT: strh w8, [sp, #202]
+; NONEON-NOSVE-NEXT: add w8, w12, w12
+; NONEON-NOSVE-NEXT: strh w8, [sp, #200]
; NONEON-NOSVE-NEXT: add w8, w11, w11
-; NONEON-NOSVE-NEXT: strh w9, [sp, #200]
-; NONEON-NOSVE-NEXT: add w9, w10, w10
; NONEON-NOSVE-NEXT: strh w8, [sp, #198]
+; NONEON-NOSVE-NEXT: add w8, w10, w10
+; NONEON-NOSVE-NEXT: strh w8, [sp, #196]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strh w9, [sp, #196]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #12] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strh w5, [sp, #190]
-; NONEON-NOSVE-NEXT: add w5, w30, w30
+; NONEON-NOSVE-NEXT: ldp w29, w30, [sp, #80]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: strh w6, [sp, #188]
-; NONEON-NOSVE-NEXT: add w6, w29, w29
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: strh w5, [sp, #186]
+; NONEON-NOSVE-NEXT: strh w18, [sp, #188]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #194]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: add w18, w30, w30
+; NONEON-NOSVE-NEXT: strh w0, [sp, #190]
+; NONEON-NOSVE-NEXT: strh w18, [sp, #186]
+; NONEON-NOSVE-NEXT: add w18, w29, w29
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: strh w18, [sp, #184]
; NONEON-NOSVE-NEXT: ldp q1, q3, [sp, #144]
-; NONEON-NOSVE-NEXT: strh w6, [sp, #184]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #192]
; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #288] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strh w8, [sp, #194]
+; NONEON-NOSVE-NEXT: ldp q2, q0, [sp, #176]
; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #272] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strh w9, [sp, #192]
; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #256] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp q2, q0, [sp, #176]
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #240] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #224] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: stp q3, q2, [x1]
+; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #224] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: stp q0, q1, [x1, #32]
+; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: add sp, sp, #304
; NONEON-NOSVE-NEXT: ret
%a = load <32 x i32>, ptr %in
@@ -2582,132 +2583,132 @@ define void @trunc_v32i64_v32i8(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: ldp q3, q2, [x0, #64]
; NONEON-NOSVE-NEXT: stp x26, x25, [sp, #352] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: stp x24, x23, [sp, #368] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldp q5, q4, [x0, #32]
-; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #384] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: ldp q17, q16, [x0, #128]
+; NONEON-NOSVE-NEXT: stp x22, x21, [sp, #384] // 16-byte Folded Spill
+; NONEON-NOSVE-NEXT: ldp q5, q4, [x0, #32]
; NONEON-NOSVE-NEXT: stp x20, x19, [sp, #400] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: ldp q7, q6, [x0]
-; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #320] // 16-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldp q19, q18, [x0, #224]
; NONEON-NOSVE-NEXT: str x1, [sp, #24] // 8-byte Spill
+; NONEON-NOSVE-NEXT: ldp q19, q18, [x0, #224]
+; NONEON-NOSVE-NEXT: stp x29, x30, [sp, #320] // 16-byte Folded Spill
; NONEON-NOSVE-NEXT: ldp q21, q20, [x0, #192]
; NONEON-NOSVE-NEXT: ldp q23, q22, [x0, #160]
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #160]
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #176]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #184]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #184]
; NONEON-NOSVE-NEXT: stp q2, q4, [sp, #192]
-; NONEON-NOSVE-NEXT: stp q21, q19, [sp, #48]
-; NONEON-NOSVE-NEXT: ldr w25, [sp, #208]
-; NONEON-NOSVE-NEXT: ldr w26, [sp, #216]
-; NONEON-NOSVE-NEXT: add w5, w9, w9
-; NONEON-NOSVE-NEXT: add w6, w8, w8
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #192]
-; NONEON-NOSVE-NEXT: stp q20, q23, [sp, #96]
-; NONEON-NOSVE-NEXT: ldr w2, [sp, #64]
-; NONEON-NOSVE-NEXT: ldr w16, [sp, #48]
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: ldr w18, [sp, #96]
-; NONEON-NOSVE-NEXT: stp q22, q16, [sp, #128]
-; NONEON-NOSVE-NEXT: stp q6, q5, [sp, #224]
-; NONEON-NOSVE-NEXT: ldr w3, [sp, #72]
-; NONEON-NOSVE-NEXT: ldr w14, [sp, #128]
+; NONEON-NOSVE-NEXT: ldr w18, [sp, #176]
; NONEON-NOSVE-NEXT: stp q3, q17, [sp, #256]
-; NONEON-NOSVE-NEXT: ldr w23, [sp, #240]
-; NONEON-NOSVE-NEXT: ldr w21, [sp, #224]
+; NONEON-NOSVE-NEXT: ldr w9, [sp, #192]
+; NONEON-NOSVE-NEXT: ldr w26, [sp, #216]
+; NONEON-NOSVE-NEXT: add w0, w8, w8
+; NONEON-NOSVE-NEXT: add w18, w18, w18
; NONEON-NOSVE-NEXT: ldr w8, [sp, #272]
-; NONEON-NOSVE-NEXT: ldr w27, [sp, #256]
; NONEON-NOSVE-NEXT: ldr w28, [sp, #264]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #298]
-; NONEON-NOSVE-NEXT: ldr w24, [sp, #248]
-; NONEON-NOSVE-NEXT: ldr w22, [sp, #232]
-; NONEON-NOSVE-NEXT: add w9, w27, w27
+; NONEON-NOSVE-NEXT: ldr w27, [sp, #256]
+; NONEON-NOSVE-NEXT: stp q21, q19, [sp, #48]
; NONEON-NOSVE-NEXT: str w8, [sp, #20] // 4-byte Spill
; NONEON-NOSVE-NEXT: ldr w8, [sp, #200]
-; NONEON-NOSVE-NEXT: str q7, [sp, #32]
-; NONEON-NOSVE-NEXT: ldr w0, [sp, #104]
-; NONEON-NOSVE-NEXT: ldr w12, [sp, #112]
+; NONEON-NOSVE-NEXT: ldr w25, [sp, #208]
+; NONEON-NOSVE-NEXT: stp q6, q5, [sp, #224]
+; NONEON-NOSVE-NEXT: ldr w5, [sp, #72]
+; NONEON-NOSVE-NEXT: ldr w4, [sp, #64]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: strb w9, [sp, #296]
-; NONEON-NOSVE-NEXT: add w9, w25, w25
-; NONEON-NOSVE-NEXT: str q18, [sp, #80]
-; NONEON-NOSVE-NEXT: ldr w19, [sp, #32]
-; NONEON-NOSVE-NEXT: ldr w20, [sp, #40]
+; NONEON-NOSVE-NEXT: ldr w24, [sp, #248]
+; NONEON-NOSVE-NEXT: ldr w23, [sp, #240]
; NONEON-NOSVE-NEXT: strb w8, [sp, #299]
+; NONEON-NOSVE-NEXT: add w8, w9, w9
+; NONEON-NOSVE-NEXT: ldr w22, [sp, #232]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #298]
; NONEON-NOSVE-NEXT: add w8, w28, w28
-; NONEON-NOSVE-NEXT: ldr w4, [sp, #80]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #294]
-; NONEON-NOSVE-NEXT: add w9, w23, w23
-; NONEON-NOSVE-NEXT: ldr w7, [sp, #88]
+; NONEON-NOSVE-NEXT: ldr w21, [sp, #224]
; NONEON-NOSVE-NEXT: strb w8, [sp, #297]
-; NONEON-NOSVE-NEXT: add w8, w26, w26
+; NONEON-NOSVE-NEXT: add w8, w27, w27
; NONEON-NOSVE-NEXT: ldr w17, [sp, #56]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #292]
-; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #144]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #296]
+; NONEON-NOSVE-NEXT: add w8, w26, w26
+; NONEON-NOSVE-NEXT: ldr w16, [sp, #48]
; NONEON-NOSVE-NEXT: strb w8, [sp, #295]
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: ldr w1, [sp, #280]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #294]
; NONEON-NOSVE-NEXT: add w8, w24, w24
-; NONEON-NOSVE-NEXT: ldr w15, [sp, #136]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #290]
-; NONEON-NOSVE-NEXT: add w9, w19, w19
-; NONEON-NOSVE-NEXT: ldr w13, [sp, #120]
+; NONEON-NOSVE-NEXT: ldr w30, [sp, #168]
+; NONEON-NOSVE-NEXT: str q7, [sp, #32]
+; NONEON-NOSVE-NEXT: ldr w29, [sp, #160]
; NONEON-NOSVE-NEXT: strb w8, [sp, #293]
+; NONEON-NOSVE-NEXT: add w8, w23, w23
+; NONEON-NOSVE-NEXT: ldr w20, [sp, #40]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #292]
; NONEON-NOSVE-NEXT: add w8, w22, w22
-; NONEON-NOSVE-NEXT: ldr w11, [sp, #152]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #288]
-; NONEON-NOSVE-NEXT: add w9, w4, w4
-; NONEON-NOSVE-NEXT: ldr w1, [sp, #280]
+; NONEON-NOSVE-NEXT: ldr w19, [sp, #32]
+; NONEON-NOSVE-NEXT: str q18, [sp, #80]
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #368] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #291]
+; NONEON-NOSVE-NEXT: add w8, w21, w21
+; NONEON-NOSVE-NEXT: ldr w7, [sp, #88]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #290]
; NONEON-NOSVE-NEXT: add w8, w20, w20
-; NONEON-NOSVE-NEXT: ldr w29, [sp, #160]
-; NONEON-NOSVE-NEXT: strb w9, [sp, #318]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
-; NONEON-NOSVE-NEXT: ldr w30, [sp, #168]
+; NONEON-NOSVE-NEXT: ldr w6, [sp, #80]
; NONEON-NOSVE-NEXT: strb w8, [sp, #289]
+; NONEON-NOSVE-NEXT: add w8, w19, w19
+; NONEON-NOSVE-NEXT: strb w8, [sp, #288]
; NONEON-NOSVE-NEXT: add w8, w7, w7
-; NONEON-NOSVE-NEXT: strb w9, [sp, #316]
-; NONEON-NOSVE-NEXT: add w9, w18, w18
+; NONEON-NOSVE-NEXT: stp q20, q23, [sp, #96]
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #400] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #319]
-; NONEON-NOSVE-NEXT: add w8, w3, w3
-; NONEON-NOSVE-NEXT: strb w9, [sp, #314]
-; NONEON-NOSVE-NEXT: add w9, w16, w16
+; NONEON-NOSVE-NEXT: add w8, w6, w6
+; NONEON-NOSVE-NEXT: ldr w3, [sp, #104]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #318]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: ldr w2, [sp, #96]
; NONEON-NOSVE-NEXT: strb w8, [sp, #317]
-; NONEON-NOSVE-NEXT: add w8, w0, w0
-; NONEON-NOSVE-NEXT: strb w9, [sp, #312]
-; NONEON-NOSVE-NEXT: add w9, w14, w14
+; NONEON-NOSVE-NEXT: add w8, w4, w4
+; NONEON-NOSVE-NEXT: ldr w13, [sp, #120]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #316]
+; NONEON-NOSVE-NEXT: add w8, w3, w3
+; NONEON-NOSVE-NEXT: ldr w12, [sp, #112]
+; NONEON-NOSVE-NEXT: stp q22, q16, [sp, #128]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #384] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #315]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: ldr w15, [sp, #136]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #314]
; NONEON-NOSVE-NEXT: add w8, w17, w17
-; NONEON-NOSVE-NEXT: strb w9, [sp, #310]
-; NONEON-NOSVE-NEXT: add w9, w12, w12
+; NONEON-NOSVE-NEXT: ldr w14, [sp, #128]
; NONEON-NOSVE-NEXT: strb w8, [sp, #313]
+; NONEON-NOSVE-NEXT: add w8, w16, w16
+; NONEON-NOSVE-NEXT: ldr w11, [sp, #152]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #312]
; NONEON-NOSVE-NEXT: add w8, w15, w15
-; NONEON-NOSVE-NEXT: strb w9, [sp, #308]
-; NONEON-NOSVE-NEXT: add w9, w10, w10
+; NONEON-NOSVE-NEXT: ldr w10, [sp, #144]
; NONEON-NOSVE-NEXT: strb w8, [sp, #311]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: strb w8, [sp, #310]
; NONEON-NOSVE-NEXT: add w8, w13, w13
-; NONEON-NOSVE-NEXT: strb w9, [sp, #306]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #20] // 4-byte Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #309]
+; NONEON-NOSVE-NEXT: add w8, w12, w12
+; NONEON-NOSVE-NEXT: strb w8, [sp, #308]
; NONEON-NOSVE-NEXT: add w8, w11, w11
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: strb w5, [sp, #303]
-; NONEON-NOSVE-NEXT: add w5, w30, w30
-; NONEON-NOSVE-NEXT: strb w6, [sp, #302]
-; NONEON-NOSVE-NEXT: add w6, w29, w29
; NONEON-NOSVE-NEXT: strb w8, [sp, #307]
+; NONEON-NOSVE-NEXT: add w8, w10, w10
+; NONEON-NOSVE-NEXT: strb w8, [sp, #306]
; NONEON-NOSVE-NEXT: add w8, w1, w1
-; NONEON-NOSVE-NEXT: strb w5, [sp, #301]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #400] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strb w6, [sp, #300]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #384] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strb w8, [sp, #305]
-; NONEON-NOSVE-NEXT: ldr x8, [sp, #24] // 8-byte Reload
-; NONEON-NOSVE-NEXT: strb w9, [sp, #304]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #368] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #288]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #20] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strb w18, [sp, #302]
+; NONEON-NOSVE-NEXT: add w18, w30, w30
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: strb w18, [sp, #301]
+; NONEON-NOSVE-NEXT: add w18, w29, w29
+; NONEON-NOSVE-NEXT: strb w0, [sp, #303]
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #352] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strb w18, [sp, #300]
; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #336] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q1, q0, [x8]
+; NONEON-NOSVE-NEXT: strb w8, [sp, #304]
+; NONEON-NOSVE-NEXT: ldr x8, [sp, #24] // 8-byte Reload
+; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #288]
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #320] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q1, q0, [x8]
; NONEON-NOSVE-NEXT: add sp, sp, #416
; NONEON-NOSVE-NEXT: ret
%a = load <32 x i64>, ptr %in
@@ -2976,122 +2977,122 @@ define void @trunc_v32i64_v32i16(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: ldp q21, q20, [x0, #192]
; NONEON-NOSVE-NEXT: ldp q23, q22, [x0, #160]
; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #144]
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #160]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #168]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #168]
; NONEON-NOSVE-NEXT: stp q2, q4, [sp, #176]
-; NONEON-NOSVE-NEXT: stp q21, q19, [sp, #32]
-; NONEON-NOSVE-NEXT: ldr w25, [sp, #192]
-; NONEON-NOSVE-NEXT: ldr w26, [sp, #200]
-; NONEON-NOSVE-NEXT: add w6, w8, w8
-; NONEON-NOSVE-NEXT: add w5, w9, w9
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #176]
-; NONEON-NOSVE-NEXT: stp q20, q23, [sp, #80]
-; NONEON-NOSVE-NEXT: ldr w2, [sp, #48]
-; NONEON-NOSVE-NEXT: ldr w3, [sp, #56]
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: ldr w18, [sp, #80]
-; NONEON-NOSVE-NEXT: stp q22, q16, [sp, #112]
-; NONEON-NOSVE-NEXT: stp q6, q5, [sp, #208]
-; NONEON-NOSVE-NEXT: ldr w0, [sp, #88]
-; NONEON-NOSVE-NEXT: ldr w16, [sp, #32]
+; NONEON-NOSVE-NEXT: ldr w18, [sp, #160]
; NONEON-NOSVE-NEXT: stp q3, q17, [sp, #240]
-; NONEON-NOSVE-NEXT: ldr w23, [sp, #224]
-; NONEON-NOSVE-NEXT: ldr w24, [sp, #232]
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #256]
+; NONEON-NOSVE-NEXT: ldr w26, [sp, #200]
+; NONEON-NOSVE-NEXT: ldr w25, [sp, #192]
+; NONEON-NOSVE-NEXT: add w0, w8, w8
+; NONEON-NOSVE-NEXT: add w18, w18, w18
+; NONEON-NOSVE-NEXT: ldr w9, [sp, #256]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #264]
-; NONEON-NOSVE-NEXT: ldr w27, [sp, #240]
; NONEON-NOSVE-NEXT: ldr w28, [sp, #248]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #308]
-; NONEON-NOSVE-NEXT: ldr w21, [sp, #208]
-; NONEON-NOSVE-NEXT: add w9, w27, w27
-; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #8] // 8-byte Folded Spill
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #184]
+; NONEON-NOSVE-NEXT: ldr w27, [sp, #240]
; NONEON-NOSVE-NEXT: str q7, [sp, #16]
-; NONEON-NOSVE-NEXT: ldr w22, [sp, #216]
-; NONEON-NOSVE-NEXT: ldr w17, [sp, #40]
+; NONEON-NOSVE-NEXT: ldr w30, [sp, #152]
+; NONEON-NOSVE-NEXT: ldr w29, [sp, #144]
+; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #184]
+; NONEON-NOSVE-NEXT: ldr w9, [sp, #176]
+; NONEON-NOSVE-NEXT: stp q21, q19, [sp, #32]
+; NONEON-NOSVE-NEXT: ldr w20, [sp, #24]
+; NONEON-NOSVE-NEXT: ldr w19, [sp, #16]
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: strh w9, [sp, #304]
-; NONEON-NOSVE-NEXT: add w9, w25, w25
+; NONEON-NOSVE-NEXT: stp q6, q5, [sp, #208]
+; NONEON-NOSVE-NEXT: ldr w5, [sp, #56]
; NONEON-NOSVE-NEXT: strh w8, [sp, #310]
+; NONEON-NOSVE-NEXT: add w8, w9, w9
+; NONEON-NOSVE-NEXT: ldr w24, [sp, #232]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #308]
; NONEON-NOSVE-NEXT: add w8, w28, w28
-; NONEON-NOSVE-NEXT: ldr w19, [sp, #16]
+; NONEON-NOSVE-NEXT: ldr w23, [sp, #224]
; NONEON-NOSVE-NEXT: strh w8, [sp, #306]
+; NONEON-NOSVE-NEXT: add w8, w27, w27
+; NONEON-NOSVE-NEXT: ldr w22, [sp, #216]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #304]
; NONEON-NOSVE-NEXT: add w8, w26, w26
-; NONEON-NOSVE-NEXT: ldr w20, [sp, #24]
-; NONEON-NOSVE-NEXT: str q18, [sp, #64]
-; NONEON-NOSVE-NEXT: ldr w14, [sp, #112]
-; NONEON-NOSVE-NEXT: ldr w15, [sp, #120]
+; NONEON-NOSVE-NEXT: ldr w21, [sp, #208]
; NONEON-NOSVE-NEXT: strh w8, [sp, #302]
+; NONEON-NOSVE-NEXT: add w8, w25, w25
+; NONEON-NOSVE-NEXT: ldr w4, [sp, #48]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #300]
; NONEON-NOSVE-NEXT: add w8, w24, w24
-; NONEON-NOSVE-NEXT: ldr w4, [sp, #64]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #300]
-; NONEON-NOSVE-NEXT: add w9, w23, w23
-; NONEON-NOSVE-NEXT: ldr w7, [sp, #72]
+; NONEON-NOSVE-NEXT: ldr w17, [sp, #40]
; NONEON-NOSVE-NEXT: strh w8, [sp, #298]
+; NONEON-NOSVE-NEXT: add w8, w23, w23
+; NONEON-NOSVE-NEXT: ldr w16, [sp, #32]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #296]
; NONEON-NOSVE-NEXT: add w8, w22, w22
-; NONEON-NOSVE-NEXT: ldr w12, [sp, #96]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #296]
-; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: ldr w13, [sp, #104]
+; NONEON-NOSVE-NEXT: str q18, [sp, #64]
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #384] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w8, [sp, #294]
+; NONEON-NOSVE-NEXT: add w8, w21, w21
+; NONEON-NOSVE-NEXT: ldr w7, [sp, #72]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #292]
; NONEON-NOSVE-NEXT: add w8, w20, w20
-; NONEON-NOSVE-NEXT: ldr w10, [sp, #128]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #292]
-; NONEON-NOSVE-NEXT: add w9, w19, w19
-; NONEON-NOSVE-NEXT: ldr w11, [sp, #136]
+; NONEON-NOSVE-NEXT: ldr w6, [sp, #64]
; NONEON-NOSVE-NEXT: strh w8, [sp, #290]
+; NONEON-NOSVE-NEXT: add w8, w19, w19
+; NONEON-NOSVE-NEXT: strh w8, [sp, #288]
; NONEON-NOSVE-NEXT: add w8, w7, w7
-; NONEON-NOSVE-NEXT: ldr w29, [sp, #144]
-; NONEON-NOSVE-NEXT: strh w9, [sp, #288]
-; NONEON-NOSVE-NEXT: add w9, w4, w4
-; NONEON-NOSVE-NEXT: ldr w30, [sp, #152]
+; NONEON-NOSVE-NEXT: stp q20, q23, [sp, #80]
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #416] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w8, [sp, #286]
-; NONEON-NOSVE-NEXT: add w8, w3, w3
-; NONEON-NOSVE-NEXT: strh w9, [sp, #284]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
+; NONEON-NOSVE-NEXT: add w8, w6, w6
+; NONEON-NOSVE-NEXT: ldr w3, [sp, #88]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #284]
+; NONEON-NOSVE-NEXT: add w8, w5, w5
+; NONEON-NOSVE-NEXT: ldr w2, [sp, #80]
; NONEON-NOSVE-NEXT: strh w8, [sp, #282]
-; NONEON-NOSVE-NEXT: add w8, w0, w0
-; NONEON-NOSVE-NEXT: strh w9, [sp, #280]
-; NONEON-NOSVE-NEXT: add w9, w18, w18
+; NONEON-NOSVE-NEXT: add w8, w4, w4
+; NONEON-NOSVE-NEXT: ldr w13, [sp, #104]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #280]
+; NONEON-NOSVE-NEXT: add w8, w3, w3
+; NONEON-NOSVE-NEXT: ldr w12, [sp, #96]
+; NONEON-NOSVE-NEXT: stp q22, q16, [sp, #112]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #400] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: strh w8, [sp, #278]
+; NONEON-NOSVE-NEXT: add w8, w2, w2
+; NONEON-NOSVE-NEXT: ldr w15, [sp, #120]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #276]
; NONEON-NOSVE-NEXT: add w8, w17, w17
-; NONEON-NOSVE-NEXT: strh w9, [sp, #276]
-; NONEON-NOSVE-NEXT: add w9, w16, w16
+; NONEON-NOSVE-NEXT: ldr w14, [sp, #112]
; NONEON-NOSVE-NEXT: strh w8, [sp, #274]
+; NONEON-NOSVE-NEXT: add w8, w16, w16
+; NONEON-NOSVE-NEXT: ldr w11, [sp, #136]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #272]
; NONEON-NOSVE-NEXT: add w8, w15, w15
-; NONEON-NOSVE-NEXT: strh w9, [sp, #272]
-; NONEON-NOSVE-NEXT: add w9, w14, w14
+; NONEON-NOSVE-NEXT: ldr w10, [sp, #128]
; NONEON-NOSVE-NEXT: strh w8, [sp, #334]
+; NONEON-NOSVE-NEXT: add w8, w14, w14
+; NONEON-NOSVE-NEXT: strh w8, [sp, #332]
; NONEON-NOSVE-NEXT: add w8, w13, w13
-; NONEON-NOSVE-NEXT: strh w9, [sp, #332]
-; NONEON-NOSVE-NEXT: add w9, w12, w12
; NONEON-NOSVE-NEXT: strh w8, [sp, #330]
+; NONEON-NOSVE-NEXT: add w8, w12, w12
+; NONEON-NOSVE-NEXT: strh w8, [sp, #328]
; NONEON-NOSVE-NEXT: add w8, w11, w11
-; NONEON-NOSVE-NEXT: strh w9, [sp, #328]
-; NONEON-NOSVE-NEXT: add w9, w10, w10
; NONEON-NOSVE-NEXT: strh w8, [sp, #326]
+; NONEON-NOSVE-NEXT: add w8, w10, w10
+; NONEON-NOSVE-NEXT: strh w8, [sp, #324]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] // 4-byte Reload
-; NONEON-NOSVE-NEXT: strh w9, [sp, #324]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strh w18, [sp, #316]
+; NONEON-NOSVE-NEXT: add w18, w30, w30
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: strh w5, [sp, #318]
-; NONEON-NOSVE-NEXT: add w5, w30, w30
-; NONEON-NOSVE-NEXT: strh w6, [sp, #316]
-; NONEON-NOSVE-NEXT: add w6, w29, w29
-; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: strh w5, [sp, #314]
-; NONEON-NOSVE-NEXT: ldp q1, q3, [sp, #272]
-; NONEON-NOSVE-NEXT: strh w6, [sp, #312]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #416] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: strh w18, [sp, #314]
+; NONEON-NOSVE-NEXT: add w18, w29, w29
; NONEON-NOSVE-NEXT: strh w8, [sp, #322]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #400] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: strh w9, [sp, #320]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #384] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp q2, q0, [sp, #304]
+; NONEON-NOSVE-NEXT: ldr w8, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: strh w0, [sp, #318]
+; NONEON-NOSVE-NEXT: ldp q1, q3, [sp, #272]
+; NONEON-NOSVE-NEXT: add w8, w8, w8
+; NONEON-NOSVE-NEXT: strh w18, [sp, #312]
+; NONEON-NOSVE-NEXT: strh w8, [sp, #320]
; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #368] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp q2, q0, [sp, #304]
; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #352] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: stp q3, q2, [x1]
; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #336] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q3, q2, [x1]
; NONEON-NOSVE-NEXT: stp q0, q1, [x1, #32]
; NONEON-NOSVE-NEXT: add sp, sp, #432
; NONEON-NOSVE-NEXT: ret
@@ -3356,8 +3357,8 @@ define void @trunc_v32i64_v32i32(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: ldr w10, [sp, #32]
; NONEON-NOSVE-NEXT: stp q4, q6, [sp, #160]
; NONEON-NOSVE-NEXT: ldr w12, [sp, #48]
-; NONEON-NOSVE-NEXT: add w6, w8, w8
-; NONEON-NOSVE-NEXT: add w5, w9, w9
+; NONEON-NOSVE-NEXT: add w3, w8, w8
+; NONEON-NOSVE-NEXT: add w2, w9, w9
; NONEON-NOSVE-NEXT: ldr w8, [sp, #40]
; NONEON-NOSVE-NEXT: stp q18, q20, [sp, #112]
; NONEON-NOSVE-NEXT: ldr w25, [sp, #160]
@@ -3370,7 +3371,7 @@ define void @trunc_v32i64_v32i32(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: ldr w24, [sp, #152]
; NONEON-NOSVE-NEXT: str q3, [sp, #16]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #208]
-; NONEON-NOSVE-NEXT: ldr w4, [sp, #112]
+; NONEON-NOSVE-NEXT: ldr w6, [sp, #112]
; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #8] // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: ldr w8, [sp, #216]
; NONEON-NOSVE-NEXT: ldr w27, [sp, #16]
@@ -3403,10 +3404,10 @@ define void @trunc_v32i64_v32i32(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: ldr w15, [sp, #72]
; NONEON-NOSVE-NEXT: str w8, [sp, #324]
; NONEON-NOSVE-NEXT: add w8, w22, w22
-; NONEON-NOSVE-NEXT: ldr w2, [sp, #96]
+; NONEON-NOSVE-NEXT: ldr w4, [sp, #96]
; NONEON-NOSVE-NEXT: str w9, [sp, #320]
; NONEON-NOSVE-NEXT: add w9, w21, w21
-; NONEON-NOSVE-NEXT: ldr w3, [sp, #104]
+; NONEON-NOSVE-NEXT: ldr w5, [sp, #104]
; NONEON-NOSVE-NEXT: str w8, [sp, #380]
; NONEON-NOSVE-NEXT: add w8, w20, w20
; NONEON-NOSVE-NEXT: ldr w13, [sp, #56]
@@ -3417,13 +3418,13 @@ define void @trunc_v32i64_v32i32(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: add w8, w7, w7
; NONEON-NOSVE-NEXT: ldr w11, [sp, #88]
; NONEON-NOSVE-NEXT: str w9, [sp, #368]
-; NONEON-NOSVE-NEXT: add w9, w4, w4
+; NONEON-NOSVE-NEXT: add w9, w6, w6
; NONEON-NOSVE-NEXT: ldr w29, [sp, #224]
; NONEON-NOSVE-NEXT: str w8, [sp, #316]
-; NONEON-NOSVE-NEXT: add w8, w3, w3
+; NONEON-NOSVE-NEXT: add w8, w5, w5
; NONEON-NOSVE-NEXT: ldr w30, [sp, #232]
; NONEON-NOSVE-NEXT: str w9, [sp, #312]
-; NONEON-NOSVE-NEXT: add w9, w2, w2
+; NONEON-NOSVE-NEXT: add w9, w4, w4
; NONEON-NOSVE-NEXT: str w8, [sp, #308]
; NONEON-NOSVE-NEXT: add w8, w0, w0
; NONEON-NOSVE-NEXT: str w9, [sp, #304]
@@ -3445,33 +3446,32 @@ define void @trunc_v32i64_v32i32(ptr %in, ptr %out) nounwind {
; NONEON-NOSVE-NEXT: str w9, [sp, #272]
; NONEON-NOSVE-NEXT: add w9, w10, w10
; NONEON-NOSVE-NEXT: str w8, [sp, #300]
-; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] // 4-byte Reload
+; NONEON-NOSVE-NEXT: ldp q6, q3, [sp, #304]
; NONEON-NOSVE-NEXT: str w9, [sp, #296]
-; NONEON-NOSVE-NEXT: ldr w9, [sp, #12] // 4-byte Reload
+; NONEON-NOSVE-NEXT: ldp q4, q7, [sp, #368]
+; NONEON-NOSVE-NEXT: str w2, [sp, #364]
+; NONEON-NOSVE-NEXT: add w2, w30, w30
+; NONEON-NOSVE-NEXT: str w3, [sp, #360]
+; NONEON-NOSVE-NEXT: add w3, w29, w29
+; NONEON-NOSVE-NEXT: str w2, [sp, #356]
+; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #480] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: str w3, [sp, #352]
+; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #464] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp w8, w9, [sp, #8] // 8-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #336]
+; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #448] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: add w8, w8, w8
-; NONEON-NOSVE-NEXT: str w5, [sp, #364]
-; NONEON-NOSVE-NEXT: add w5, w30, w30
; NONEON-NOSVE-NEXT: add w9, w9, w9
-; NONEON-NOSVE-NEXT: str w6, [sp, #360]
-; NONEON-NOSVE-NEXT: add w6, w29, w29
-; NONEON-NOSVE-NEXT: str w5, [sp, #356]
-; NONEON-NOSVE-NEXT: ldp q6, q3, [sp, #304]
-; NONEON-NOSVE-NEXT: str w6, [sp, #352]
-; NONEON-NOSVE-NEXT: ldp q4, q7, [sp, #368]
; NONEON-NOSVE-NEXT: str w8, [sp, #292]
-; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #336]
+; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #432] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: str w9, [sp, #288]
-; NONEON-NOSVE-NEXT: ldp x20, x19, [sp, #480] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #416] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: ldp q5, q2, [sp, #272]
-; NONEON-NOSVE-NEXT: stp q4, q3, [x1, #32]
; NONEON-NOSVE-NEXT: stp q1, q0, [x1]
-; NONEON-NOSVE-NEXT: ldp x22, x21, [sp, #464] // 16-byte Folded Reload
+; NONEON-NOSVE-NEXT: stp q4, q3, [x1, #32]
+; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #400] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: stp q7, q6, [x1, #64]
-; NONEON-NOSVE-NEXT: ldp x24, x23, [sp, #448] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: stp q2, q5, [x1, #96]
-; NONEON-NOSVE-NEXT: ldp x26, x25, [sp, #432] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp x28, x27, [sp, #416] // 16-byte Folded Reload
-; NONEON-NOSVE-NEXT: ldp x29, x30, [sp, #400] // 16-byte Folded Reload
; NONEON-NOSVE-NEXT: add sp, sp, #496
; NONEON-NOSVE-NEXT: ret
%a = load <32 x i64>, ptr %in
diff --git a/llvm/test/TableGen/aarch64-register-info-stats.td b/llvm/test/TableGen/aarch64-register-info-stats.td
index b1a33cc2dfe42..730dbadc7179f 100644
--- a/llvm/test/TableGen/aarch64-register-info-stats.td
+++ b/llvm/test/TableGen/aarch64-register-info-stats.td
@@ -15,4 +15,4 @@ def TestTarget : Target {
// CHECK-DAG: 82 register-info-emitter - Number of explicit register classes
// CHECK-DAG: 446 register-info-emitter - Number of synthesized register classes
-// CHECK-DAG: 189 register-info-emitter - Number of register pressure sets
+// CHECK-DAG: 187 register-info-emitter - Number of register pressure sets
More information about the llvm-commits
mailing list