[llvm] [AArch64] Only fold into ands directly if AND is one-use (PR #167371)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 16 14:17:26 PST 2025
https://github.com/AZero13 updated https://github.com/llvm/llvm-project/pull/167371
>From eb6caf83fed52f5a0fe030d010450e97df2753c7 Mon Sep 17 00:00:00 2001
From: AZero13 <gfunni234 at gmail.com>
Date: Mon, 10 Nov 2025 21:12:46 -0500
Subject: [PATCH] [AArch64] Only fold into ands directly if AND is one-use
Otherwise, we can be too aggressive, and when it comes time to split along edges, we can end up duplicating more than we bargained for.
---
.../Target/AArch64/AArch64ISelLowering.cpp | 18 +-
.../GISel/AArch64InstructionSelector.cpp | 6 +-
.../GlobalISel/split-wide-shifts-multiway.ll | 5894 +++++++++--------
llvm/test/CodeGen/AArch64/arm64-ccmp.ll | 18 +-
llvm/test/CodeGen/AArch64/fcmp-fp128.ll | 6 +-
llvm/test/CodeGen/AArch64/fsh.ll | 566 +-
llvm/test/CodeGen/AArch64/funnel-shift.ll | 49 +-
llvm/test/CodeGen/AArch64/peephole-and-tst.ll | 275 +-
llvm/test/CodeGen/AArch64/sshl_sat.ll | 7 +-
9 files changed, 3362 insertions(+), 3477 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 35836af3c874b..cb28e266db5e6 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -3750,19 +3750,13 @@ static SDValue emitComparison(SDValue LHS, SDValue RHS, ISD::CondCode CC,
Opcode = AArch64ISD::ADDS;
LHS = LHS.getOperand(1);
} else if (isNullConstant(RHS) && !isUnsignedIntSetCC(CC)) {
- if (LHS.getOpcode() == ISD::AND) {
+ if (LHS.getOpcode() == ISD::AND && LHS.hasOneUse()) {
// Similarly, (CMP (and X, Y), 0) can be implemented with a TST
- // (a.k.a. ANDS) except that the flags are only guaranteed to work for one
- // of the signed comparisons.
- const SDValue ANDSNode =
- DAG.getNode(AArch64ISD::ANDS, DL, DAG.getVTList(VT, FlagsVT),
- LHS.getOperand(0), LHS.getOperand(1));
- // Replace all users of (and X, Y) with newly generated (ands X, Y)
- DAG.ReplaceAllUsesWith(LHS, ANDSNode);
- return ANDSNode.getValue(1);
- } else if (LHS.getOpcode() == AArch64ISD::ANDS) {
- // Use result of ANDS
- return LHS.getValue(1);
+ // (a.k.a. ANDS) except that the flags are only guaranteed to work for
+ // signed comparisons.
+ Opcode = AArch64ISD::ANDS;
+ RHS = LHS.getOperand(1);
+ LHS = LHS.getOperand(0);
}
}
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
index 64db3765c433f..8237eed27f470 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
@@ -5118,14 +5118,14 @@ MachineInstr *AArch64InstructionSelector::tryFoldIntegerCompare(
//
// tst x, y
if (!CmpInst::isUnsigned(P) && LHSDef &&
- LHSDef->getOpcode() == TargetOpcode::G_AND) {
+ LHSDef->getOpcode() == TargetOpcode::G_AND &&
+ MRI.hasOneNonDBGUse(LHS.getReg())) {
// Make sure that the RHS is 0.
auto ValAndVReg = getIConstantVRegValWithLookThrough(RHS.getReg(), MRI);
if (!ValAndVReg || ValAndVReg->Value != 0)
return nullptr;
- return emitTST(LHSDef->getOperand(1),
- LHSDef->getOperand(2), MIRBuilder);
+ return emitTST(LHSDef->getOperand(1), LHSDef->getOperand(2), MIRBuilder);
}
return nullptr;
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..17642daf5ff39 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
@@ -85,40 +85,40 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: .cfi_offset w26, -64
; GISEL-NEXT: .cfi_offset w27, -72
; GISEL-NEXT: .cfi_offset w28, -80
-; GISEL-NEXT: ldp x11, x15, [x1]
+; GISEL-NEXT: ldp x12, x15, [x1]
; GISEL-NEXT: mov w8, w2
; GISEL-NEXT: lsr x9, x8, #6
-; GISEL-NEXT: and x14, x8, #0x3f
-; GISEL-NEXT: mov w13, #64 ; =0x40
-; GISEL-NEXT: sub x16, x13, x14
+; GISEL-NEXT: and x11, x8, #0x3f
+; GISEL-NEXT: mov w14, #64 ; =0x40
+; GISEL-NEXT: sub x16, x14, x11
; GISEL-NEXT: ldp x3, x6, [x1, #16]
-; GISEL-NEXT: lsl x10, x11, x14
+; GISEL-NEXT: lsl x10, x12, x11
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: ldp x20, x21, [x1, #32]
-; GISEL-NEXT: csel x12, x10, xzr, eq
+; GISEL-NEXT: csel x13, x10, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: lsr x26, x21, x16
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x13, xzr, x12, eq
+; GISEL-NEXT: csel x14, xzr, x13, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: lsr x12, x11, x16
-; GISEL-NEXT: csel x13, x11, x13, eq
-; GISEL-NEXT: lsl x11, x15, x14
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x17, xzr, x12, eq
+; GISEL-NEXT: lsr x13, x12, x16
+; GISEL-NEXT: csel x14, x12, x14, eq
+; GISEL-NEXT: lsl x12, x15, x11
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x17, xzr, x13, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x17, x11, x17
+; GISEL-NEXT: orr x17, x12, x17
; GISEL-NEXT: csel x17, x17, xzr, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: csel x17, x10, x17, eq
@@ -137,16 +137,16 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: lsr x17, x15, x16
; GISEL-NEXT: csel x15, x15, x2, eq
-; GISEL-NEXT: lsl x2, x3, x14
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: lsl x2, x3, x11
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x4, xzr, x17, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x4, x2, x4
; GISEL-NEXT: csel x4, x4, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x5, xzr, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x5, xzr, x13, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x5, x11, x5
+; GISEL-NEXT: orr x5, x12, x5
; GISEL-NEXT: csel x4, x5, x4, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: csel x4, x10, x4, eq
@@ -163,21 +163,21 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: lsr x4, x3, x16
; GISEL-NEXT: csel x3, x3, x5, eq
-; GISEL-NEXT: lsl x5, x6, x14
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: lsl x5, x6, x11
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x7, xzr, x4, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x7, x5, x7
; GISEL-NEXT: csel x7, x7, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x19, xzr, x17, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: orr x19, x2, x19
; GISEL-NEXT: csel x7, x19, x7, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x19, xzr, x13, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x19, x11, x19
+; GISEL-NEXT: orr x19, x12, x19
; GISEL-NEXT: csel x7, x19, x7, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: csel x7, x10, x7, eq
@@ -192,26 +192,26 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: lsr x7, x6, x16
; GISEL-NEXT: csel x6, x6, x19, eq
-; GISEL-NEXT: lsl x19, x20, x14
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: lsl x19, x20, x11
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x22, xzr, x7, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x22, x19, x22
; GISEL-NEXT: csel x22, x22, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x23, xzr, x4, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: orr x23, x5, x23
; GISEL-NEXT: csel x22, x23, x22, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x23, xzr, x17, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: orr x23, x2, x23
; GISEL-NEXT: csel x22, x23, x22, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x23, xzr, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x23, xzr, x13, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x23, x11, x23
+; GISEL-NEXT: orr x23, x12, x23
; GISEL-NEXT: csel x22, x23, x22, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: csel x22, x10, x22, eq
@@ -224,31 +224,31 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: lsr x22, x20, x16
; GISEL-NEXT: csel x20, x20, x23, eq
-; GISEL-NEXT: lsl x23, x21, x14
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: lsl x23, x21, x11
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x24, xzr, x22, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x24, x23, x24
; GISEL-NEXT: csel x24, x24, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x25, xzr, x7, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: orr x25, x19, x25
; GISEL-NEXT: csel x24, x25, x24, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x25, xzr, x4, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: orr x25, x5, x25
; GISEL-NEXT: csel x24, x25, x24, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x25, xzr, x17, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: orr x25, x2, x25
; GISEL-NEXT: csel x24, x25, x24, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x25, xzr, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x25, xzr, x13, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x25, x11, x25
+; GISEL-NEXT: orr x25, x12, x25
; GISEL-NEXT: csel x24, x25, x24, eq
; GISEL-NEXT: cmp x9, #5
; GISEL-NEXT: csel x24, x10, x24, eq
@@ -256,44 +256,43 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: ldp x25, x1, [x1, #48]
; GISEL-NEXT: csel x24, xzr, x24, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: stp x13, x15, [x0]
+; GISEL-NEXT: stp x14, x15, [x0]
; GISEL-NEXT: csel x24, xzr, x24, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: stp x3, x6, [x0, #16]
; GISEL-NEXT: csel x21, x21, x24, eq
-; GISEL-NEXT: lsl x24, x25, x14
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: lsl x24, x25, x11
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x27, xzr, x26, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: lsr x16, x25, x16
; GISEL-NEXT: orr x27, x24, x27
-; GISEL-NEXT: lsl x14, x1, x14
; GISEL-NEXT: stp x20, x21, [x0, #32]
; GISEL-NEXT: csel x27, x27, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x28, xzr, x22, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: orr x28, x23, x28
; GISEL-NEXT: csel x27, x28, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x28, xzr, x7, eq
; GISEL-NEXT: cmp x9, #2
; GISEL-NEXT: orr x28, x19, x28
; GISEL-NEXT: csel x27, x28, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x28, xzr, x4, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: orr x28, x5, x28
; GISEL-NEXT: csel x27, x28, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x28, xzr, x17, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: orr x28, x2, x28
; GISEL-NEXT: csel x27, x28, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x28, xzr, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x28, xzr, x13, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x28, x11, x28
+; GISEL-NEXT: orr x28, x12, x28
; GISEL-NEXT: csel x27, x28, x27, eq
; GISEL-NEXT: cmp x9, #6
; GISEL-NEXT: csel x27, x10, x27, eq
@@ -301,44 +300,45 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x27, xzr, x27, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x25, x25, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: lsl x27, x1, x11
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x16, xzr, x16, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x14, x14, x16
-; GISEL-NEXT: csel x14, x14, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x16, xzr, x26, eq
+; GISEL-NEXT: orr x16, x27, x16
+; GISEL-NEXT: csel x16, x16, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x26, xzr, x26, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x16, x24, x16
-; GISEL-NEXT: csel x14, x16, x14, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x16, xzr, x22, eq
+; GISEL-NEXT: orr x24, x24, x26
+; GISEL-NEXT: csel x16, x24, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x22, xzr, x22, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x16, x23, x16
-; GISEL-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x14, x16, x14, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x16, xzr, x7, eq
+; GISEL-NEXT: orr x22, x23, x22
+; GISEL-NEXT: ldp x24, x23, [sp, #32] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x16, x22, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x7, xzr, x7, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x16, x19, x16
+; GISEL-NEXT: orr x7, x19, x7
; GISEL-NEXT: ldp x20, x19, [sp, #64] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x14, x16, x14, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x16, xzr, x4, eq
+; GISEL-NEXT: csel x16, x7, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x16, x5, x16
-; GISEL-NEXT: ldp x24, x23, [sp, #32] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x14, x16, x14, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x16, xzr, x17, eq
+; GISEL-NEXT: orr x4, x5, x4
+; GISEL-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x16, x4, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x17, xzr, x17, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x16, x2, x16
-; GISEL-NEXT: csel x13, x16, x14, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: orr x17, x2, x17
+; GISEL-NEXT: csel x14, x17, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x11, x12
-; GISEL-NEXT: csel x11, x11, x13, eq
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: csel x11, x11, x14, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: csel x9, x10, x11, eq
; GISEL-NEXT: cmp x8, #0
@@ -421,11 +421,12 @@ define void @test_lshr_i512(ptr %result, ptr %input, i32 %shift) {
;
; GISEL-LABEL: test_lshr_i512:
; GISEL: ; %bb.0: ; %entry
-; GISEL-NEXT: stp x26, x25, [sp, #-64]! ; 16-byte Folded Spill
-; GISEL-NEXT: stp x24, x23, [sp, #16] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x20, x19, [sp, #48] ; 16-byte Folded Spill
-; GISEL-NEXT: .cfi_def_cfa_offset 64
+; GISEL-NEXT: stp x28, x27, [sp, #-80]! ; 16-byte Folded Spill
+; GISEL-NEXT: stp x26, x25, [sp, #16] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x24, x23, [sp, #32] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x22, x21, [sp, #48] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x20, x19, [sp, #64] ; 16-byte Folded Spill
+; GISEL-NEXT: .cfi_def_cfa_offset 80
; GISEL-NEXT: .cfi_offset w19, -8
; GISEL-NEXT: .cfi_offset w20, -16
; GISEL-NEXT: .cfi_offset w21, -24
@@ -434,254 +435,256 @@ define void @test_lshr_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: .cfi_offset w24, -48
; GISEL-NEXT: .cfi_offset w25, -56
; GISEL-NEXT: .cfi_offset w26, -64
+; GISEL-NEXT: .cfi_offset w27, -72
+; GISEL-NEXT: .cfi_offset w28, -80
; GISEL-NEXT: mov w8, w2
-; GISEL-NEXT: ldp x13, x2, [x1]
+; GISEL-NEXT: ldp x14, x3, [x1]
; GISEL-NEXT: mov w9, #64 ; =0x40
-; GISEL-NEXT: and x14, x8, #0x3f
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: sub x17, x9, x14
-; GISEL-NEXT: ldp x5, x16, [x1, #16]
-; GISEL-NEXT: lsl x10, x2, x17
+; GISEL-NEXT: ands x10, x8, #0x3f
+; GISEL-NEXT: sub x15, x9, x10
+; GISEL-NEXT: ldp x6, x17, [x1, #16]
+; GISEL-NEXT: lsl x11, x3, x15
; GISEL-NEXT: lsr x9, x8, #6
-; GISEL-NEXT: lsr x11, x13, x14
-; GISEL-NEXT: lsr x24, x2, x14
-; GISEL-NEXT: csel x10, xzr, x10, eq
-; GISEL-NEXT: lsl x23, x5, x17
+; GISEL-NEXT: lsr x12, x14, x10
+; GISEL-NEXT: lsr x25, x3, x10
+; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: lsl x24, x6, x15
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x11, x10
-; GISEL-NEXT: lsl x22, x16, x17
-; GISEL-NEXT: lsr x21, x5, x14
-; GISEL-NEXT: csel x10, x10, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x20, x16, x14
-; GISEL-NEXT: csel x11, xzr, x23, eq
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: lsl x23, x17, x15
+; GISEL-NEXT: lsr x22, x6, x10
+; GISEL-NEXT: csel x11, x11, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x21, x17, x10
+; GISEL-NEXT: csel x12, xzr, x24, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x24, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldp x15, x11, [x1, #32]
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x22, eq
+; GISEL-NEXT: orr x12, x25, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: ldp x16, x12, [x1, #32]
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x13, xzr, x23, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: lsl x19, x15, x17
-; GISEL-NEXT: orr x12, x21, x12
-; GISEL-NEXT: lsl x6, x11, x17
-; GISEL-NEXT: csel x10, x12, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x7, x15, x14
-; GISEL-NEXT: csel x12, xzr, x19, eq
+; GISEL-NEXT: lsl x20, x16, x15
+; GISEL-NEXT: orr x13, x22, x13
+; GISEL-NEXT: lsl x7, x12, x15
+; GISEL-NEXT: csel x11, x13, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x19, x16, x10
+; GISEL-NEXT: csel x13, xzr, x20, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x12, x20, x12
-; GISEL-NEXT: csel x4, x12, x10, eq
-; GISEL-NEXT: ldp x12, x10, [x1, #48]
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x6, eq
+; GISEL-NEXT: lsr x5, x12, x10
+; GISEL-NEXT: orr x13, x21, x13
+; GISEL-NEXT: csel x2, x13, x11, eq
+; GISEL-NEXT: ldp x13, x11, [x1, #48]
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x1, xzr, x7, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x1, x7, x1
-; GISEL-NEXT: lsl x3, x12, x17
-; GISEL-NEXT: lsl x17, x10, x17
-; GISEL-NEXT: csel x1, x1, x4, eq
-; GISEL-NEXT: lsr x4, x11, x14
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x25, xzr, x3, eq
+; GISEL-NEXT: orr x1, x19, x1
+; GISEL-NEXT: lsl x4, x13, x15
+; GISEL-NEXT: csel x2, x1, x2, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x1, xzr, x4, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x25, x4, x25
-; GISEL-NEXT: csel x25, x25, x1, eq
-; GISEL-NEXT: lsr x1, x12, x14
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x17, eq
+; GISEL-NEXT: orr x26, x5, x1
+; GISEL-NEXT: lsl x1, x11, x15
+; GISEL-NEXT: csel x26, x26, x2, eq
+; GISEL-NEXT: lsr x2, x13, x10
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x15, xzr, x1, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: lsr x14, x10, x14
-; GISEL-NEXT: orr x26, x1, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
+; GISEL-NEXT: orr x27, x2, x15
+; GISEL-NEXT: lsr x15, x11, x10
+; GISEL-NEXT: csel x26, x27, x26, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x25, x14, x25, eq
+; GISEL-NEXT: csel x26, x15, x26, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x13, x13, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x23, xzr, x23, eq
+; GISEL-NEXT: csel x14, x14, x26, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x24, xzr, x24, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x23, x24, x23
-; GISEL-NEXT: csel x23, x23, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x22, eq
+; GISEL-NEXT: orr x24, x25, x24
+; GISEL-NEXT: csel x24, x24, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x25, xzr, x23, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x24, x21, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x19, eq
+; GISEL-NEXT: orr x25, x22, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x25, xzr, x20, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x24, x20, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x6, eq
+; GISEL-NEXT: orr x25, x21, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x25, xzr, x7, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x24, x7, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x3, eq
+; GISEL-NEXT: orr x25, x19, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x25, xzr, x4, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x24, x4, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x17, eq
+; GISEL-NEXT: orr x25, x5, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x25, xzr, x1, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x24, x1, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
+; GISEL-NEXT: orr x25, x2, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x23, x14, x23, eq
+; GISEL-NEXT: csel x24, x15, x24, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x23, xzr, x23, eq
+; GISEL-NEXT: csel x24, xzr, x24, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x2, x2, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x22, eq
+; GISEL-NEXT: csel x3, x3, x24, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x23, xzr, x23, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: stp x13, x2, [x0]
-; GISEL-NEXT: orr x21, x21, x22
-; GISEL-NEXT: ldp x24, x23, [sp, #16] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x21, x21, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x19, eq
+; GISEL-NEXT: stp x14, x3, [x0]
+; GISEL-NEXT: orr x22, x22, x23
+; GISEL-NEXT: ldp x26, x25, [sp, #16] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x22, x22, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x23, xzr, x20, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x22, x20, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x6, eq
+; GISEL-NEXT: orr x23, x21, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x23, xzr, x7, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x22, x7, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x3, eq
+; GISEL-NEXT: orr x23, x19, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x23, xzr, x4, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x22, x4, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x17, eq
+; GISEL-NEXT: orr x23, x5, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x23, xzr, x1, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x22, x1, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: orr x23, x2, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x21, x14, x21, eq
+; GISEL-NEXT: csel x22, x15, x22, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x21, xzr, x21, eq
+; GISEL-NEXT: csel x22, xzr, x22, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x21, xzr, x21, eq
+; GISEL-NEXT: csel x22, xzr, x22, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x5, x5, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x19, eq
+; GISEL-NEXT: csel x6, x6, x22, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x20, xzr, x20, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x19, x20, x19
-; GISEL-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x19, x19, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x6, eq
+; GISEL-NEXT: orr x20, x21, x20
+; GISEL-NEXT: ldp x24, x23, [sp, #32] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x20, x20, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x21, xzr, x7, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x20, x7, x20
-; GISEL-NEXT: csel x19, x20, x19, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x3, eq
+; GISEL-NEXT: orr x21, x19, x21
+; GISEL-NEXT: csel x20, x21, x20, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x21, xzr, x4, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x20, x4, x20
-; GISEL-NEXT: csel x19, x20, x19, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x17, eq
+; GISEL-NEXT: orr x21, x5, x21
+; GISEL-NEXT: csel x20, x21, x20, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x21, xzr, x1, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x20, x1, x20
-; GISEL-NEXT: csel x19, x20, x19, eq
+; GISEL-NEXT: orr x21, x2, x21
+; GISEL-NEXT: csel x20, x21, x20, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x19, x14, x19, eq
+; GISEL-NEXT: csel x20, x15, x20, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x19, xzr, x19, eq
+; GISEL-NEXT: csel x20, xzr, x20, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x19, xzr, x19, eq
+; GISEL-NEXT: csel x20, xzr, x20, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x19, xzr, x19, eq
+; GISEL-NEXT: csel x20, xzr, x20, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x16, x16, x19, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x6, xzr, x6, eq
+; GISEL-NEXT: csel x17, x17, x20, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x7, xzr, x7, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: stp x5, x16, [x0, #16]
-; GISEL-NEXT: orr x6, x7, x6
-; GISEL-NEXT: ldp x20, x19, [sp, #48] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x6, x6, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x7, xzr, x3, eq
+; GISEL-NEXT: stp x6, x17, [x0, #16]
+; GISEL-NEXT: orr x7, x19, x7
+; GISEL-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x7, x7, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x19, xzr, x4, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x7, x4, x7
-; GISEL-NEXT: csel x6, x7, x6, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x7, xzr, x17, eq
+; GISEL-NEXT: orr x19, x5, x19
+; GISEL-NEXT: csel x7, x19, x7, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x19, xzr, x1, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x7, x1, x7
-; GISEL-NEXT: csel x6, x7, x6, eq
+; GISEL-NEXT: orr x19, x2, x19
+; GISEL-NEXT: csel x7, x19, x7, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x6, x14, x6, eq
+; GISEL-NEXT: csel x7, x15, x7, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x6, xzr, x6, eq
+; GISEL-NEXT: csel x7, xzr, x7, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x6, xzr, x6, eq
+; GISEL-NEXT: csel x7, xzr, x7, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x6, xzr, x6, eq
+; GISEL-NEXT: csel x7, xzr, x7, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x6, xzr, x6, eq
+; GISEL-NEXT: csel x7, xzr, x7, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x15, x15, x6, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: csel x16, x16, x7, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x3, x4, x3
-; GISEL-NEXT: csel x3, x3, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x4, xzr, x17, eq
+; GISEL-NEXT: orr x4, x5, x4
+; GISEL-NEXT: ldp x20, x19, [sp, #64] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x4, x4, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x5, xzr, x1, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x4, x1, x4
-; GISEL-NEXT: csel x3, x4, x3, eq
+; GISEL-NEXT: orr x5, x2, x5
+; GISEL-NEXT: csel x4, x5, x4, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x3, x14, x3, eq
+; GISEL-NEXT: csel x4, x15, x4, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x11, x11, x3, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x12, x12, x4, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x10, xzr, x1, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: stp x15, x11, [x0, #32]
-; GISEL-NEXT: orr x17, x1, x17
-; GISEL-NEXT: csel x17, x17, xzr, eq
+; GISEL-NEXT: stp x16, x12, [x0, #32]
+; GISEL-NEXT: orr x10, x2, x10
+; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x17, x14, x17, eq
+; GISEL-NEXT: csel x10, x15, x10, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x12, x12, x17, eq
+; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: csel x14, x14, xzr, eq
+; GISEL-NEXT: csel x13, x15, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x13, xzr, x14, eq
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x9, #5
@@ -691,9 +694,9 @@ define void @test_lshr_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: csel x9, xzr, x13, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x8, x10, x9, eq
-; GISEL-NEXT: stp x12, x8, [x0, #48]
-; GISEL-NEXT: ldp x26, x25, [sp], #64 ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x11, x9, eq
+; GISEL-NEXT: stp x10, x8, [x0, #48]
+; GISEL-NEXT: ldp x28, x27, [sp], #80 ; 16-byte Folded Reload
; GISEL-NEXT: ret
entry:
%input_val = load i512, ptr %input, align 64
@@ -769,273 +772,276 @@ define void @test_ashr_i512(ptr %result, ptr %input, i32 %shift) {
;
; GISEL-LABEL: test_ashr_i512:
; GISEL: ; %bb.0: ; %entry
-; GISEL-NEXT: stp x28, x27, [sp, #-80]! ; 16-byte Folded Spill
+; GISEL-NEXT: stp x28, x27, [sp, #-96]! ; 16-byte Folded Spill
; GISEL-NEXT: stp x26, x25, [sp, #16] ; 16-byte Folded Spill
; GISEL-NEXT: stp x24, x23, [sp, #32] ; 16-byte Folded Spill
; GISEL-NEXT: stp x22, x21, [sp, #48] ; 16-byte Folded Spill
; GISEL-NEXT: stp x20, x19, [sp, #64] ; 16-byte Folded Spill
-; GISEL-NEXT: .cfi_def_cfa_offset 80
-; GISEL-NEXT: .cfi_offset w19, -8
-; GISEL-NEXT: .cfi_offset w20, -16
-; GISEL-NEXT: .cfi_offset w21, -24
-; GISEL-NEXT: .cfi_offset w22, -32
-; GISEL-NEXT: .cfi_offset w23, -40
-; GISEL-NEXT: .cfi_offset w24, -48
-; GISEL-NEXT: .cfi_offset w25, -56
-; GISEL-NEXT: .cfi_offset w26, -64
-; GISEL-NEXT: .cfi_offset w27, -72
-; GISEL-NEXT: .cfi_offset w28, -80
+; GISEL-NEXT: stp x29, x30, [sp, #80] ; 16-byte Folded Spill
+; GISEL-NEXT: .cfi_def_cfa_offset 96
+; GISEL-NEXT: .cfi_offset w30, -8
+; GISEL-NEXT: .cfi_offset w29, -16
+; GISEL-NEXT: .cfi_offset w19, -24
+; GISEL-NEXT: .cfi_offset w20, -32
+; GISEL-NEXT: .cfi_offset w21, -40
+; GISEL-NEXT: .cfi_offset w22, -48
+; GISEL-NEXT: .cfi_offset w23, -56
+; GISEL-NEXT: .cfi_offset w24, -64
+; GISEL-NEXT: .cfi_offset w25, -72
+; GISEL-NEXT: .cfi_offset w26, -80
+; GISEL-NEXT: .cfi_offset w27, -88
+; GISEL-NEXT: .cfi_offset w28, -96
; GISEL-NEXT: mov w8, w2
-; GISEL-NEXT: ldp x14, x4, [x1]
+; GISEL-NEXT: ldp x15, x5, [x1]
; GISEL-NEXT: mov w9, #64 ; =0x40
-; GISEL-NEXT: and x16, x8, #0x3f
+; GISEL-NEXT: ands x12, x8, #0x3f
; GISEL-NEXT: lsr x10, x8, #6
-; GISEL-NEXT: sub x15, x9, x16
+; GISEL-NEXT: sub x16, x9, x12
; GISEL-NEXT: ldr x9, [x1, #56]
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x12, x4, x15
-; GISEL-NEXT: ldp x7, x3, [x1, #16]
-; GISEL-NEXT: lsr x13, x14, x16
+; GISEL-NEXT: lsl x13, x5, x16
+; GISEL-NEXT: ldp x19, x4, [x1, #16]
+; GISEL-NEXT: lsr x14, x15, x12
; GISEL-NEXT: asr x11, x9, #63
-; GISEL-NEXT: lsr x26, x4, x16
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: lsr x27, x5, x12
+; GISEL-NEXT: csel x13, xzr, x13, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: lsl x25, x7, x15
-; GISEL-NEXT: orr x12, x13, x12
-; GISEL-NEXT: lsl x23, x3, x15
-; GISEL-NEXT: csel x12, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x24, x7, x16
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: lsl x26, x19, x16
+; GISEL-NEXT: orr x13, x14, x13
+; GISEL-NEXT: lsl x24, x4, x16
+; GISEL-NEXT: csel x13, x13, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsr x25, x19, x12
+; GISEL-NEXT: csel x14, xzr, x26, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: lsr x22, x3, x16
-; GISEL-NEXT: orr x13, x26, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: ldp x17, x13, [x1, #32]
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x2, xzr, x23, eq
+; GISEL-NEXT: lsr x23, x4, x12
+; GISEL-NEXT: orr x14, x27, x14
+; GISEL-NEXT: csel x13, x14, x13, eq
+; GISEL-NEXT: ldp x2, x14, [x1, #32]
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x24, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x2, x24, x2
-; GISEL-NEXT: lsl x21, x17, x15
-; GISEL-NEXT: lsl x19, x13, x15
-; GISEL-NEXT: csel x2, x2, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x12, [x1, #48]
-; GISEL-NEXT: csel x1, xzr, x21, eq
+; GISEL-NEXT: orr x17, x25, x17
+; GISEL-NEXT: lsl x22, x2, x16
+; GISEL-NEXT: lsl x20, x14, x16
+; GISEL-NEXT: csel x17, x17, x13, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: ldr x13, [x1, #48]
+; GISEL-NEXT: csel x1, xzr, x22, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: lsr x20, x17, x16
-; GISEL-NEXT: orr x1, x22, x1
-; GISEL-NEXT: lsl x5, x12, x15
-; GISEL-NEXT: lsr x6, x13, x16
-; GISEL-NEXT: csel x1, x1, x2, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x2, xzr, x19, eq
+; GISEL-NEXT: lsr x21, x2, x12
+; GISEL-NEXT: orr x1, x23, x1
+; GISEL-NEXT: lsl x6, x13, x16
+; GISEL-NEXT: lsr x7, x14, x12
+; GISEL-NEXT: csel x17, x1, x17, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x1, xzr, x20, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x2, x20, x2
-; GISEL-NEXT: csel x2, x2, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x5, eq
+; GISEL-NEXT: orr x1, x21, x1
+; GISEL-NEXT: csel x17, x1, x17, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x1, xzr, x6, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x27, x6, x1
-; GISEL-NEXT: lsl x1, x9, x15
-; GISEL-NEXT: lsl x15, x11, x15
-; GISEL-NEXT: csel x27, x27, x2, eq
-; GISEL-NEXT: lsr x2, x12, x16
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: orr x3, x7, x1
+; GISEL-NEXT: lsl x1, x9, x16
+; GISEL-NEXT: lsl x16, x11, x16
+; GISEL-NEXT: csel x17, x3, x17, eq
+; GISEL-NEXT: lsr x3, x13, x12
+; GISEL-NEXT: cmp x12, #0
; GISEL-NEXT: csel x28, xzr, x1, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: lsr x16, x9, x16
-; GISEL-NEXT: orr x28, x2, x28
-; GISEL-NEXT: csel x27, x28, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x28, xzr, x15, eq
+; GISEL-NEXT: orr x28, x3, x28
+; GISEL-NEXT: csel x28, x28, x17, eq
+; GISEL-NEXT: lsr x17, x9, x12
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x30, xzr, x16, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x28, x16, x28
-; GISEL-NEXT: csel x27, x28, x27, eq
+; GISEL-NEXT: orr x30, x17, x30
+; GISEL-NEXT: csel x28, x30, x28, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x14, x14, x27, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x25, xzr, x25, eq
-; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x25, x26, x25
-; GISEL-NEXT: csel x25, x25, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x23, eq
+; GISEL-NEXT: csel x15, x15, x28, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x26, xzr, x26, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: orr x26, x27, x26
+; GISEL-NEXT: ldp x29, x30, [sp, #80] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x26, x26, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x27, xzr, x24, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x26, x24, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x21, eq
+; GISEL-NEXT: orr x27, x25, x27
+; GISEL-NEXT: csel x26, x27, x26, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x27, xzr, x22, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x26, x22, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x19, eq
+; GISEL-NEXT: orr x27, x23, x27
+; GISEL-NEXT: csel x26, x27, x26, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x27, xzr, x20, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x26, x20, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x5, eq
+; GISEL-NEXT: orr x27, x21, x27
+; GISEL-NEXT: csel x26, x27, x26, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x27, xzr, x6, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x26, x6, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x1, eq
+; GISEL-NEXT: orr x27, x7, x27
+; GISEL-NEXT: csel x26, x27, x26, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x27, xzr, x1, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x26, x2, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x26, xzr, x15, eq
+; GISEL-NEXT: orr x27, x3, x27
+; GISEL-NEXT: csel x26, x27, x26, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x27, xzr, x16, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x26, x16, x26
-; GISEL-NEXT: csel x25, x26, x25, eq
+; GISEL-NEXT: orr x27, x17, x27
+; GISEL-NEXT: csel x26, x27, x26, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x25, x11, x25, eq
+; GISEL-NEXT: csel x26, x11, x26, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x4, x4, x25, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x23, xzr, x23, eq
+; GISEL-NEXT: csel x5, x5, x26, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x24, xzr, x24, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: stp x14, x4, [x0]
-; GISEL-NEXT: orr x23, x24, x23
-; GISEL-NEXT: ldp x26, x25, [sp, #16] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x23, x23, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x21, eq
+; GISEL-NEXT: stp x15, x5, [x0]
+; GISEL-NEXT: orr x24, x25, x24
+; GISEL-NEXT: csel x24, x24, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x25, xzr, x22, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x24, x22, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x19, eq
+; GISEL-NEXT: orr x25, x23, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x25, xzr, x20, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x24, x20, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x5, eq
+; GISEL-NEXT: orr x25, x21, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x25, xzr, x6, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x24, x6, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x1, eq
+; GISEL-NEXT: orr x25, x7, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x25, xzr, x1, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x24, x2, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x24, xzr, x15, eq
+; GISEL-NEXT: orr x25, x3, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x25, xzr, x16, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x24, x16, x24
-; GISEL-NEXT: csel x23, x24, x23, eq
+; GISEL-NEXT: orr x25, x17, x25
+; GISEL-NEXT: csel x24, x25, x24, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x23, x11, x23, eq
+; GISEL-NEXT: csel x24, x11, x24, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x23, x11, x23, eq
+; GISEL-NEXT: csel x24, x11, x24, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x7, x7, x23, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x21, xzr, x21, eq
+; GISEL-NEXT: csel x19, x19, x24, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x22, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x21, x22, x21
-; GISEL-NEXT: ldp x24, x23, [sp, #32] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x21, x21, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x19, eq
+; GISEL-NEXT: orr x22, x23, x22
+; GISEL-NEXT: ldp x26, x25, [sp, #16] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x22, x22, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x23, xzr, x20, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x22, x20, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x5, eq
+; GISEL-NEXT: orr x23, x21, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x23, xzr, x6, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x22, x6, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x1, eq
+; GISEL-NEXT: orr x23, x7, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x23, xzr, x1, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x22, x2, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x22, xzr, x15, eq
+; GISEL-NEXT: orr x23, x3, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x23, xzr, x16, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x22, x16, x22
-; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: orr x23, x17, x23
+; GISEL-NEXT: csel x22, x23, x22, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: csel x22, x11, x22, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: csel x22, x11, x22, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: csel x22, x11, x22, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x3, x3, x21, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x19, eq
+; GISEL-NEXT: csel x4, x4, x22, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x20, xzr, x20, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: stp x7, x3, [x0, #16]
-; GISEL-NEXT: orr x19, x20, x19
-; GISEL-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x19, x19, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x5, eq
+; GISEL-NEXT: stp x19, x4, [x0, #16]
+; GISEL-NEXT: orr x20, x21, x20
+; GISEL-NEXT: ldp x24, x23, [sp, #32] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x20, x20, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x21, xzr, x6, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x20, x6, x20
-; GISEL-NEXT: csel x19, x20, x19, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x1, eq
+; GISEL-NEXT: orr x21, x7, x21
+; GISEL-NEXT: csel x20, x21, x20, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x21, xzr, x1, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x20, x2, x20
-; GISEL-NEXT: csel x19, x20, x19, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x15, eq
+; GISEL-NEXT: orr x21, x3, x21
+; GISEL-NEXT: csel x20, x21, x20, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x21, xzr, x16, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x20, x16, x20
-; GISEL-NEXT: csel x19, x20, x19, eq
+; GISEL-NEXT: orr x21, x17, x21
+; GISEL-NEXT: csel x20, x21, x20, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: csel x19, x11, x19, eq
+; GISEL-NEXT: csel x20, x11, x20, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x19, x11, x19, eq
+; GISEL-NEXT: csel x20, x11, x20, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x19, x11, x19, eq
+; GISEL-NEXT: csel x20, x11, x20, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x19, x11, x19, eq
+; GISEL-NEXT: csel x20, x11, x20, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x17, x17, x19, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x5, xzr, x5, eq
+; GISEL-NEXT: csel x2, x2, x20, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x6, xzr, x6, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x5, x6, x5
+; GISEL-NEXT: orr x6, x7, x6
; GISEL-NEXT: ldp x20, x19, [sp, #64] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x5, x5, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x6, xzr, x1, eq
+; GISEL-NEXT: csel x6, x6, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x1, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x6, x2, x6
-; GISEL-NEXT: csel x5, x6, x5, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x6, xzr, x15, eq
+; GISEL-NEXT: orr x7, x3, x7
+; GISEL-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x6, x7, x6, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x16, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x6, x16, x6
-; GISEL-NEXT: csel x5, x6, x5, eq
+; GISEL-NEXT: orr x7, x17, x7
+; GISEL-NEXT: csel x6, x7, x6, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: csel x5, x11, x5, eq
+; GISEL-NEXT: csel x6, x11, x6, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: csel x5, x11, x5, eq
+; GISEL-NEXT: csel x6, x11, x6, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x5, x11, x5, eq
+; GISEL-NEXT: csel x6, x11, x6, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x5, x11, x5, eq
+; GISEL-NEXT: csel x6, x11, x6, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x5, x11, x5, eq
+; GISEL-NEXT: csel x6, x11, x6, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x13, x13, x5, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: csel x14, x14, x6, eq
+; GISEL-NEXT: cmp x12, #0
; GISEL-NEXT: csel x1, xzr, x1, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: stp x17, x13, [x0, #32]
-; GISEL-NEXT: orr x1, x2, x1
+; GISEL-NEXT: stp x2, x14, [x0, #32]
+; GISEL-NEXT: orr x1, x3, x1
; GISEL-NEXT: csel x1, x1, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x2, xzr, x15, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x16, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x2, x16, x2
-; GISEL-NEXT: csel x1, x2, x1, eq
+; GISEL-NEXT: orr x3, x17, x3
+; GISEL-NEXT: csel x1, x3, x1, eq
; GISEL-NEXT: cmp x10, #2
; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #3
@@ -1049,30 +1055,30 @@ define void @test_ashr_i512(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x10, #7
; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x12, x12, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x13, x13, x1, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x15, x16, x15
-; GISEL-NEXT: csel x15, x15, x11, eq
+; GISEL-NEXT: orr x12, x17, x12
+; GISEL-NEXT: csel x12, x12, x11, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: csel x15, x11, x15, eq
+; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: csel x15, x11, x15, eq
+; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: csel x14, x11, x15, eq
+; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: csel x14, x11, x14, eq
+; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x14, x11, x14, eq
+; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x14, x11, x14, eq
+; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x10, x11, x14, eq
+; GISEL-NEXT: csel x10, x11, x12, eq
; GISEL-NEXT: cmp x8, #0
; GISEL-NEXT: csel x8, x9, x10, eq
-; GISEL-NEXT: stp x12, x8, [x0, #48]
-; GISEL-NEXT: ldp x28, x27, [sp], #80 ; 16-byte Folded Reload
+; GISEL-NEXT: stp x13, x8, [x0, #48]
+; GISEL-NEXT: ldp x28, x27, [sp], #96 ; 16-byte Folded Reload
; GISEL-NEXT: ret
entry:
%input_val = load i512, ptr %input, align 64
@@ -1239,47 +1245,41 @@ define void @test_shl_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: ldp x10, x11, [x1]
-; 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 w10, w2
; GISEL-NEXT: mov w13, #64 ; =0x40
-; GISEL-NEXT: and x16, x8, #0x3f
-; GISEL-NEXT: lsl x0, x10, x12
+; GISEL-NEXT: mov x5, x1
+; GISEL-NEXT: lsr x9, x10, #6
+; GISEL-NEXT: and x11, x10, #0x3f
+; GISEL-NEXT: mov x4, x10
+; GISEL-NEXT: ldp x8, x10, [x1]
+; GISEL-NEXT: sub x15, x13, x11
; 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: and x14, x8, #0x3f
-; GISEL-NEXT: csel x12, x0, xzr, eq
+; GISEL-NEXT: str x0, [sp, #120] ; 8-byte Spill
+; GISEL-NEXT: str x5, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT: lsl x22, x8, x11
+; GISEL-NEXT: lsr x27, x8, x15
+; GISEL-NEXT: lsl x26, x10, x11
+; GISEL-NEXT: lsr x3, x10, x15
+; GISEL-NEXT: csel x12, x22, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: lsr x20, x11, x2
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x24, x0
+; GISEL-NEXT: mov x17, x3
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x7, x3
+; GISEL-NEXT: mov x25, x17
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x28, x1
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: and x21, x8, #0x3f
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: str x6, [sp, #24] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: str x28, [sp, #304] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: str x7, [sp, #272] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: str x20, [sp, #112] ; 8-byte Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #10
; GISEL-NEXT: csel x12, xzr, x12, eq
@@ -1293,18 +1293,70 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; 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 x10, x10, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: cmp x4, #0
+; GISEL-NEXT: csel x8, x8, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x8, [sp, #200] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x27, eq
+; GISEL-NEXT: cmp x9, #0
+; GISEL-NEXT: orr x8, x26, x8
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x9, #1
+; GISEL-NEXT: csel x8, x22, x8, eq
+; GISEL-NEXT: cmp x9, #2
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #3
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #4
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #5
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #6
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #7
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #8
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #9
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #10
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #12
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #13
+; GISEL-NEXT: csel x13, xzr, x8, eq
+; GISEL-NEXT: cmp x9, #14
+; GISEL-NEXT: ldp x12, x8, [x1, #16]
+; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: cmp x9, #15
+; GISEL-NEXT: mov x1, x15
+; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: cmp x4, #0
+; GISEL-NEXT: mov x2, x1
+; GISEL-NEXT: lsl x6, x12, x11
+; GISEL-NEXT: csel x10, x10, x13, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [sp, #192] ; 8-byte Spill
; GISEL-NEXT: csel x10, xzr, x3, eq
; GISEL-NEXT: cmp x9, #0
; GISEL-NEXT: orr x10, x6, x10
+; GISEL-NEXT: lsr x15, x12, x15
+; GISEL-NEXT: lsl x14, x8, x11
; GISEL-NEXT: csel x10, x10, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: lsr x16, x8, x1
+; GISEL-NEXT: csel x13, xzr, x27, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x10, x0, x10, eq
+; GISEL-NEXT: mov x28, x6
+; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: str x16, [sp, #272] ; 8-byte Spill
+; GISEL-NEXT: mov x23, x2
+; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: stp x14, x27, [sp, #8] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x10, x22, x10, eq
; GISEL-NEXT: cmp x9, #3
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #4
@@ -1326,137 +1378,200 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #12
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #13
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #14
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #15
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x4, #0
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x15, eq
+; GISEL-NEXT: cmp x9, #0
+; GISEL-NEXT: orr x10, x14, x10
+; GISEL-NEXT: csel x10, x10, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #1
+; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x27, eq
+; GISEL-NEXT: cmp x9, #2
+; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x9, #3
+; GISEL-NEXT: csel x10, x22, x10, eq
+; GISEL-NEXT: cmp x9, #4
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #5
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #6
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #7
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #8
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #9
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #10
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x9, #12
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; 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, [x5, #32]
; 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: 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: cmp x4, #0
+; GISEL-NEXT: lsl x0, x12, x11
+; GISEL-NEXT: csel x8, x8, x13, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x8, [sp, #176] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x16, 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: 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: orr x8, x0, x8
+; GISEL-NEXT: lsr x21, x12, x1
+; GISEL-NEXT: lsl x24, x10, x11
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x15, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x6, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
+; GISEL-NEXT: mov x7, x21
+; GISEL-NEXT: orr x13, x14, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x3, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x27, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, x22, x8, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; 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: csel x11, xzr, x15, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x4, #0
+; GISEL-NEXT: csel x8, x12, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x8, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x21, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x30, x11
-; GISEL-NEXT: csel x11, x11, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: orr x8, x24, x8
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x12, x26, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x3, eq
+; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: csel x8, x12, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x12, x6, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: orr x12, x14, x12
+; GISEL-NEXT: csel x8, x12, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x3, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: lsr x3, x10, x1
+; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: mov x1, x4
+; GISEL-NEXT: csel x8, x12, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x27, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: csel x8, x12, x8, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, x22, x8, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x13, xzr, x11, eq
+; GISEL-NEXT: csel x13, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldp x12, x11, [x1, #32]
+; GISEL-NEXT: ldp x12, x8, [x5, #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 x0, x12, x16
+; GISEL-NEXT: cmp x4, #0
+; GISEL-NEXT: lsl x4, x12, x11
; GISEL-NEXT: csel x10, x10, x13, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x10, [sp, #208] ; 8-byte Spill
-; GISEL-NEXT: csel x10, xzr, x17, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x3, 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: orr x10, x4, x10
+; GISEL-NEXT: lsl x30, x8, x11
+; GISEL-NEXT: lsr x19, x8, x2
; 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 x11, #0
+; GISEL-NEXT: str x4, [sp, #208] ; 8-byte Spill
+; GISEL-NEXT: csel x13, xzr, x21, 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: orr x13, x24, x13
; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x0, x13
; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x15, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: orr x13, x14, x13
; GISEL-NEXT: csel x10, x13, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x17, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x10, x24, x10, eq
+; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: csel x10, x13, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x27, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: lsr x13, x12, x2
+; GISEL-NEXT: csel x10, x22, x10, eq
; GISEL-NEXT: cmp x9, #7
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #8
@@ -1475,42 +1590,50 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; 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: cmp x1, #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: cmp x11, #0
+; GISEL-NEXT: str x10, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x13, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x19, x10
+; GISEL-NEXT: orr x10, x30, x10
; GISEL-NEXT: csel x10, x10, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x17, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x3, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: orr x12, x4, x12
; GISEL-NEXT: csel x10, x12, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x15, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x21, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: and x15, x8, #0x3f
-; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: orr x12, x24, x12
; GISEL-NEXT: csel x10, x12, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: orr x12, x0, x12
; GISEL-NEXT: csel x10, x12, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x3, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: lsr x3, x11, x2
-; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: orr x12, x14, x12
; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x17, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x10, x24, x10, eq
+; GISEL-NEXT: mov x17, x24
+; GISEL-NEXT: orr x12, x6, x12
+; GISEL-NEXT: mov x6, x13
+; GISEL-NEXT: str x17, [sp, #280] ; 8-byte Spill
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x6, [sp, #296] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x27, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x10, x22, x10, eq
; GISEL-NEXT: cmp x9, #8
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #9
@@ -1522,186 +1645,68 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x9, #12
; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x13, xzr, x10, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldp x12, x10, [x1, #48]
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x10, 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: csel x11, x11, x13, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: str x11, [sp, #192] ; 8-byte Spill
-; GISEL-NEXT: csel x11, xzr, x3, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: cmp x1, #0
+; GISEL-NEXT: csel x12, x8, x12, eq
+; GISEL-NEXT: ldp x10, x8, [x5, #64]
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x12, [sp, #144] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x19, 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: csel x11, x11, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
+; GISEL-NEXT: lsl x5, x10, x11
+; GISEL-NEXT: lsr x20, x10, x2
+; GISEL-NEXT: orr x12, x5, x12
+; GISEL-NEXT: mov x2, x5
+; GISEL-NEXT: str x20, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT: csel x12, x12, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x13, 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: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x17, eq
+; GISEL-NEXT: orr x13, x30, x13
+; GISEL-NEXT: csel x12, x13, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x3, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x0, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x16, eq
+; GISEL-NEXT: orr x13, x4, x13
+; GISEL-NEXT: csel x12, x13, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x21, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x30, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
-; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x13, x26, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x7, eq
-; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x6, 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: cmp x9, #7
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: mov x15, x13
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; 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: csel x11, xzr, x13, eq
-; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x5, 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: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x4, eq
-; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x12, x19, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x17, eq
-; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x12, x0, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; 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: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
-; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x12, x26, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x7, eq
-; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x12, x6, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x11, x24, x11, eq
-; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x11, xzr, x11, eq
-; 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: cmp x9, #15
-; GISEL-NEXT: csel x12, xzr, x12, eq
-; GISEL-NEXT: cmp x8, #0
-; 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: 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: 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: 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: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
-; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x19, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x17, eq
+; GISEL-NEXT: mov x21, x6
+; GISEL-NEXT: orr x13, x24, x13
+; GISEL-NEXT: mov x24, x1
+; GISEL-NEXT: csel x12, x13, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x16, eq
; GISEL-NEXT: cmp x9, #4
; GISEL-NEXT: orr x13, x0, x13
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x15, 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: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x25, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: orr x13, x28, x13
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x7, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x27, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x6, x13
+; GISEL-NEXT: orr x13, x26, 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, x22, x12, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: lsl x10, 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
@@ -1711,159 +1716,159 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; 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, #168] ; 8-byte Spill
-; GISEL-NEXT: csel x11, xzr, x21, eq
+; GISEL-NEXT: cmp x1, #0
+; GISEL-NEXT: lsl x1, x8, x11
+; GISEL-NEXT: csel x10, x10, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x20, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x10, x11
-; GISEL-NEXT: mov x10, x23
-; GISEL-NEXT: csel x11, x11, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x27, eq
+; GISEL-NEXT: orr x10, x1, x10
+; GISEL-NEXT: stp x1, x2, [sp, #216] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x10, x10, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x19, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: mov x27, x24
-; GISEL-NEXT: orr x12, x23, x12
-; GISEL-NEXT: mov x23, x15
-; 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: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: stp x14, x5, [sp, #256] ; 16-byte Folded Spill
+; GISEL-NEXT: mov x5, x28
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x6, eq
+; GISEL-NEXT: cmp x9, #2
+; GISEL-NEXT: mov x6, x3
+; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
; GISEL-NEXT: csel x12, xzr, x3, 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: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x4, eq
+; GISEL-NEXT: mov x3, x0
+; GISEL-NEXT: orr x12, x4, x12
+; GISEL-NEXT: mov x4, x27
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x7, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: str x22, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT: orr x12, x19, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x17, eq
+; GISEL-NEXT: orr x12, x17, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #5
+; GISEL-NEXT: mov x16, x15
; GISEL-NEXT: orr x12, x0, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x16, eq
+; GISEL-NEXT: str x16, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x12, x30, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: ldr x15, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: orr x12, x14, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x25, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x12, x26, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x7, eq
+; GISEL-NEXT: orr x12, x28, x12
+; GISEL-NEXT: mov x28, x24
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x28, [sp, #56] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x27, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: mov x7, x14
-; GISEL-NEXT: orr x12, x6, x12
-; GISEL-NEXT: mov x6, x28
-; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: ldr x27, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x11, x24, x11, eq
+; GISEL-NEXT: csel x10, x22, x10, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: ldr x24, [x6, #88]
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: ldr x6, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x12, xzr, x11, eq
-; GISEL-NEXT: ldr x11, [x28, #80]
-; GISEL-NEXT: cmp x8, #0
-; 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: csel x12, xzr, x10, eq
+; GISEL-NEXT: cmp x24, #0
+; GISEL-NEXT: ldp x10, x24, [x15, #80]
+; GISEL-NEXT: csel x12, x8, x12, eq
+; GISEL-NEXT: lsr x8, x8, x23
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x12, [sp, #128] ; 8-byte Spill
+; GISEL-NEXT: mov x15, x6
+; GISEL-NEXT: lsl x0, x10, x11
+; GISEL-NEXT: csel x12, xzr, x8, 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 x8, [sp, #312] ; 8-byte Spill
+; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: stp x23, x0, [sp, #232] ; 16-byte Folded Spill
; GISEL-NEXT: csel x12, x12, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x21, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x20, eq
; GISEL-NEXT: cmp x9, #1
; GISEL-NEXT: orr x13, x1, x13
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x19, 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, x2, x13
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x23, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x21, 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 x21, x30
+; GISEL-NEXT: orr x13, x30, x13
+; GISEL-NEXT: mov x30, x3
+; GISEL-NEXT: str x21, [sp, #288] ; 8-byte Spill
; 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: cmp x11, #0
+; GISEL-NEXT: stp x15, x30, [sp, #64] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x13, xzr, x6, 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: ldr x6, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x27, x13
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x7, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: mov x4, x0
-; GISEL-NEXT: orr x13, x19, x13
+; GISEL-NEXT: orr x13, x17, x13
+; GISEL-NEXT: ldr x17, [sp, #272] ; 8-byte Reload
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; 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: orr x13, x3, x13
+; GISEL-NEXT: mov x3, x17
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
+; GISEL-NEXT: cmp x11, #0
; 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: mov x14, x25
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x25, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: mov x25, x5
+; GISEL-NEXT: orr x13, x5, x13
+; GISEL-NEXT: mov x5, x30
; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x6, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x4, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x13, x0, x13
+; GISEL-NEXT: lsr x4, x10, x23
+; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: lsl x23, x24, x11
; 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: mov x13, x22
+; GISEL-NEXT: csel x12, x22, x12, eq
; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: ldr x22, [sp, #280] ; 8-byte Reload
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: str x13, [sp, #96] ; 8-byte Spill
+; GISEL-NEXT: stp x23, x4, [sp, #256] ; 16-byte Folded Spill
; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #13
; GISEL-NEXT: csel x12, xzr, x12, eq
@@ -1871,475 +1876,470 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
; 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: and x11, x8, #0x3f
-; GISEL-NEXT: lsl x27, x24, x11
-; GISEL-NEXT: csel x11, xzr, x13, eq
+; GISEL-NEXT: cmp x28, #0
+; GISEL-NEXT: csel x10, x10, x12, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: csel x10, xzr, x4, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x11, x27, x11
-; GISEL-NEXT: str x27, [sp, #56] ; 8-byte Spill
-; GISEL-NEXT: csel x11, x11, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x22, eq
+; GISEL-NEXT: orr x10, x23, x10
+; GISEL-NEXT: csel x10, x10, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x8, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: mov x22, x2
-; GISEL-NEXT: orr x12, x2, x12
-; GISEL-NEXT: mov x2, x14
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x21, eq
+; GISEL-NEXT: ldr x8, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: ldr x0, [sp, #8] ; 8-byte Reload
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x20, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: ldr x21, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: mov x20, x15
; GISEL-NEXT: orr x12, x1, x12
-; GISEL-NEXT: mov x1, x27
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x16, eq
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x19, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x12, x21, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x30, eq
+; GISEL-NEXT: orr x12, x2, x12
+; GISEL-NEXT: mov x2, x21
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x6, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x12, x7, x12
-; GISEL-NEXT: mov x7, x15
-; 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: orr x12, x21, x12
+; GISEL-NEXT: mov x21, x25
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x15, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x12, x15, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x5, eq
+; GISEL-NEXT: mov x15, x7
+; GISEL-NEXT: orr x12, x27, x12
+; GISEL-NEXT: str x15, [sp, #40] ; 8-byte Spill
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; 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: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x14, eq
+; GISEL-NEXT: mov x7, x13
+; GISEL-NEXT: orr x12, x22, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x17, 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: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x25, eq
+; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: mov x30, x14
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x16, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x12, x10, x12
-; GISEL-NEXT: ldr x10, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x20, eq
+; GISEL-NEXT: orr x12, x0, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x14, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x12, x26, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x6, eq
+; GISEL-NEXT: orr x12, x25, x12
+; GISEL-NEXT: ldr x25, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT: csel x10, x12, x10, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x12, xzr, x25, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x12, x0, x12
-; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: orr x12, x26, x12
+; GISEL-NEXT: csel x10, x12, x10, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x11, x17, x11, eq
+; GISEL-NEXT: csel x10, x13, x10, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x10, 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: and x10, x8, #0x3f
+; GISEL-NEXT: csel x12, xzr, x10, eq
+; GISEL-NEXT: cmp x28, #0
; 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: ldp x10, x14, [x8, #96]
+; GISEL-NEXT: str x12, [sp, #104] ; 8-byte Spill
+; GISEL-NEXT: ldp x12, x1, [sp, #232] ; 16-byte Folded Reload
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: lsl x16, x10, x11
+; GISEL-NEXT: str x14, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT: lsr x13, x24, x12
+; GISEL-NEXT: ldr x24, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT: str x16, [sp, #24] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x13, 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: csel x10, x10, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: str x13, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT: orr x8, x16, x8
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x4, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x27, x13
-; GISEL-NEXT: ldr x27, [sp, #240] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x27, eq
+; GISEL-NEXT: ldr x4, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT: orr x13, x23, x13
+; GISEL-NEXT: ldp x23, x17, [sp, #216] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x24, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x22, x13
-; GISEL-NEXT: ldr x22, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: orr x13, x1, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x4, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x12, x13
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x16, eq
+; GISEL-NEXT: orr x13, x23, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x19, 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: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x30, eq
+; GISEL-NEXT: orr x13, x17, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x6, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: mov x30, x0
-; GISEL-NEXT: orr x13, x23, x13
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x21, eq
+; GISEL-NEXT: mov x6, x15
+; GISEL-NEXT: orr x13, x2, x13
+; GISEL-NEXT: ldr x2, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x20, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x13, x7, x13
-; GISEL-NEXT: mov x7, x14
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x24, eq
+; GISEL-NEXT: mov x20, x0
+; GISEL-NEXT: orr x13, x27, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x15, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x5, x13
-; GISEL-NEXT: ldr x5, [sp, #48] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x2, eq
+; GISEL-NEXT: orr x13, x22, x13
+; GISEL-NEXT: ldr x22, [sp, #48] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x3, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: ldr x2, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT: mov x3, x30
; GISEL-NEXT: orr x13, x5, x13
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x22, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: mov x25, x6
-; GISEL-NEXT: orr x13, x4, x13
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: orr x13, x0, x13
+; GISEL-NEXT: ldp x15, x0, [sp, #256] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x30, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x13, x26, x13
-; GISEL-NEXT: csel x10, x13, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x22, eq
+; GISEL-NEXT: mov x30, x7
+; GISEL-NEXT: orr x13, x21, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x13, xzr, x25, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x13, x0, x13
-; GISEL-NEXT: csel x10, x13, x10, eq
+; GISEL-NEXT: orr x13, x26, x13
+; GISEL-NEXT: csel x8, x13, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: lsr x13, x11, x28
-; GISEL-NEXT: csel x10, x17, x10, eq
+; GISEL-NEXT: lsr x13, x10, x12
+; GISEL-NEXT: csel x8, x7, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: ldr x17, [sp, #80] ; 8-byte Reload
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: mov x7, x22
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: str x13, [sp, #104] ; 8-byte Spill
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: str x13, [sp, #80] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x8, 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: and x10, x8, #0x3f
-; GISEL-NEXT: lsl x11, x6, x10
-; GISEL-NEXT: csel x10, xzr, x13, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x28, #0
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: lsl x10, x14, x11
+; GISEL-NEXT: str x8, [sp, #96] ; 8-byte Spill
+; GISEL-NEXT: csel x8, 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: orr x10, x11, x10
-; GISEL-NEXT: str x11, [sp, #88] ; 8-byte Spill
-; GISEL-NEXT: csel x10, x10, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: orr x8, x10, x8
+; GISEL-NEXT: str x10, [sp, #320] ; 8-byte Spill
+; GISEL-NEXT: ldr x13, [sp, #64] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: mov x14, x23
+; GISEL-NEXT: csel x10, xzr, x2, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x2, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x15, eq
+; GISEL-NEXT: orr x10, x16, x10
+; GISEL-NEXT: ldp x5, x12, [sp, #272] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x0, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x15, x3
-; GISEL-NEXT: orr x11, x1, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x27, eq
+; GISEL-NEXT: orr x10, x15, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x24, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x0, x11
-; 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: mov x24, x20
+; GISEL-NEXT: orr x10, x1, x10
+; GISEL-NEXT: ldr x1, [sp, #32] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x4, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x11, x12, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x3, eq
+; GISEL-NEXT: orr x10, x23, x10
+; GISEL-NEXT: ldp x4, x28, [sp, #288] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: mov x23, x30
+; GISEL-NEXT: csel x10, xzr, x19, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x11, x13, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: orr x10, x17, x10
+; GISEL-NEXT: ldr x17, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x28, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x23, x11
-; GISEL-NEXT: mov x23, x5
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x21, eq
+; GISEL-NEXT: orr x10, x4, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x13, 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: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x24, eq
+; GISEL-NEXT: orr x10, x27, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x6, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x11, x12, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x19, eq
+; GISEL-NEXT: ldr x6, [sp, #72] ; 8-byte Reload
+; GISEL-NEXT: orr x10, x12, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x5, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x11, x5, x11
-; GISEL-NEXT: mov x5, x30
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x17, eq
+; GISEL-NEXT: orr x10, x6, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x22, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x11, x4, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x20, eq
+; GISEL-NEXT: mov x22, x21
+; GISEL-NEXT: orr x10, x20, x10
+; GISEL-NEXT: ldr x20, [sp, #56] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x3, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x11, x26, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x22, eq
+; GISEL-NEXT: orr x10, x21, x10
+; GISEL-NEXT: ldr x21, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x25, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: orr x11, x30, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
+; GISEL-NEXT: orr x10, x26, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x10, x16, x10, eq
+; GISEL-NEXT: csel x8, x30, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: ldr x16, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x8, xzr, x8, 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: tst x8, #0x3f
-; GISEL-NEXT: ldr x25, [sp, #88] ; 8-byte Reload
-; GISEL-NEXT: lsl x24, x10, x16
-; GISEL-NEXT: csel x1, xzr, x11, eq
+; GISEL-NEXT: csel x10, xzr, x8, eq
+; GISEL-NEXT: cmp x20, #0
+; GISEL-NEXT: ldp x8, x17, [x17, #112]
+; GISEL-NEXT: csel x10, x1, x10, eq
+; GISEL-NEXT: str x10, [sp, #88] ; 8-byte Spill
+; GISEL-NEXT: lsr x10, x1, x21
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: lsl x27, x8, x11
+; GISEL-NEXT: csel x1, xzr, x10, 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 x10, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT: ldr x10, [sp, #320] ; 8-byte Reload
+; GISEL-NEXT: str x27, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT: orr x1, x27, x1
+; GISEL-NEXT: ldr x27, [sp, #80] ; 8-byte Reload
; GISEL-NEXT: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x28, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x27, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x30, x25, x30
+; GISEL-NEXT: orr x30, x10, x30
+; GISEL-NEXT: ldr x10, [sp, #32] ; 8-byte Reload
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x7, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x2, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x30, x2, x30
-; GISEL-NEXT: ldr x2, [sp, #56] ; 8-byte Reload
+; GISEL-NEXT: ldr x2, [sp, #40] ; 8-byte Reload
+; GISEL-NEXT: orr x30, x16, x30
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x16, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x0, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x30, x2, x30
+; GISEL-NEXT: orr x30, x15, x30
+; GISEL-NEXT: ldr x15, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT: ldp x0, x16, [sp, #240] ; 16-byte Folded Reload
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x27, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x15, 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: 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: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x16, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x30, x15, x30
+; GISEL-NEXT: orr x30, x14, x30
+; GISEL-NEXT: ldr x14, [sp, #224] ; 8-byte Reload
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x3, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x19, eq
; 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: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x28, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x30, x13, x30
+; GISEL-NEXT: orr x30, x4, x30
+; GISEL-NEXT: mov x4, x13
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x14, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x13, eq
+; GISEL-NEXT: ldr x13, [sp, #208] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x30, x3, x30
+; GISEL-NEXT: orr x30, x13, x30
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x0, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x2, eq
; GISEL-NEXT: cmp x9, #9
; GISEL-NEXT: orr x30, x12, x30
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x19, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x5, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x30, x23, x30
+; GISEL-NEXT: orr x30, x6, x30
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x17, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x7, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x30, x21, x30
+; GISEL-NEXT: orr x30, x24, x30
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x20, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x3, 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, x22, x30
; GISEL-NEXT: csel x1, x30, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x30, xzr, x22, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x30, xzr, x25, 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, x26, x30
; GISEL-NEXT: csel x1, x30, x1, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, x6, x1, eq
+; GISEL-NEXT: lsr x30, x8, x21
+; GISEL-NEXT: csel x1, x23, x1, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: lsr x30, x10, x5
; GISEL-NEXT: csel x1, xzr, x1, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x5, x10, x1, eq
-; GISEL-NEXT: and x10, x8, #0x3f
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x10, x4, x10
+; GISEL-NEXT: cmp x20, #0
+; GISEL-NEXT: csel x21, x8, x1, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: lsl x8, x17, x11
; 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: csel x10, x10, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: orr x8, x8, x1
+; GISEL-NEXT: ldr x1, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x24, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x28, eq
+; GISEL-NEXT: orr x10, x1, x10
+; GISEL-NEXT: ldr x1, [sp, #320] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x27, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x11, x25, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x7, eq
+; GISEL-NEXT: orr x10, x1, x10
+; GISEL-NEXT: ldr x1, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: ldr x10, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: ldp x29, x30, [sp, #416] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x1, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x16, eq
+; GISEL-NEXT: orr x10, x1, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: ldp x1, x10, [sp, #256] ; 16-byte Folded Reload
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: ldr x16, [sp, #280] ; 8-byte Reload
-; GISEL-NEXT: orr x11, x2, 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: orr x10, x1, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x15, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x11, x16, 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: ldr x15, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: orr x10, x0, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x16, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x15, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #328] ; 8-byte Reload
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: orr x10, x15, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x19, 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: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #320] ; 8-byte Reload
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: orr x10, x14, x10
+; GISEL-NEXT: ldr x14, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x28, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x11, x13, x11
-; GISEL-NEXT: ldr x13, [sp, #144] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: orr x10, x14, x10
+; GISEL-NEXT: ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x4, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x11, x3, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x0, eq
+; GISEL-NEXT: orr x10, x13, x10
+; GISEL-NEXT: ldr x13, [sp, #120] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: csel x10, xzr, x2, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x11, x12, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #232] ; 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: orr x10, x12, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: ldr x10, [sp, #200] ; 8-byte Reload
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [x13]
+; GISEL-NEXT: ldp x12, x10, [sp, #184] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x10, x12, [x13, #8]
+; GISEL-NEXT: csel x10, xzr, x5, 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: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #208] ; 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: orr x10, x6, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: ldr x10, [sp, #176] ; 8-byte Reload
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [x13, #24]
+; GISEL-NEXT: ldp x12, x10, [sp, #160] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x10, x12, [x13, #32]
+; GISEL-NEXT: csel x10, xzr, x7, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: orr x11, x21, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #184] ; 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: orr x10, x24, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: ldr x10, [sp, #152] ; 8-byte Reload
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: str x10, [x13, #48]
+; GISEL-NEXT: ldp x12, x10, [sp, #136] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x10, x12, [x13, #56]
+; GISEL-NEXT: csel x10, xzr, x3, 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: csel x10, x11, x10, eq
-; GISEL-NEXT: ldr x11, [sp, #160] ; 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: orr x10, x22, x10
+; GISEL-NEXT: csel x8, x10, x8, eq
+; GISEL-NEXT: cmp x11, #0
+; GISEL-NEXT: ldr x11, [sp, #128] ; 8-byte Reload
+; GISEL-NEXT: ldr x10, [sp, #112] ; 8-byte Reload
+; GISEL-NEXT: stp x11, x10, [x13, #72]
+; GISEL-NEXT: csel x10, xzr, x25, 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: csel x10, x11, x10, eq
+; GISEL-NEXT: orr x10, x26, x10
+; GISEL-NEXT: ldr x11, [sp, #104] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x10, x8, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: ldr x9, [sp, #128] ; 8-byte Reload
+; GISEL-NEXT: ldp x9, x10, [sp, #88] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x23, x8, eq
+; GISEL-NEXT: cmp x20, #0
+; GISEL-NEXT: ldp x20, x19, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x24, x23, [sp, #368] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x17, x8, eq
+; GISEL-NEXT: stp x9, x21, [x13, #104]
+; GISEL-NEXT: ldp x22, x21, [sp, #384] ; 16-byte Folded 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: 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: stp x11, x10, [x13, #88]
; GISEL-NEXT: str x8, [x13, #120]
; GISEL-NEXT: add sp, sp, #432
; GISEL-NEXT: ret
@@ -2482,14 +2482,14 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
;
; GISEL-LABEL: test_lshr_i1024:
; GISEL: ; %bb.0: ; %entry
-; GISEL-NEXT: sub sp, sp, #416
-; GISEL-NEXT: stp x28, x27, [sp, #320] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x26, x25, [sp, #336] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x24, x23, [sp, #352] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x22, x21, [sp, #368] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x20, x19, [sp, #384] ; 16-byte Folded Spill
-; GISEL-NEXT: stp x29, x30, [sp, #400] ; 16-byte Folded Spill
-; GISEL-NEXT: .cfi_def_cfa_offset 416
+; 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: .cfi_offset w30, -8
; GISEL-NEXT: .cfi_offset w29, -16
; GISEL-NEXT: .cfi_offset w19, -24
@@ -2503,773 +2503,730 @@ 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 x14, x13, [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: ands x10, x8, #0x3f
+; GISEL-NEXT: mov x6, x8
+; GISEL-NEXT: sub x15, x9, x10
; GISEL-NEXT: lsr x9, x8, #6
-; GISEL-NEXT: lsr x11, x20, x14
-; 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: str x6, [sp, #88] ; 8-byte Spill
+; GISEL-NEXT: stp x14, x0, [sp, #304] ; 16-byte Folded Spill
+; GISEL-NEXT: lsl x11, x13, x15
+; GISEL-NEXT: lsr x12, x14, x10
+; GISEL-NEXT: ldp x8, x14, [x1, #16]
+; GISEL-NEXT: lsr x27, x13, x10
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x11, x10
-; GISEL-NEXT: str x12, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT: lsr x26, x12, x14
-; 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: orr x11, x12, x11
+; GISEL-NEXT: lsl x16, x8, x15
+; GISEL-NEXT: csel x11, x11, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsl x17, x14, x15
+; GISEL-NEXT: str x8, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x16, eq
+; GISEL-NEXT: stp x13, x14, [sp, #192] ; 16-byte Folded Spill
+; GISEL-NEXT: lsr x13, x8, x10
+; GISEL-NEXT: stp x17, x16, [sp, #168] ; 16-byte Folded Spill
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: lsr x5, x13, x14
-; GISEL-NEXT: orr x11, x19, x11
-; 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: orr x12, x27, x12
+; GISEL-NEXT: ldp x8, x16, [x1, #32]
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x13, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT: csel x12, xzr, x17, 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: 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: lsl x0, x8, x15
+; GISEL-NEXT: orr x12, x13, x12
+; GISEL-NEXT: lsr x13, x14, x10
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: stp x8, x16, [sp, #208] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x12, xzr, x0, eq
+; GISEL-NEXT: stp x13, x0, [sp, #320] ; 16-byte Folded Spill
+; GISEL-NEXT: lsr x17, x8, x10
; GISEL-NEXT: lsl x0, x16, x15
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x5, x11
-; 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: csel x11, xzr, x0, eq
+; GISEL-NEXT: orr x12, x13, x12
+; GISEL-NEXT: ldp x14, x8, [x1, #48]
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x16, x16, x10
+; GISEL-NEXT: csel x12, 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: orr x11, x17, x11
-; GISEL-NEXT: stp x13, x12, [sp, #192] ; 16-byte Folded Spill
-; 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 x13, x14, x15
+; GISEL-NEXT: orr x12, x17, x12
+; GISEL-NEXT: stp x14, x8, [sp, #224] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x13, eq
+; GISEL-NEXT: stp x13, x17, [sp, #144] ; 16-byte Folded Spill
+; GISEL-NEXT: lsr x17, x14, x10
+; GISEL-NEXT: lsl x13, x8, x15
+; GISEL-NEXT: mov x14, x8
; 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: 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: orr x12, x16, x12
+; GISEL-NEXT: ldp x8, x5, [x1, #64]
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x2, x14, x10
+; GISEL-NEXT: csel x12, xzr, x13, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: lsl x3, x4, x15
-; GISEL-NEXT: orr x11, x13, x11
-; GISEL-NEXT: str x4, [sp, #208] ; 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: stp x13, x16, [sp, #128] ; 16-byte Folded Spill
+; GISEL-NEXT: lsl x24, x8, x15
+; GISEL-NEXT: orr x12, x17, x12
+; GISEL-NEXT: stp x8, x5, [sp, #240] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x22, x8, x10
+; GISEL-NEXT: csel x12, xzr, x24, 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: 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: str x17, [sp, #120] ; 8-byte Spill
+; GISEL-NEXT: orr x12, x2, x12
+; GISEL-NEXT: ldp x3, x8, [x1, #80]
+; GISEL-NEXT: csel x16, x12, x11, eq
+; GISEL-NEXT: lsl x12, x5, x15
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x21, x5, x10
+; GISEL-NEXT: stp x2, x22, [sp, #72] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x17, xzr, x12, 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: 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: lsl x4, x3, x15
+; GISEL-NEXT: orr x17, x22, x17
+; GISEL-NEXT: lsl x23, x8, x15
+; GISEL-NEXT: mov x5, x8
+; GISEL-NEXT: csel x16, x17, x16, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x8, [sp, #272] ; 8-byte Spill
+; GISEL-NEXT: csel x17, xzr, x4, 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: 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: csel x2, xzr, x12, eq
-; GISEL-NEXT: orr x2, x10, x2
-; GISEL-NEXT: ldp x10, x30, [x1, #104]
+; GISEL-NEXT: lsr x20, x3, x10
+; GISEL-NEXT: orr x17, x21, x17
+; GISEL-NEXT: ldp x11, x8, [x1, #96]
+; GISEL-NEXT: csel x16, x17, x16, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x12, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: csel x17, xzr, x23, eq
; 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 x28, x5, x10
+; GISEL-NEXT: orr x17, x20, x17
+; GISEL-NEXT: lsl x12, x11, x15
+; GISEL-NEXT: str x3, [sp, #256] ; 8-byte Spill
+; GISEL-NEXT: csel x16, x17, x16, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: mov x3, x11
+; GISEL-NEXT: csel x17, xzr, x12, eq
+; GISEL-NEXT: stp x11, x8, [sp, #280] ; 16-byte Folded Spill
+; GISEL-NEXT: mov x5, x12
+; GISEL-NEXT: str x12, [sp, #24] ; 8-byte Spill
; GISEL-NEXT: cmp x9, #11
-; 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: 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: csel x2, xzr, x12, eq
+; GISEL-NEXT: orr x17, x28, x17
+; GISEL-NEXT: lsl x13, x8, x15
+; GISEL-NEXT: mov x11, x8
+; GISEL-NEXT: csel x16, x17, x16, eq
+; GISEL-NEXT: ldp x8, x12, [x1, #112]
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: lsr x26, x3, x10
+; GISEL-NEXT: csel x17, xzr, x13, 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: 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: lsr x11, x11, x10
+; GISEL-NEXT: str x24, [sp, #56] ; 8-byte Spill
+; GISEL-NEXT: orr x17, x26, x17
+; GISEL-NEXT: lsl x25, x8, x15
+; GISEL-NEXT: lsl x30, x12, x15
+; GISEL-NEXT: csel x17, x17, x16, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: stp x11, x13, [sp, #96] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x16, xzr, x25, 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: 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: lsr x19, x8, x10
+; GISEL-NEXT: orr x11, x11, x16
+; GISEL-NEXT: str x8, [sp, #296] ; 8-byte Spill
+; GISEL-NEXT: lsr x7, x12, x10
+; GISEL-NEXT: csel x11, x11, x17, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x12, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT: csel x15, xzr, x30, 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: csel x1, x30, x1, eq
+; GISEL-NEXT: str x21, [sp, #64] ; 8-byte Spill
+; GISEL-NEXT: orr x8, x19, x15
+; GISEL-NEXT: ldp x12, x3, [sp, #152] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x8, x11, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: mov x30, x7
-; GISEL-NEXT: csel x1, x10, x1, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x10, x20, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x22, eq
+; GISEL-NEXT: ldr x11, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x7, x8, eq
+; GISEL-NEXT: cmp x6, #0
+; GISEL-NEXT: stp x20, x4, [sp, #8] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: stp x19, x30, [sp, #40] ; 16-byte Folded Spill
+; GISEL-NEXT: str x8, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT: ldp x17, x8, [sp, #168] ; 16-byte Folded Reload
+; GISEL-NEXT: ldp x15, x13, [sp, #320] ; 16-byte Folded Reload
+; GISEL-NEXT: str x7, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT: ldp x1, x16, [sp, #120] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: str x10, [sp, #168] ; 8-byte Spill
-; GISEL-NEXT: orr x1, x19, x1
-; GISEL-NEXT: ldp x20, x14, [sp, #112] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x24, eq
+; GISEL-NEXT: orr x8, x27, x8
+; GISEL-NEXT: mov x27, x0
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x17, 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: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x23, eq
+; GISEL-NEXT: orr x11, x3, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x13, 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: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x13, eq
+; GISEL-NEXT: orr x11, x15, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x0, eq
+; GISEL-NEXT: ldp x0, x14, [sp, #136] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x12, x11
; 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: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x19, x7, x19
-; GISEL-NEXT: mov x7, x0
-; 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: orr x11, x0, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x19, x0, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x24, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x19, x23, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
-; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x19, x14, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x15, eq
-; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x19, x20, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x22, eq
-; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x10, x19
-; GISEL-NEXT: ldr x10, [sp, #264] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x28, eq
-; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x19, x16, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
-; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x19, x4, 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: cmp x9, #12
-; 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: cmp x9, #13
-; GISEL-NEXT: orr x19, x27, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, x28, x1, eq
-; GISEL-NEXT: cmp x9, #15
-; 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: 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: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: mov x26, x13
-; 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: 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: orr x19, x11, x19
-; GISEL-NEXT: mov x11, x17
-; 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: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: mov x27, x30
-; GISEL-NEXT: csel x19, xzr, x7, eq
-; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: mov x7, x14
-; GISEL-NEXT: orr x19, x0, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, 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: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
-; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x19, x14, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x15, eq
+; GISEL-NEXT: ldr x24, [sp, #104] ; 8-byte Reload
+; GISEL-NEXT: orr x11, x2, x11
+; GISEL-NEXT: ldr x2, [sp, #112] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x2, 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: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x22, eq
+; GISEL-NEXT: orr x11, x22, x11
+; GISEL-NEXT: mov x22, x12
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x4, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: ldr x22, [sp, #56] ; 8-byte Reload
-; GISEL-NEXT: orr x19, x15, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x20, eq
+; GISEL-NEXT: orr x11, x21, x11
+; GISEL-NEXT: mov x21, x28
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x23, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x16, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x5, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x19, x4, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x14, eq
+; GISEL-NEXT: mov x5, x26
+; GISEL-NEXT: orr x11, x28, x11
+; GISEL-NEXT: mov x28, x27
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x24, eq
; GISEL-NEXT: cmp x9, #11
-; 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: orr x11, x26, x11
+; GISEL-NEXT: ldr x26, [sp, #96] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x25, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: orr x19, x22, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
+; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x30, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: mov x30, x2
+; GISEL-NEXT: orr x11, x19, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: ldr x11, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x7, x8, eq
; GISEL-NEXT: cmp x9, #15
-; 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: str x10, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT: ldr x10, [sp, #32] ; 8-byte Reload
-; GISEL-NEXT: csel x1, xzr, x10, eq
-; GISEL-NEXT: ldr x10, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: mov x7, x21
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x6, #0
+; GISEL-NEXT: ldr x6, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x8, [sp, #192] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x17, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x1, x10, x1
-; GISEL-NEXT: ldr x10, [sp, #216] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x26, eq
+; GISEL-NEXT: orr x8, x3, x8
+; GISEL-NEXT: ldr x17, [sp, #56] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x19, x24, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x11, eq
+; GISEL-NEXT: mov x13, x16
+; GISEL-NEXT: orr x11, x15, x11
+; GISEL-NEXT: mov x15, x24
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x27, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x19, x12, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x30, eq
+; GISEL-NEXT: mov x27, x5
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: ldp x12, x3, [sp, #72] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: mov x30, x0
-; 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, x23, eq
+; GISEL-NEXT: orr x11, x0, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x19, x13, x19
-; GISEL-NEXT: mov x13, x3
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
+; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x17, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x19, x7, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x5, eq
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x2, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: mov x5, x17
-; GISEL-NEXT: orr x19, x17, x19
-; GISEL-NEXT: mov x17, x22
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: ldr x2, [sp, #88] ; 8-byte Reload
+; GISEL-NEXT: orr x11, x3, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x4, eq
+; GISEL-NEXT: ldr x4, [sp, #64] ; 8-byte Reload
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: mov x3, x20
-; GISEL-NEXT: orr x19, x15, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x20, eq
+; GISEL-NEXT: orr x11, x4, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x23, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: mov x20, x14
-; GISEL-NEXT: orr x19, x16, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: ldp x20, x19, [sp, #40] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x19, x4, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x14, eq
+; GISEL-NEXT: orr x11, x21, x11
+; GISEL-NEXT: ldr x21, [sp, #32] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x24, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: mov x14, x13
-; 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: mov x24, x22
+; GISEL-NEXT: orr x11, x5, x11
+; GISEL-NEXT: mov x5, x14
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x25, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: orr x19, x22, x19
-; GISEL-NEXT: mov x22, x30
-; GISEL-NEXT: csel x1, x19, x1, eq
+; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x19, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: ldr x11, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x21, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #15
-; 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, x26, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x2, #0
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x8, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT: ldp x11, x8, [sp, #320] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: str x10, [sp, #216] ; 8-byte Spill
-; GISEL-NEXT: orr x1, x24, x1
-; 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: orr x8, x11, x8
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x28, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x19, x12, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x27, eq
+; GISEL-NEXT: orr x11, x22, x11
+; GISEL-NEXT: mov x22, x3
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x19, x30, x19
-; GISEL-NEXT: ldr x30, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x23, eq
+; GISEL-NEXT: orr x11, x0, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x19, x0, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x6, eq
+; GISEL-NEXT: mov x16, x30
+; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x17, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x19, x7, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x30, eq
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x30, eq
+; GISEL-NEXT: ldp x30, x14, [sp, #8] ; 16-byte Folded Reload
+; GISEL-NEXT: orr x11, x3, x11
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x19, x5, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x13, eq
+; GISEL-NEXT: mov x3, x7
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x19, x15, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x3, eq
+; GISEL-NEXT: orr x11, x4, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x23, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x19, x16, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x2, eq
+; GISEL-NEXT: orr x11, x30, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x19, x4, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x19, xzr, x20, eq
+; GISEL-NEXT: orr x11, x7, x11
+; GISEL-NEXT: mov x7, x15
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x15, eq
; GISEL-NEXT: cmp x9, #9
-; 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: mov x15, x2
+; GISEL-NEXT: orr x11, x27, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x25, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: orr x19, x17, x19
-; GISEL-NEXT: csel x1, x19, x1, eq
+; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x19, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: ldr x11, [sp, #200] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x21, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x1, xzr, x1, eq
-; GISEL-NEXT: cmp x8, #0
-; 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 x8, xzr, x8, eq
+; GISEL-NEXT: cmp x2, #0
+; GISEL-NEXT: mov x2, x13
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x8, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x28, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: mov x11, x23
-; GISEL-NEXT: orr x1, x12, x1
-; GISEL-NEXT: mov x12, x0
-; GISEL-NEXT: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x27, eq
+; GISEL-NEXT: orr x8, x24, x8
+; GISEL-NEXT: mov x28, x12
+; GISEL-NEXT: mov x24, x14
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x5, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x3, x22, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x23, eq
+; GISEL-NEXT: orr x11, x0, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: mov x23, x17
-; GISEL-NEXT: orr x3, x0, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x6, eq
+; GISEL-NEXT: mov x13, x17
+; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x17, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x3, x7, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x30, eq
+; GISEL-NEXT: mov x17, x22
+; GISEL-NEXT: orr x11, x12, x11
+; GISEL-NEXT: mov x12, x15
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x3, x26, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x13, eq
+; GISEL-NEXT: orr x11, x22, x11
+; GISEL-NEXT: mov x22, x23
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, 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: mov x14, x13
+; GISEL-NEXT: orr x11, x4, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x23, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x3, x16, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x2, eq
+; GISEL-NEXT: mov x23, x30
+; GISEL-NEXT: orr x11, x30, x11
+; GISEL-NEXT: mov x30, x3
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x3, x4, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x20, eq
+; GISEL-NEXT: orr x11, x3, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x7, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x3, x21, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x25, eq
+; GISEL-NEXT: orr x11, x27, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x25, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: orr x3, x17, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
+; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x19, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: mov x3, x4
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: ldr x11, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x21, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #15
-; 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 x17, xzr, x27, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x15, #0
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: str x8, [sp, #320] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x5, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: str x10, [sp, #184] ; 8-byte Spill
-; GISEL-NEXT: orr x17, x22, x17
-; 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: orr x8, x0, x8
+; GISEL-NEXT: mov x0, x24
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x2, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x0, x12, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x6, eq
+; GISEL-NEXT: orr x11, x1, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x13, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x0, x7, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x30, eq
+; GISEL-NEXT: orr x11, x28, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x0, x26, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x13, eq
+; GISEL-NEXT: orr x11, x17, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x24, 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: mov x24, x26
+; GISEL-NEXT: orr x11, x4, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x22, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x0, x16, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x2, eq
+; GISEL-NEXT: orr x11, x23, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x0, x4, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x20, eq
+; GISEL-NEXT: orr x11, x30, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x7, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x0, x21, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x25, eq
+; GISEL-NEXT: orr x11, x27, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x25, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: orr x0, x23, x0
-; GISEL-NEXT: csel x17, x0, x17, eq
+; GISEL-NEXT: orr x11, x26, x11
+; GISEL-NEXT: mov x26, x15
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x19, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x17, x28, x17, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: ldr x11, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x21, x8, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x17, xzr, x17, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x17, xzr, x17, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x17, x10, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: ldr x10, [sp, #200] ; 8-byte Reload
-; GISEL-NEXT: csel x13, xzr, x11, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: mov x12, x17
+; GISEL-NEXT: csel x13, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x8, xzr, x2, eq
; GISEL-NEXT: cmp x9, #0
-; 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: orr x8, x1, x8
+; GISEL-NEXT: mov x1, x4
+; GISEL-NEXT: csel x8, x8, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x13, x7, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x30, eq
+; GISEL-NEXT: orr x11, x28, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x26, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x14, eq
+; GISEL-NEXT: orr x11, x17, x11
+; GISEL-NEXT: mov x17, x0
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x0, eq
; GISEL-NEXT: cmp x9, #3
-; 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: orr x11, x4, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x22, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x13, x16, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x2, eq
+; GISEL-NEXT: orr x11, x23, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x6, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x4, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: orr x11, x30, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x7, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x13, x21, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: orr x11, x27, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x25, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: orr x13, x23, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
+; GISEL-NEXT: orr x11, x24, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x19, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x12, x28, x12, eq
+; GISEL-NEXT: orr x11, x20, x11
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: ldr x11, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x21, x8, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x12, xzr, x12, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x12, xzr, x12, eq
-; 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 x8, xzr, x8, eq
+; GISEL-NEXT: cmp x15, #0
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x14, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x10, x7, x11
-; GISEL-NEXT: csel x10, x10, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x30, eq
+; GISEL-NEXT: orr x11, x28, x11
+; GISEL-NEXT: csel x11, x11, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x16, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x11, x26, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x14, eq
+; GISEL-NEXT: orr x0, x12, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x17, eq
; GISEL-NEXT: cmp x9, #2
-; 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: orr x0, x1, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x22, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x11, x16, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x2, eq
+; GISEL-NEXT: orr x0, x23, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x6, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x11, x4, x11
-; GISEL-NEXT: ldr x4, [sp, #168] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x20, eq
+; GISEL-NEXT: orr x0, x30, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x7, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x11, x21, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x11, xzr, x25, eq
+; GISEL-NEXT: orr x0, x27, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x25, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: orr x11, x23, x11
-; GISEL-NEXT: csel x10, x11, x10, eq
+; GISEL-NEXT: orr x0, x24, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x0, xzr, x19, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: ldr x11, [sp, #208] ; 8-byte Reload
-; GISEL-NEXT: csel x10, x28, x10, eq
+; GISEL-NEXT: orr x0, x20, x0
+; GISEL-NEXT: csel x11, x0, x11, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: ldr x0, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT: csel x11, x21, x11, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x11, xzr, x11, 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: csel x11, xzr, x30, eq
+; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x0, x0, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x11, xzr, x16, 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, x12, x11
; GISEL-NEXT: csel x11, x11, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x14, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x17, eq
; GISEL-NEXT: cmp x9, #1
-; 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: orr x12, x4, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x22, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x13, x16, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x2, eq
+; GISEL-NEXT: orr x12, x23, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x6, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x13, x3, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x20, eq
+; GISEL-NEXT: orr x12, x30, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x7, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x13, x21, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x25, eq
+; GISEL-NEXT: orr x12, x27, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x25, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: orr x13, x23, x13
-; GISEL-NEXT: csel x11, x13, x11, eq
+; GISEL-NEXT: orr x12, x24, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x19, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: ldr x13, [sp, #224] ; 8-byte Reload
-; GISEL-NEXT: csel x11, x28, x11, eq
+; GISEL-NEXT: orr x12, x20, x12
+; GISEL-NEXT: csel x11, x12, x11, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x11, xzr, x11, eq
+; GISEL-NEXT: ldr x12, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: csel x11, x21, x11, eq
; GISEL-NEXT: cmp x9, #8
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #9
@@ -3286,282 +3243,338 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x11, xzr, x11, eq
; GISEL-NEXT: cmp x9, #15
; GISEL-NEXT: csel x11, xzr, x11, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x11, x13, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x14, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x11, x12, x11, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x12, xzr, x17, eq
; GISEL-NEXT: cmp x9, #0
-; 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: orr x12, x4, x12
+; GISEL-NEXT: ldp x16, x17, [sp, #296] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x12, x12, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x14, xzr, x22, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x0, x16, x0
-; GISEL-NEXT: csel x13, x0, x13, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x2, eq
+; GISEL-NEXT: orr x14, x23, x14
+; GISEL-NEXT: csel x12, x14, x12, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x14, xzr, x6, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x0, x3, x0
-; GISEL-NEXT: csel x13, x0, x13, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x20, eq
+; GISEL-NEXT: orr x14, x30, x14
+; GISEL-NEXT: csel x12, x14, x12, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x14, xzr, x7, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x0, x21, x0
-; GISEL-NEXT: csel x13, x0, x13, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x25, eq
+; GISEL-NEXT: orr x14, x27, x14
+; GISEL-NEXT: csel x12, x14, x12, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x14, xzr, x25, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: orr x0, x23, x0
-; GISEL-NEXT: csel x13, x0, x13, eq
+; GISEL-NEXT: orr x14, x24, x14
+; GISEL-NEXT: csel x12, x14, x12, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x14, xzr, x19, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: ldr x0, [sp, #232] ; 8-byte Reload
-; GISEL-NEXT: csel x13, x28, x13, eq
+; GISEL-NEXT: orr x14, x20, x14
+; GISEL-NEXT: csel x12, x14, x12, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: ldr x14, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT: csel x12, x21, x12, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x13, xzr, x13, eq
+; GISEL-NEXT: csel x12, xzr, x12, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x13, xzr, x13, eq
-; 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 x12, xzr, x12, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x12, x14, x12, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x14, xzr, x22, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x0, x16, x0
-; GISEL-NEXT: ldr x16, [sp, #280] ; 8-byte Reload
-; GISEL-NEXT: csel x0, x0, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x2, eq
+; GISEL-NEXT: orr x14, x23, x14
+; GISEL-NEXT: csel x14, x14, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x2, xzr, x6, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x1, x3, x1
-; GISEL-NEXT: csel x0, x1, x0, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x20, eq
+; GISEL-NEXT: orr x2, x30, x2
+; GISEL-NEXT: csel x14, x2, x14, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x2, xzr, x7, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x1, x21, x1
-; GISEL-NEXT: csel x0, x1, x0, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x1, xzr, x25, eq
+; GISEL-NEXT: orr x2, x27, x2
+; GISEL-NEXT: csel x14, x2, x14, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x2, xzr, x25, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: orr x1, x23, x1
-; GISEL-NEXT: csel x0, x1, x0, eq
+; GISEL-NEXT: orr x2, x24, x2
+; GISEL-NEXT: csel x14, x2, x14, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x2, xzr, x19, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: ldr x1, [sp, #248] ; 8-byte Reload
-; GISEL-NEXT: csel x0, x28, x0, eq
+; GISEL-NEXT: orr x2, x20, x2
+; GISEL-NEXT: csel x14, x2, x14, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: ldr x2, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT: csel x14, x21, x14, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x0, xzr, x0, eq
+; GISEL-NEXT: csel x14, xzr, x14, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x0, xzr, x0, eq
-; 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 x14, xzr, x14, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x14, x2, x14, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x2, xzr, x6, eq
; GISEL-NEXT: cmp x9, #0
-; GISEL-NEXT: orr x1, x3, x1
-; GISEL-NEXT: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x20, eq
+; GISEL-NEXT: orr x2, x30, x2
+; GISEL-NEXT: ldp x29, x30, [sp, #416] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x2, x2, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x4, xzr, x7, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x3, x21, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x25, eq
+; GISEL-NEXT: orr x4, x27, x4
+; GISEL-NEXT: csel x2, x4, x2, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x4, xzr, x25, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: orr x3, x23, x3
-; GISEL-NEXT: csel x1, x3, x1, eq
+; GISEL-NEXT: orr x4, x24, x4
+; GISEL-NEXT: csel x2, x4, x2, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x4, xzr, x19, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: ldr x3, [sp, #256] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: orr x4, x20, x4
+; GISEL-NEXT: csel x2, x4, x2, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: ldr x4, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT: csel x2, x21, x2, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x2, xzr, x2, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x1, xzr, x1, eq
-; 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 x2, xzr, x2, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x2, x4, x2, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x4, xzr, x7, 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: csel x1, x1, xzr, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x2, xzr, x25, eq
+; GISEL-NEXT: orr x4, x27, x4
+; GISEL-NEXT: ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x4, x4, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x6, xzr, x25, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: orr x2, x23, x2
-; GISEL-NEXT: csel x1, x2, x1, eq
+; GISEL-NEXT: orr x6, x24, x6
+; GISEL-NEXT: csel x4, x6, x4, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x6, xzr, x19, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: ldr x2, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT: csel x1, x28, x1, eq
+; GISEL-NEXT: orr x6, x20, x6
+; GISEL-NEXT: csel x4, x6, x4, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: ldr x6, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT: csel x4, x21, x4, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x4, xzr, x4, eq
+; GISEL-NEXT: cmp x9, #12
+; GISEL-NEXT: csel x4, xzr, x4, eq
+; GISEL-NEXT: cmp x9, #13
+; GISEL-NEXT: csel x4, xzr, x4, eq
+; GISEL-NEXT: cmp x9, #14
+; GISEL-NEXT: csel x4, xzr, x4, eq
+; GISEL-NEXT: cmp x9, #15
+; GISEL-NEXT: csel x4, xzr, x4, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x4, x6, x4, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x3, xzr, x25, eq
+; GISEL-NEXT: cmp x9, #0
+; GISEL-NEXT: orr x3, x24, x3
+; GISEL-NEXT: ldp x24, x23, [sp, #368] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x3, x3, xzr, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x5, xzr, x19, eq
+; GISEL-NEXT: cmp x9, #1
+; GISEL-NEXT: orr x5, x20, x5
+; GISEL-NEXT: csel x3, x5, x3, eq
+; GISEL-NEXT: cmp x9, #2
+; GISEL-NEXT: ldr x5, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: csel x3, x21, x3, eq
+; GISEL-NEXT: cmp x9, #3
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #4
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #5
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #6
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #7
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #8
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #9
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #10
+; GISEL-NEXT: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x9, #11
+; GISEL-NEXT: csel x3, xzr, x3, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x3, xzr, x3, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x3, xzr, x3, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x1, xzr, x1, eq
+; GISEL-NEXT: csel x3, xzr, x3, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x1, xzr, x1, eq
-; 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: csel x3, xzr, x3, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x3, x5, x3, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: csel x10, xzr, x19, 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: csel x15, x15, xzr, eq
+; GISEL-NEXT: orr x10, x20, x10
+; GISEL-NEXT: ldp x20, x19, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x10, x10, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x15, x28, x15, eq
+; GISEL-NEXT: csel x10, x21, x10, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x15, xzr, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
; GISEL-NEXT: cmp x9, #15
-; GISEL-NEXT: csel x15, xzr, x15, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x15, x16, x15, eq
+; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: csel x10, x16, x10, 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, #312] ; 8-byte Reload
+; GISEL-NEXT: csel x15, x21, xzr, eq
; GISEL-NEXT: cmp x9, #1
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #2
-; GISEL-NEXT: stp x17, x12, [x16, #48]
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: stp x8, x0, [x16, #48]
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #3
-; GISEL-NEXT: stp x10, x11, [x16, #64]
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: str x17, [x16]
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #4
-; GISEL-NEXT: stp x4, x1, [x16]
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: ldr x17, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #5
-; GISEL-NEXT: ldr x4, [sp, #240] ; 8-byte Reload
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: stp x11, x12, [x16, #64]
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #6
-; GISEL-NEXT: ldr x1, [sp, #216] ; 8-byte Reload
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: str x17, [x16, #8]
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #7
-; GISEL-NEXT: stp x13, x0, [x16, #80]
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: ldr x17, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT: csel x15, xzr, x15, eq
; GISEL-NEXT: cmp x9, #8
-; GISEL-NEXT: stp x4, x1, [x16, #16]
-; GISEL-NEXT: csel x14, xzr, x14, eq
+; GISEL-NEXT: stp x14, x2, [x16, #80]
+; GISEL-NEXT: csel x8, xzr, x15, eq
; GISEL-NEXT: cmp x9, #9
-; GISEL-NEXT: ldr x1, [sp, #184] ; 8-byte Reload
-; GISEL-NEXT: csel x12, xzr, x14, eq
+; GISEL-NEXT: str x17, [x16, #16]
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #10
-; GISEL-NEXT: stp x3, x2, [x16, #96]
-; GISEL-NEXT: csel x10, xzr, x12, eq
+; GISEL-NEXT: ldr x17, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #11
-; GISEL-NEXT: stp x19, x1, [x16, #32]
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: stp x4, x3, [x16, #96]
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #12
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: str x17, [x16, #24]
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #13
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: ldr x17, [sp, #320] ; 8-byte Reload
+; GISEL-NEXT: csel x8, xzr, x8, eq
; GISEL-NEXT: cmp x9, #14
-; GISEL-NEXT: csel x10, xzr, x10, eq
+; GISEL-NEXT: csel x8, xzr, x8, eq
; 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: 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: ldr x9, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: cmp x26, #0
+; GISEL-NEXT: stp x17, x13, [x16, #32]
+; GISEL-NEXT: ldp x22, x21, [sp, #384] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: ldp x26, x25, [sp, #352] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x10, x8, [x16, #112]
+; GISEL-NEXT: add sp, sp, #432
; GISEL-NEXT: ret
entry:
%input_val = load i1024, ptr %input, align 128
@@ -3706,14 +3719,14 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
;
; GISEL-LABEL: test_ashr_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, #464
+; GISEL-NEXT: stp x28, x27, [sp, #368] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x26, x25, [sp, #384] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x24, x23, [sp, #400] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x22, x21, [sp, #416] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x20, x19, [sp, #432] ; 16-byte Folded Spill
+; GISEL-NEXT: stp x29, x30, [sp, #448] ; 16-byte Folded Spill
+; GISEL-NEXT: .cfi_def_cfa_offset 464
; GISEL-NEXT: .cfi_offset w30, -8
; GISEL-NEXT: .cfi_offset w29, -16
; GISEL-NEXT: .cfi_offset w19, -24
@@ -3726,827 +3739,887 @@ 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: mov w8, w2
-; GISEL-NEXT: mov w9, #64 ; =0x40
-; GISEL-NEXT: ldp x7, x0, [x1]
-; GISEL-NEXT: and x15, x8, #0x3f
-; GISEL-NEXT: sub x14, x9, x15
+; GISEL-NEXT: mov w9, w2
+; GISEL-NEXT: ldp x24, x17, [x1]
+; GISEL-NEXT: mov w8, #64 ; =0x40
+; GISEL-NEXT: ands x12, x9, #0x3f
; GISEL-NEXT: ldr x28, [x1, #120]
-; GISEL-NEXT: lsr x10, x8, #6
-; GISEL-NEXT: ldp x17, x16, [x1, #16]
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x9, x0, x14
-; GISEL-NEXT: lsr x12, x7, x15
+; GISEL-NEXT: sub x15, x8, x12
+; GISEL-NEXT: ldp x13, x16, [x1, #16]
+; GISEL-NEXT: lsl x8, x17, x15
+; GISEL-NEXT: str x9, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT: lsr x10, x9, #6
+; GISEL-NEXT: lsr x9, x24, x12
; GISEL-NEXT: asr x11, x28, #63
-; GISEL-NEXT: lsr x20, x0, x15
-; GISEL-NEXT: str x0, [sp, #232] ; 8-byte Spill
-; GISEL-NEXT: lsl x27, x28, x14
-; GISEL-NEXT: csel x9, xzr, x9, eq
-; GISEL-NEXT: lsl x19, x17, x14
+; GISEL-NEXT: str x17, [sp, #240] ; 8-byte Spill
+; GISEL-NEXT: csel x8, xzr, x8, eq
+; GISEL-NEXT: lsl x14, x13, x15
; 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: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsl x30, x16, x14
-; GISEL-NEXT: csel x12, xzr, x19, eq
+; GISEL-NEXT: orr x8, x9, x8
+; GISEL-NEXT: str x13, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT: lsr x21, x17, x12
+; GISEL-NEXT: csel x8, x8, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsr x17, x13, x12
+; GISEL-NEXT: lsl x13, x16, x15
+; GISEL-NEXT: csel x9, xzr, x14, eq
+; GISEL-NEXT: str x0, [sp, #272] ; 8-byte Spill
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: lsr x25, x16, x15
-; GISEL-NEXT: orr x12, x20, x12
-; GISEL-NEXT: ldp x13, x17, [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: csel x12, xzr, x30, eq
+; GISEL-NEXT: orr x9, x21, x9
+; GISEL-NEXT: str x16, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT: stp x13, x14, [sp, #120] ; 16-byte Folded Spill
+; GISEL-NEXT: ldp x14, x0, [x1, #32]
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsr x16, x16, x12
+; GISEL-NEXT: csel x9, xzr, x13, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: str x2, [sp, #88] ; 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: 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: str x17, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: lsl x4, x14, x15
+; GISEL-NEXT: orr x9, x17, x9
+; GISEL-NEXT: str x16, [sp, #344] ; 8-byte Spill
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsl x13, x0, x15
+; GISEL-NEXT: csel x9, xzr, x4, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x12, x25, x12
-; GISEL-NEXT: ldp x16, x13, [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: lsr x2, x14, x12
+; GISEL-NEXT: orr x9, x16, x9
+; GISEL-NEXT: ldp x17, x16, [x1, #48]
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: stp x2, x13, [sp, #96] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x9, xzr, x13, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: str x0, [sp, #128] ; 8-byte Spill
-; GISEL-NEXT: lsl x2, x16, x14
-; GISEL-NEXT: orr x12, x21, x12
-; GISEL-NEXT: mov x0, x16
-; 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: lsr x22, x0, x12
+; GISEL-NEXT: lsl x13, x17, x15
+; GISEL-NEXT: orr x9, x2, x9
+; GISEL-NEXT: stp x14, x0, [sp, #160] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsl x7, x16, x15
+; GISEL-NEXT: csel x9, xzr, x13, eq
+; GISEL-NEXT: ldp x14, x6, [x1, #64]
; 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: 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: orr x9, x22, x9
+; GISEL-NEXT: lsr x25, x17, x12
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: stp x17, x16, [sp, #176] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x9, xzr, x7, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x12, x6, x12
-; GISEL-NEXT: lsl x0, x17, x14
-; 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: lsl x3, x14, x15
+; GISEL-NEXT: orr x9, x25, x9
+; GISEL-NEXT: lsr x17, x16, x12
+; GISEL-NEXT: lsl x0, x6, x15
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x13, [sp, #336] ; 8-byte Spill
+; GISEL-NEXT: csel x9, xzr, x3, 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: 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: csel x17, xzr, x12, eq
-; GISEL-NEXT: str x0, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT: lsr x13, x14, x12
+; GISEL-NEXT: orr x9, x17, x9
+; GISEL-NEXT: ldp x5, x19, [x1, #80]
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: stp x14, x6, [sp, #192] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x9, xzr, x0, eq
; 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: csel x17, x17, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x9, x16, x15
-; GISEL-NEXT: csel x4, xzr, x0, eq
-; GISEL-NEXT: str x13, [sp, #200] ; 8-byte Spill
+; GISEL-NEXT: ldr x30, [x1, #112]
+; GISEL-NEXT: orr x16, x13, x9
+; GISEL-NEXT: lsl x9, x5, x15
+; GISEL-NEXT: str x5, [sp, #208] ; 8-byte Spill
+; GISEL-NEXT: csel x16, x16, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsr x8, x6, x12
+; GISEL-NEXT: csel x2, xzr, x9, eq
; 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: csel x4, xzr, x23, eq
+; GISEL-NEXT: lsr x14, x19, x12
+; GISEL-NEXT: stp x8, x9, [sp, #352] ; 16-byte Folded Spill
+; GISEL-NEXT: orr x2, x8, x2
+; GISEL-NEXT: lsl x8, x19, x15
+; GISEL-NEXT: lsr x9, x5, x12
+; GISEL-NEXT: ldp x6, x5, [x1, #96]
+; GISEL-NEXT: csel x16, x2, x16, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x8, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT: csel x2, xzr, x8, 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: 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: mov x12, x9
-; GISEL-NEXT: lsr x9, x5, x15
-; GISEL-NEXT: csel x4, xzr, x16, eq
-; GISEL-NEXT: lsl x16, x13, x14
+; GISEL-NEXT: str x9, [sp, #88] ; 8-byte Spill
+; GISEL-NEXT: orr x2, x9, x2
+; GISEL-NEXT: lsl x8, x6, x15
+; GISEL-NEXT: lsr x9, x6, x12
+; GISEL-NEXT: csel x16, x2, x16, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsl x20, x28, x15
+; GISEL-NEXT: csel x2, xzr, x8, eq
+; GISEL-NEXT: str x8, [sp, #320] ; 8-byte Spill
; 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 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: orr x2, x14, x2
+; GISEL-NEXT: lsl x8, x5, x15
+; GISEL-NEXT: str x9, [sp, #80] ; 8-byte Spill
+; GISEL-NEXT: csel x16, x2, x16, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: lsr x27, x30, x12
+; GISEL-NEXT: csel x1, xzr, x8, eq
+; GISEL-NEXT: str x8, [sp, #312] ; 8-byte Spill
; 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 x16, x12, [sp, #320] ; 16-byte Folded Spill
-; GISEL-NEXT: mov x12, x9
-; GISEL-NEXT: csel x1, x1, x17, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x9, x13, x15
-; GISEL-NEXT: lsr x26, x12, x15
-; GISEL-NEXT: csel x17, xzr, x16, eq
+; GISEL-NEXT: orr x1, x9, x1
+; GISEL-NEXT: lsl x8, x30, x15
+; GISEL-NEXT: lsr x9, x5, x12
+; GISEL-NEXT: csel x16, x1, x16, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: stp x5, x30, [sp, #248] ; 16-byte Folded Spill
+; GISEL-NEXT: csel x1, xzr, x8, 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
-; GISEL-NEXT: csel x13, x13, x1, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: lsr x22, x9, x15
-; GISEL-NEXT: csel x28, xzr, x27, eq
+; GISEL-NEXT: stp x8, x9, [sp, #296] ; 16-byte Folded Spill
+; GISEL-NEXT: orr x2, x9, x1
+; GISEL-NEXT: lsl x8, x11, x15
+; GISEL-NEXT: lsr x23, x28, x12
+; GISEL-NEXT: csel x16, x2, x16, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x28, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT: csel x30, xzr, x20, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: str x2, [sp, #8] ; 8-byte Spill
+; GISEL-NEXT: str x8, [sp, #288] ; 8-byte Spill
+; GISEL-NEXT: orr x30, x27, x30
+; GISEL-NEXT: str x19, [sp, #224] ; 8-byte Spill
+; GISEL-NEXT: ldr x15, [sp, #360] ; 8-byte Reload
+; GISEL-NEXT: csel x30, x30, x16, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x13, [sp, #72] ; 8-byte Spill
+; GISEL-NEXT: csel x28, xzr, x8, eq
+; GISEL-NEXT: cmp x10, #15
+; GISEL-NEXT: ldr x5, [sp, #72] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x23, x28
+; GISEL-NEXT: ldp x13, x26, [sp, #104] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x28, x28, x30, eq
+; GISEL-NEXT: ldr x30, [sp, #136] ; 8-byte Reload
+; GISEL-NEXT: str x6, [sp, #232] ; 8-byte Spill
+; GISEL-NEXT: ldp x9, x16, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT: str x14, [sp, #56] ; 8-byte Spill
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: ldp x2, x6, [sp, #80] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x24, x28, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: ldr x24, [sp, #96] ; 8-byte Reload
+; GISEL-NEXT: str x8, [sp, #144] ; 8-byte Spill
+; GISEL-NEXT: ldp x19, x8, [sp, #120] ; 16-byte Folded Reload
+; GISEL-NEXT: str x20, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT: str x23, [sp, #64] ; 8-byte Spill
+; GISEL-NEXT: csel x28, xzr, x8, eq
+; GISEL-NEXT: cmp x10, #0
+; GISEL-NEXT: ldr x8, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT: orr x21, x21, x28
+; GISEL-NEXT: str x17, [sp, #280] ; 8-byte Spill
+; GISEL-NEXT: csel x21, x21, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x4, [sp, #40] ; 8-byte Spill
+; GISEL-NEXT: csel x28, xzr, x19, eq
+; GISEL-NEXT: cmp x10, #1
+; GISEL-NEXT: stp x7, x0, [sp, #24] ; 16-byte Folded Spill
; GISEL-NEXT: orr x28, x26, x28
-; GISEL-NEXT: ldp x0, x16, [sp, #120] ; 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: str x25, [sp, #16] ; 8-byte Spill
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x4, eq
+; GISEL-NEXT: cmp x10, #2
+; GISEL-NEXT: orr x28, x16, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x13, eq
+; GISEL-NEXT: cmp x10, #3
+; GISEL-NEXT: orr x28, x24, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x9, eq
+; GISEL-NEXT: cmp x10, #4
+; GISEL-NEXT: orr x28, x22, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x7, eq
+; GISEL-NEXT: cmp x10, #5
+; GISEL-NEXT: orr x28, x25, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
; GISEL-NEXT: csel x28, xzr, x3, eq
+; GISEL-NEXT: cmp x10, #6
+; GISEL-NEXT: orr x28, x17, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x0, eq
+; GISEL-NEXT: cmp x10, #7
+; GISEL-NEXT: orr x28, x5, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x15, eq
+; GISEL-NEXT: ldr x15, [sp, #352] ; 8-byte Reload
+; GISEL-NEXT: cmp x10, #8
+; GISEL-NEXT: orr x28, x15, x28
+; GISEL-NEXT: ldp x1, x15, [sp, #320] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x15, eq
+; GISEL-NEXT: cmp x10, #9
+; GISEL-NEXT: orr x28, x6, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x1, eq
+; GISEL-NEXT: cmp x10, #10
+; GISEL-NEXT: orr x28, x14, x28
+; GISEL-NEXT: ldr x14, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x14, eq
+; GISEL-NEXT: cmp x10, #11
+; GISEL-NEXT: orr x28, x2, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x8, eq
+; GISEL-NEXT: ldr x8, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT: cmp x10, #12
+; GISEL-NEXT: orr x28, x8, x28
+; GISEL-NEXT: mov x8, x24
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x20, eq
+; GISEL-NEXT: cmp x10, #13
+; GISEL-NEXT: ldr x20, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x27, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x20, eq
+; GISEL-NEXT: cmp x10, #14
+; GISEL-NEXT: orr x28, x23, x28
+; GISEL-NEXT: ldr x23, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x28, x21, 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: 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: csel x9, xzr, x19, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x21, x23, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: mov x23, x13
+; GISEL-NEXT: str x21, [sp, #240] ; 8-byte Spill
+; GISEL-NEXT: csel x21, 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: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x30, eq
+; GISEL-NEXT: orr x21, x26, x21
+; GISEL-NEXT: mov x26, x25
+; GISEL-NEXT: csel x21, x21, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x4, 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: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x24, eq
+; GISEL-NEXT: orr x28, x16, x28
+; GISEL-NEXT: mov x16, x22
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x16, [sp, #8] ; 8-byte Spill
+; GISEL-NEXT: csel x28, xzr, x13, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: mov x24, x6
-; GISEL-NEXT: orr x20, x25, x20
-; GISEL-NEXT: mov x25, x21
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x16, eq
+; GISEL-NEXT: mov x13, x5
+; GISEL-NEXT: orr x28, x24, x28
+; GISEL-NEXT: ldp x19, x24, [sp, #48] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x9, 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: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x13, eq
+; GISEL-NEXT: orr x28, x22, x28
+; GISEL-NEXT: mov x22, x1
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x7, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x20, x0, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x2, eq
+; GISEL-NEXT: mov x7, x23
+; GISEL-NEXT: orr x28, x25, x28
+; GISEL-NEXT: mov x25, x6
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x3, 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: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x6, eq
+; GISEL-NEXT: orr x28, x17, x28
+; GISEL-NEXT: ldp x17, x9, [sp, #352] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x0, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x20, x21, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x12, eq
+; GISEL-NEXT: ldr x0, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x5, x28
+; GISEL-NEXT: ldp x5, x4, [sp, #296] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x9, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x20, x19, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x4, eq
+; GISEL-NEXT: orr x28, x17, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x15, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: orr x20, x5, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x23, eq
+; GISEL-NEXT: ldr x15, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x6, x28
+; GISEL-NEXT: mov x6, x3
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x1, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: ldr x23, [sp, #328] ; 8-byte Reload
-; GISEL-NEXT: orr x20, x14, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x15, eq
+; GISEL-NEXT: ldr x1, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x24, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x14, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: orr x20, x17, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x1, eq
+; GISEL-NEXT: ldr x14, [sp, #40] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x2, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x5, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: orr x20, x23, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: ldp x23, x20, [sp, #312] ; 16-byte Folded Reload
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x20, eq
+; GISEL-NEXT: orr x28, x4, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x19, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: orr x20, x23, x20
-; GISEL-NEXT: mov x23, x26
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x27, eq
+; GISEL-NEXT: orr x28, x27, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x20, eq
+; GISEL-NEXT: ldr x20, [sp, #64] ; 8-byte Reload
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: orr x20, x26, x20
-; GISEL-NEXT: ldr x26, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x3, eq
+; GISEL-NEXT: orr x28, x20, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: ldr x3, [sp, #232] ; 8-byte Reload
-; GISEL-NEXT: orr x20, x22, x20
-; GISEL-NEXT: mov x22, x23
-; GISEL-NEXT: csel x9, x20, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; GISEL-NEXT: cmp x8, #0
-; 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: csel x9, xzr, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x21, x15, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: mov x15, x17
+; GISEL-NEXT: str x21, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT: csel x21, xzr, x14, eq
+; GISEL-NEXT: ldr x14, [sp, #344] ; 8-byte Reload
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x7, x9
-; GISEL-NEXT: ldr x7, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x28, eq
+; GISEL-NEXT: orr x21, x14, x21
+; GISEL-NEXT: mov x14, x6
+; GISEL-NEXT: csel x21, x21, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x23, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: mov x28, x21
-; GISEL-NEXT: orr x20, x30, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x16, eq
+; GISEL-NEXT: ldr x23, [sp, #336] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x8, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x23, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: mov x16, x0
-; GISEL-NEXT: orr x20, x25, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x13, eq
+; GISEL-NEXT: orr x28, x16, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x0, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x20, x0, x20
-; GISEL-NEXT: mov x0, x19
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x2, eq
+; GISEL-NEXT: orr x28, x26, x28
+; GISEL-NEXT: mov x26, x19
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x3, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: mov x2, x4
-; GISEL-NEXT: orr x20, x24, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x6, eq
+; GISEL-NEXT: ldr x3, [sp, #32] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x1, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x3, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: mov x6, x5
-; GISEL-NEXT: orr x20, x21, x20
-; GISEL-NEXT: mov x21, x25
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x12, eq
+; GISEL-NEXT: orr x28, x13, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x9, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: ldr x12, [sp, #208] ; 8-byte Reload
-; GISEL-NEXT: orr x20, x19, x20
-; GISEL-NEXT: mov x19, x27
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x4, eq
+; GISEL-NEXT: ldr x9, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x17, x28
+; GISEL-NEXT: ldr x17, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x9, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x20, x5, x20
-; GISEL-NEXT: ldp x30, x4, [sp, #320] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: mov x5, x3
-; GISEL-NEXT: csel x20, xzr, x26, eq
+; GISEL-NEXT: orr x28, x25, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x22, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: orr x20, x14, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x15, eq
+; GISEL-NEXT: mov x22, x0
+; GISEL-NEXT: orr x28, x24, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x17, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: orr x20, x17, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x1, eq
+; GISEL-NEXT: orr x28, x2, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x5, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: orr x20, x4, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x30, eq
+; GISEL-NEXT: orr x28, x4, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x19, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: orr x20, x7, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x27, eq
+; GISEL-NEXT: ldr x19, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x27, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x19, 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: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x23, eq
+; GISEL-NEXT: orr x28, x20, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: orr x20, x27, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
+; GISEL-NEXT: ldr x28, [sp, #152] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; 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: csel x9, xzr, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x21, [sp, #344] ; 8-byte Spill
+; GISEL-NEXT: csel x21, xzr, x7, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x12, x9
-; GISEL-NEXT: ldr x12, [sp, #184] ; 8-byte Reload
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x3, eq
+; GISEL-NEXT: orr x21, x8, x21
+; GISEL-NEXT: ldr x7, [sp, #360] ; 8-byte Reload
+; GISEL-NEXT: mov x8, x23
+; GISEL-NEXT: csel x21, x21, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x23, 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: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x13, eq
+; GISEL-NEXT: ldr x23, [sp, #320] ; 8-byte Reload
+; GISEL-NEXT: orr x28, x16, x28
+; GISEL-NEXT: ldr x16, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x0, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: ldr x13, [sp, #8] ; 8-byte Reload
-; GISEL-NEXT: orr x20, x16, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x13, eq
+; GISEL-NEXT: mov x0, x3
+; GISEL-NEXT: orr x28, x16, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x6, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x20, x24, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x3, eq
+; GISEL-NEXT: orr x28, x1, x28
+; GISEL-NEXT: mov x1, x17
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x3, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x20, x28, x20
-; GISEL-NEXT: mov x28, x16
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x25, eq
+; GISEL-NEXT: mov x3, x9
+; GISEL-NEXT: orr x28, x13, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x7, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x20, x0, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x2, eq
+; GISEL-NEXT: orr x28, x15, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x9, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x20, x6, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x26, eq
+; GISEL-NEXT: mov x9, x7
+; GISEL-NEXT: orr x28, x25, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x23, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: mov x26, x14
-; GISEL-NEXT: orr x20, x14, x20
-; GISEL-NEXT: mov x14, x15
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x15, eq
+; GISEL-NEXT: orr x28, x24, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x17, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: mov x15, x17
-; GISEL-NEXT: orr x20, x17, x20
-; GISEL-NEXT: mov x17, x1
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x1, eq
+; GISEL-NEXT: mov x17, x22
+; GISEL-NEXT: orr x28, x2, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x5, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: mov x1, x4
-; GISEL-NEXT: orr x20, x4, x20
-; GISEL-NEXT: mov x4, x30
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x30, eq
+; GISEL-NEXT: orr x28, x4, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x26, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: ldr x30, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT: orr x20, x7, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x19, eq
+; GISEL-NEXT: orr x28, x27, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x28, xzr, x19, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: orr x20, x22, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x23, eq
+; GISEL-NEXT: orr x28, x20, x28
+; GISEL-NEXT: csel x21, x28, x21, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: orr x20, x27, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
+; GISEL-NEXT: ldr x28, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; 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: csel x9, xzr, x5, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x28, x28, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x21, xzr, x8, eq
+; GISEL-NEXT: ldr x8, [sp, #8] ; 8-byte Reload
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x21, x9
-; GISEL-NEXT: ldr x5, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT: mov x21, x0
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x5, eq
+; GISEL-NEXT: orr x21, x8, x21
+; GISEL-NEXT: ldr x8, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x21, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x22, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x20, x16, x20
-; GISEL-NEXT: mov x16, x24
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x13, eq
+; GISEL-NEXT: orr x22, x16, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x6, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x20, x24, x20
-; GISEL-NEXT: ldr x24, [sp, #288] ; 8-byte Reload
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x3, eq
+; GISEL-NEXT: mov x6, x4
+; GISEL-NEXT: orr x22, x8, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x0, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x20, x24, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x25, eq
+; GISEL-NEXT: orr x22, x13, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x7, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x20, x0, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x2, eq
+; GISEL-NEXT: orr x22, x15, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x3, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x20, x6, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x30, eq
+; GISEL-NEXT: orr x22, x25, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x23, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x20, x26, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x14, eq
+; GISEL-NEXT: orr x22, x24, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x1, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x20, x15, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x17, eq
+; GISEL-NEXT: orr x22, x2, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x5, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: orr x20, x1, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x4, eq
+; GISEL-NEXT: orr x22, x4, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x26, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: orr x20, x7, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x19, eq
+; GISEL-NEXT: orr x22, x27, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x22, xzr, x19, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: orr x20, x22, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x23, eq
+; GISEL-NEXT: orr x22, x20, x22
+; GISEL-NEXT: csel x21, x22, x21, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: orr x20, x27, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
+; GISEL-NEXT: ldr x22, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; 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: csel x9, xzr, x5, eq
+; GISEL-NEXT: csel x21, x11, x21, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x21, x22, x21, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: mov x22, x15
+; GISEL-NEXT: csel x7, xzr, x17, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x28, x9
-; GISEL-NEXT: mov x28, x3
-; GISEL-NEXT: mov x5, x7
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x13, eq
+; GISEL-NEXT: orr x4, x16, x7
+; GISEL-NEXT: mov x16, x14
+; GISEL-NEXT: csel x4, x4, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x14, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x20, x16, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x3, eq
+; GISEL-NEXT: mov x14, x0
+; GISEL-NEXT: orr x7, x8, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x0, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x20, x24, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x25, eq
+; GISEL-NEXT: orr x7, x13, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x9, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x20, x0, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x2, eq
+; GISEL-NEXT: orr x7, x15, x7
+; GISEL-NEXT: mov x15, x3
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x3, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x20, x6, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x30, eq
+; GISEL-NEXT: orr x7, x25, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x23, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x20, x26, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x14, eq
+; GISEL-NEXT: orr x7, x24, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x1, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x20, x15, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x17, eq
+; GISEL-NEXT: orr x7, x2, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x5, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x20, x1, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x4, eq
+; GISEL-NEXT: orr x7, x6, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x26, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: orr x20, x7, x20
-; GISEL-NEXT: mov x7, x19
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x19, eq
+; GISEL-NEXT: orr x7, x27, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x19, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: mov x19, x22
-; GISEL-NEXT: orr x20, x22, x20
-; GISEL-NEXT: mov x22, x23
-; GISEL-NEXT: csel x9, x20, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x20, xzr, x23, eq
+; GISEL-NEXT: orr x7, x20, x7
+; GISEL-NEXT: csel x4, x7, x4, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: orr x20, x27, x20
-; GISEL-NEXT: csel x9, x20, x9, eq
+; GISEL-NEXT: ldr x7, [sp, #176] ; 8-byte Reload
+; GISEL-NEXT: csel x4, x11, x4, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x4, x11, x4, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x4, x11, x4, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x4, x11, x4, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x4, x11, x4, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; 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: str x9, [sp, #304] ; 8-byte Spill
-; GISEL-NEXT: csel x9, xzr, x13, eq
+; GISEL-NEXT: csel x4, x11, x4, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x4, x7, x4, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x16, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x16, x9
-; GISEL-NEXT: mov x16, x0
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x3, eq
-; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x3, x24, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x25, eq
+; GISEL-NEXT: ldr x16, [sp, #144] ; 8-byte Reload
+; GISEL-NEXT: orr x0, x8, x3
+; GISEL-NEXT: csel x0, x0, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x14, eq
+; GISEL-NEXT: cmp x10, #1
+; GISEL-NEXT: orr x3, x13, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x9, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x3, x21, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x2, eq
+; GISEL-NEXT: orr x3, x22, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x15, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x3, x6, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x30, eq
+; GISEL-NEXT: orr x3, x25, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x23, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x3, x26, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x14, eq
+; GISEL-NEXT: orr x3, x24, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x1, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x3, x15, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x17, eq
+; GISEL-NEXT: orr x3, x2, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x5, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x3, x1, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x4, eq
+; GISEL-NEXT: orr x3, x6, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x26, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x3, x5, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x7, eq
+; GISEL-NEXT: orr x3, x27, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x19, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: orr x3, x19, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x23, eq
+; GISEL-NEXT: orr x3, x20, x3
+; GISEL-NEXT: csel x0, x3, x0, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: orr x3, x27, x3
-; GISEL-NEXT: csel x9, x3, x9, eq
+; GISEL-NEXT: ldr x3, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT: csel x0, x11, x0, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: mov x3, x2
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x0, x11, x0, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x0, x11, x0, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x0, x11, x0, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x0, x11, x0, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x0, x11, x0, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; 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: csel x9, xzr, x28, eq
+; GISEL-NEXT: csel x0, x11, x0, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x0, x3, x0, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x14, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x24, x9
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x25, eq
+; GISEL-NEXT: orr x14, x13, x17
+; GISEL-NEXT: csel x14, x14, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x9, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x0, x21, x0
-; GISEL-NEXT: mov x21, x6
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x2, eq
+; GISEL-NEXT: orr x17, x22, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x15, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x0, x6, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x30, eq
+; GISEL-NEXT: orr x17, x25, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x23, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x0, x26, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x14, eq
+; GISEL-NEXT: orr x17, x24, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x1, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x0, x15, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x17, eq
+; GISEL-NEXT: orr x17, x2, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x5, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x0, x1, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x4, eq
+; GISEL-NEXT: orr x17, x6, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x26, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x0, x5, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x7, eq
+; GISEL-NEXT: orr x17, x27, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x19, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x0, x19, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x23, eq
+; GISEL-NEXT: orr x17, x20, x17
+; GISEL-NEXT: csel x14, x17, x14, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: orr x0, x27, x0
-; GISEL-NEXT: csel x9, x0, x9, eq
+; GISEL-NEXT: ldr x17, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; 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: csel x9, xzr, x25, eq
+; GISEL-NEXT: csel x14, x11, x14, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x14, x17, x14, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x9, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x16, x9
-; GISEL-NEXT: ldr x16, [sp, #216] ; 8-byte Reload
-; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x3, eq
+; GISEL-NEXT: orr x8, x22, x9
+; GISEL-NEXT: csel x8, x8, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x15, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x13, x6, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x30, eq
+; GISEL-NEXT: orr x9, x25, x9
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x23, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x13, x26, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x14, eq
+; GISEL-NEXT: orr x9, x24, x9
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x1, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x13, x15, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x17, eq
+; GISEL-NEXT: orr x9, x2, x9
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x5, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x13, x1, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
+; GISEL-NEXT: orr x9, x6, x9
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x26, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x13, x5, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x7, eq
+; GISEL-NEXT: orr x9, x27, x9
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x19, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x13, x19, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x23, eq
+; GISEL-NEXT: orr x9, x20, x9
+; GISEL-NEXT: csel x8, x9, x8, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: orr x13, x27, x13
-; GISEL-NEXT: csel x9, x13, x9, eq
+; GISEL-NEXT: ldr x9, [sp, #200] ; 8-byte Reload
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x9, x11, x9, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x6, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x9, xzr, x3, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x9, xzr, x15, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x9, x21, x9
+; GISEL-NEXT: ldr x15, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT: orr x9, x25, x9
; GISEL-NEXT: csel x9, x9, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x30, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x16, [x15]
+; GISEL-NEXT: csel x17, xzr, x23, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x12, x26, x12
-; GISEL-NEXT: csel x9, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x14, eq
+; GISEL-NEXT: ldr x16, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT: orr x17, x24, x17
+; GISEL-NEXT: stp x21, x4, [x15, #40]
+; GISEL-NEXT: csel x9, x17, x9, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x16, [x15, #8]
+; GISEL-NEXT: csel x17, xzr, x1, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x12, x15, x12
-; GISEL-NEXT: csel x9, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x17, eq
+; GISEL-NEXT: ldr x16, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT: orr x17, x2, x17
+; GISEL-NEXT: ldp x22, x21, [sp, #416] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x9, x17, x9, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: str x16, [x15, #16]
+; GISEL-NEXT: csel x17, xzr, x5, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x12, x1, x12
-; GISEL-NEXT: csel x9, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x4, eq
+; GISEL-NEXT: ldr x16, [sp, #344] ; 8-byte Reload
+; GISEL-NEXT: orr x17, x6, x17
+; GISEL-NEXT: stp x0, x14, [x15, #56]
+; GISEL-NEXT: csel x9, x17, x9, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: stp x16, x28, [x15, #24]
+; GISEL-NEXT: csel x17, xzr, x26, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x12, x5, x12
-; GISEL-NEXT: csel x9, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x7, eq
+; GISEL-NEXT: orr x17, x27, x17
+; GISEL-NEXT: csel x9, x17, x9, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x19, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: orr x12, x19, x12
-; GISEL-NEXT: csel x9, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x23, eq
+; GISEL-NEXT: orr x17, x20, x17
+; GISEL-NEXT: csel x9, x17, x9, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: orr x12, x27, x12
-; GISEL-NEXT: csel x9, x12, x9, eq
+; GISEL-NEXT: ldr x17, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT: csel x9, x11, x9, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: ldr x12, [sp, #192] ; 8-byte Reload
; GISEL-NEXT: csel x9, x11, x9, eq
; GISEL-NEXT: cmp x10, #8
; GISEL-NEXT: csel x9, x11, x9, eq
@@ -4564,268 +4637,202 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: csel x9, x11, x9, eq
; GISEL-NEXT: cmp x10, #15
; GISEL-NEXT: csel x9, x11, x9, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x9, x12, x9, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x30, eq
-; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x12, x26, x12
-; GISEL-NEXT: ldp x29, x30, [sp, #416] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x12, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x14, eq
-; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x13, x15, x13
-; GISEL-NEXT: ldp x26, x25, [sp, #352] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x17, eq
-; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x13, x1, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x4, eq
-; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x13, x5, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x7, eq
-; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: orr x13, x19, x13
-; GISEL-NEXT: csel x12, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x13, xzr, x23, eq
-; GISEL-NEXT: cmp x10, #5
-; 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: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x13, x13, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x14, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x9, x17, x9, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x17, xzr, x23, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: ldr x14, [sp, #264] ; 8-byte Reload
-; GISEL-NEXT: orr x12, x15, x12
-; GISEL-NEXT: ldr x15, [sp, #136] ; 8-byte Reload
-; GISEL-NEXT: csel x12, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: stp x9, x13, [x14, #72]
-; GISEL-NEXT: csel x0, xzr, x17, eq
+; GISEL-NEXT: stp x8, x9, [x15, #72]
+; GISEL-NEXT: orr x17, x24, x17
+; GISEL-NEXT: ldr x9, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT: csel x17, x17, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x1, eq
; 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: stp x2, x6, [x14, #56]
-; GISEL-NEXT: csel x12, x0, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x4, eq
+; GISEL-NEXT: orr x3, x2, x3
+; GISEL-NEXT: ldp x24, x23, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x17, x3, x17, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x5, eq
; 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: csel x12, x0, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x7, eq
+; GISEL-NEXT: orr x3, x6, x3
+; GISEL-NEXT: csel x17, x3, x17, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x26, 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: csel x12, x0, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x0, xzr, x23, eq
+; GISEL-NEXT: orr x3, x27, x3
+; GISEL-NEXT: csel x17, x3, x17, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x19, 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: csel x12, x0, x12, eq
+; GISEL-NEXT: orr x3, x20, x3
+; GISEL-NEXT: csel x17, x3, x17, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: ldr x3, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: str x15, [x14, #32]
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: ldr x15, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: stp x15, x20, [x14, #40]
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x12, x11, x12, eq
-; 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: csel x12, xzr, x17, eq
+; GISEL-NEXT: csel x17, x11, x17, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x17, x3, x17, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x3, xzr, x1, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x12, x1, x12
-; GISEL-NEXT: csel x12, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x4, eq
+; GISEL-NEXT: orr x3, x2, x3
+; GISEL-NEXT: csel x3, x3, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x5, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x3, x5, x3
-; GISEL-NEXT: csel x12, x3, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x7, eq
+; GISEL-NEXT: orr x7, x6, x7
+; GISEL-NEXT: csel x3, x7, x3, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x26, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x3, x19, x3
-; GISEL-NEXT: csel x12, x3, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x3, xzr, x23, eq
+; GISEL-NEXT: orr x7, x27, x7
+; GISEL-NEXT: csel x3, x7, x3, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x7, xzr, x19, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: orr x3, x27, x3
-; GISEL-NEXT: ldp x24, x23, [sp, #368] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x12, x3, x12, eq
+; GISEL-NEXT: orr x7, x20, x7
+; GISEL-NEXT: csel x3, x7, x3, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: ldr x7, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x12, x11, x12, eq
-; 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: csel x12, xzr, x4, eq
+; GISEL-NEXT: csel x3, x11, x3, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x3, x7, x3, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x5, xzr, x5, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: stp x0, x3, [x14, #88]
-; GISEL-NEXT: orr x12, x5, x12
-; GISEL-NEXT: csel x12, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x4, xzr, x7, eq
+; GISEL-NEXT: stp x17, x3, [x15, #88]
+; GISEL-NEXT: orr x5, x6, x5
+; GISEL-NEXT: csel x5, x5, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x6, xzr, x26, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x4, x19, x4
-; GISEL-NEXT: csel x12, x4, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x4, xzr, x22, eq
+; GISEL-NEXT: orr x6, x27, x6
+; GISEL-NEXT: csel x5, x6, x5, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x6, xzr, x19, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: orr x4, x27, x4
-; GISEL-NEXT: csel x12, x4, x12, eq
+; GISEL-NEXT: orr x6, x20, x6
+; GISEL-NEXT: csel x5, x6, x5, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: ldr x6, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x12, x11, x12, eq
-; 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: csel x12, xzr, x7, eq
+; GISEL-NEXT: csel x5, x11, x5, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x5, x6, x5, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x1, xzr, x26, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: orr x12, x19, x12
-; GISEL-NEXT: ldp x20, x19, [sp, #400] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x12, x12, x11, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x17, xzr, x22, eq
+; GISEL-NEXT: orr x1, x27, x1
+; GISEL-NEXT: ldp x26, x25, [sp, #384] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x1, x1, x11, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x2, xzr, x19, eq
; GISEL-NEXT: cmp x10, #1
-; GISEL-NEXT: orr x17, x27, x17
-; GISEL-NEXT: csel x12, x17, x12, eq
+; GISEL-NEXT: orr x2, x20, x2
+; GISEL-NEXT: ldp x28, x27, [sp, #368] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x1, x2, x1, eq
; GISEL-NEXT: cmp x10, #2
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: ldr x2, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #3
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #4
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #5
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #6
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #7
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #8
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #9
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #10
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x12, x11, x12, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
; GISEL-NEXT: cmp x10, #15
-; GISEL-NEXT: csel x12, x11, x12, eq
-; GISEL-NEXT: cmp x8, #0
-; GISEL-NEXT: csel x17, x16, x12, eq
-; GISEL-NEXT: tst x8, #0x3f
-; GISEL-NEXT: csel x12, xzr, x22, eq
+; GISEL-NEXT: csel x1, x11, x1, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: csel x1, x2, x1, eq
+; GISEL-NEXT: cmp x12, #0
+; GISEL-NEXT: csel x12, xzr, x19, eq
; GISEL-NEXT: cmp x10, #0
-; GISEL-NEXT: stp x4, x17, [x14, #104]
-; GISEL-NEXT: orr x12, x27, x12
-; GISEL-NEXT: ldp x22, x21, [sp, #384] ; 16-byte Folded Reload
+; GISEL-NEXT: stp x5, x1, [x15, #104]
+; GISEL-NEXT: orr x12, x20, x12
+; GISEL-NEXT: ldp x20, x19, [sp, #432] ; 16-byte Folded Reload
; GISEL-NEXT: csel x12, x12, x11, eq
; GISEL-NEXT: cmp x10, #1
; GISEL-NEXT: csel x12, x11, x12, eq
@@ -4848,21 +4855,20 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
; GISEL-NEXT: cmp x10, #10
; GISEL-NEXT: csel x12, x11, x12, eq
; GISEL-NEXT: cmp x10, #11
-; GISEL-NEXT: csel x9, x11, x12, eq
+; GISEL-NEXT: csel x8, x11, x12, eq
; GISEL-NEXT: cmp x10, #12
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #13
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; GISEL-NEXT: cmp x10, #14
-; GISEL-NEXT: csel x9, x11, x9, eq
+; GISEL-NEXT: csel x8, x11, x8, eq
; 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: ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
-; GISEL-NEXT: csel x8, x8, x9, eq
-; GISEL-NEXT: str x8, [x14, #120]
-; GISEL-NEXT: add sp, sp, #432
+; GISEL-NEXT: csel x8, x11, x8, eq
+; GISEL-NEXT: cmp x30, #0
+; GISEL-NEXT: ldp x29, x30, [sp, #448] ; 16-byte Folded Reload
+; GISEL-NEXT: csel x8, x9, x8, eq
+; GISEL-NEXT: str x8, [x15, #120]
+; GISEL-NEXT: add sp, sp, #464
; GISEL-NEXT: ret
entry:
%input_val = load i1024, ptr %input, align 128
diff --git a/llvm/test/CodeGen/AArch64/arm64-ccmp.ll b/llvm/test/CodeGen/AArch64/arm64-ccmp.ll
index 68ab8902767b3..ebe382af58cc8 100644
--- a/llvm/test/CodeGen/AArch64/arm64-ccmp.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-ccmp.ll
@@ -1050,23 +1050,19 @@ define i32 @deep_or2(i32 %a0, i32 %a1, i32 %a2, i32 %a3, i32 %x, i32 %y) {
define i32 @multiccmp(i32 %s0, i32 %s1, i32 %s2, i32 %s3, i32 %x, i32 %y) #0 {
; CHECK-SD-LABEL: multiccmp:
; CHECK-SD: ; %bb.0: ; %entry
-; CHECK-SD-NEXT: stp x22, x21, [sp, #-48]! ; 16-byte Folded Spill
-; CHECK-SD-NEXT: stp x20, x19, [sp, #16] ; 16-byte Folded Spill
-; CHECK-SD-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill
+; CHECK-SD-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
+; CHECK-SD-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
; CHECK-SD-NEXT: mov x19, x5
; CHECK-SD-NEXT: cmp w0, w1
-; CHECK-SD-NEXT: cset w20, gt
-; CHECK-SD-NEXT: cmp w2, w3
-; CHECK-SD-NEXT: cset w21, ne
-; CHECK-SD-NEXT: tst w20, w21
+; CHECK-SD-NEXT: ccmp w2, w3, #4, gt
+; CHECK-SD-NEXT: cset w20, ne
; CHECK-SD-NEXT: csel w0, w5, w4, ne
; CHECK-SD-NEXT: bl _callee
-; CHECK-SD-NEXT: tst w20, w21
+; CHECK-SD-NEXT: cmp w20, #0
; CHECK-SD-NEXT: csel w0, w0, w19, ne
; CHECK-SD-NEXT: bl _callee
-; CHECK-SD-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
-; CHECK-SD-NEXT: ldp x20, x19, [sp, #16] ; 16-byte Folded Reload
-; CHECK-SD-NEXT: ldp x22, x21, [sp], #48 ; 16-byte Folded Reload
+; CHECK-SD-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
+; CHECK-SD-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
; CHECK-SD-NEXT: ret
;
; CHECK-GI-LABEL: multiccmp:
diff --git a/llvm/test/CodeGen/AArch64/fcmp-fp128.ll b/llvm/test/CodeGen/AArch64/fcmp-fp128.ll
index baaa615f8ec23..d067d833a7e16 100644
--- a/llvm/test/CodeGen/AArch64/fcmp-fp128.ll
+++ b/llvm/test/CodeGen/AArch64/fcmp-fp128.ll
@@ -180,12 +180,10 @@ define double @one(fp128 %a, fp128 %b, double %d, double %e) {
; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill
; CHECK-SD-NEXT: bl __eqtf2
; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload
-; CHECK-SD-NEXT: cmp w0, #0
-; CHECK-SD-NEXT: cset w19, ne
+; CHECK-SD-NEXT: mov w19, w0
; CHECK-SD-NEXT: bl __unordtf2
; CHECK-SD-NEXT: cmp w0, #0
-; CHECK-SD-NEXT: cset w8, eq
-; CHECK-SD-NEXT: tst w8, w19
+; CHECK-SD-NEXT: ccmp w19, #0, #4, eq
; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
diff --git a/llvm/test/CodeGen/AArch64/fsh.ll b/llvm/test/CodeGen/AArch64/fsh.ll
index 1db776ea6f616..ff2b5690fb32c 100644
--- a/llvm/test/CodeGen/AArch64/fsh.ll
+++ b/llvm/test/CodeGen/AArch64/fsh.ll
@@ -192,27 +192,27 @@ define i128 @rotl_i128(i128 %a, i128 %c) {
; CHECK-GI-NEXT: sub x11, x9, #64
; CHECK-GI-NEXT: lsl x14, x1, x9
; CHECK-GI-NEXT: lsr x12, x0, x12
+; CHECK-GI-NEXT: and x10, x10, #0x7f
+; CHECK-GI-NEXT: lsl x11, x0, x11
; CHECK-GI-NEXT: lsl x13, x0, x9
; CHECK-GI-NEXT: cmp x9, #64
-; CHECK-GI-NEXT: and x9, x10, #0x7f
-; CHECK-GI-NEXT: lsl x11, x0, x11
+; CHECK-GI-NEXT: sub x8, x8, x10
; CHECK-GI-NEXT: orr x12, x12, x14
-; CHECK-GI-NEXT: sub x8, x8, x9
-; CHECK-GI-NEXT: sub x14, x9, #64
-; CHECK-GI-NEXT: csel x11, x12, x11, lo
-; CHECK-GI-NEXT: lsr x12, x0, x9
+; CHECK-GI-NEXT: sub x14, x10, #64
; CHECK-GI-NEXT: lsl x8, x1, x8
+; CHECK-GI-NEXT: csel x11, x12, x11, lo
+; CHECK-GI-NEXT: lsr x12, x0, x10
; CHECK-GI-NEXT: csel x13, x13, xzr, lo
-; CHECK-GI-NEXT: tst x2, #0x7f
-; CHECK-GI-NEXT: lsr x14, x1, x14
+; CHECK-GI-NEXT: cmp x9, #0
+; CHECK-GI-NEXT: lsr x9, x1, x14
; CHECK-GI-NEXT: csel x11, x1, x11, eq
; CHECK-GI-NEXT: orr x8, x12, x8
-; CHECK-GI-NEXT: cmp x9, #64
-; CHECK-GI-NEXT: lsr x12, x1, x9
-; CHECK-GI-NEXT: csel x8, x8, x14, lo
-; CHECK-GI-NEXT: tst x10, #0x7f
+; CHECK-GI-NEXT: cmp x10, #64
+; CHECK-GI-NEXT: lsr x12, x1, x10
+; CHECK-GI-NEXT: csel x8, x8, x9, lo
+; CHECK-GI-NEXT: cmp x10, #0
; CHECK-GI-NEXT: csel x8, x0, x8, eq
-; CHECK-GI-NEXT: cmp x9, #64
+; CHECK-GI-NEXT: cmp x10, #64
; CHECK-GI-NEXT: csel x9, x12, xzr, lo
; CHECK-GI-NEXT: orr x0, x13, x8
; CHECK-GI-NEXT: orr x1, x11, x9
@@ -243,35 +243,35 @@ define i128 @rotr_i128(i128 %a, i128 %c) {
; CHECK-GI: // %bb.0: // %entry
; CHECK-GI-NEXT: mov w8, #64 // =0x40
; CHECK-GI-NEXT: and x9, x2, #0x7f
-; CHECK-GI-NEXT: neg x13, x2
-; CHECK-GI-NEXT: sub x10, x8, x9
-; CHECK-GI-NEXT: sub x11, x9, #64
-; CHECK-GI-NEXT: lsr x12, x0, x9
-; CHECK-GI-NEXT: lsl x10, x1, x10
-; CHECK-GI-NEXT: lsr x11, x1, x11
-; CHECK-GI-NEXT: and x14, x13, #0x7f
+; CHECK-GI-NEXT: neg x10, x2
+; CHECK-GI-NEXT: sub x11, x8, x9
+; CHECK-GI-NEXT: sub x12, x9, #64
+; CHECK-GI-NEXT: lsr x13, x0, x9
+; CHECK-GI-NEXT: lsl x11, x1, x11
+; CHECK-GI-NEXT: and x10, x10, #0x7f
+; CHECK-GI-NEXT: lsr x12, x1, x12
; CHECK-GI-NEXT: cmp x9, #64
-; CHECK-GI-NEXT: sub x8, x8, x14
-; CHECK-GI-NEXT: lsl x15, x1, x14
-; CHECK-GI-NEXT: orr x10, x12, x10
-; CHECK-GI-NEXT: lsr x12, x1, x9
+; CHECK-GI-NEXT: sub x8, x8, x10
+; CHECK-GI-NEXT: lsr x14, x1, x9
+; CHECK-GI-NEXT: orr x11, x13, x11
+; CHECK-GI-NEXT: sub x13, x10, #64
; CHECK-GI-NEXT: lsr x8, x0, x8
-; CHECK-GI-NEXT: csel x10, x10, x11, lo
-; CHECK-GI-NEXT: sub x11, x14, #64
-; CHECK-GI-NEXT: tst x2, #0x7f
-; CHECK-GI-NEXT: csel x10, x0, x10, eq
+; CHECK-GI-NEXT: csel x11, x11, x12, lo
+; CHECK-GI-NEXT: cmp x9, #0
+; CHECK-GI-NEXT: lsl x12, x1, x10
+; CHECK-GI-NEXT: csel x11, x0, x11, eq
; CHECK-GI-NEXT: cmp x9, #64
-; CHECK-GI-NEXT: lsl x9, x0, x14
-; CHECK-GI-NEXT: lsl x11, x0, x11
-; CHECK-GI-NEXT: csel x12, x12, xzr, lo
-; CHECK-GI-NEXT: orr x8, x8, x15
-; CHECK-GI-NEXT: cmp x14, #64
+; CHECK-GI-NEXT: lsl x9, x0, x10
+; CHECK-GI-NEXT: lsl x13, x0, x13
+; CHECK-GI-NEXT: csel x14, x14, xzr, lo
+; CHECK-GI-NEXT: orr x8, x8, x12
+; CHECK-GI-NEXT: cmp x10, #64
; CHECK-GI-NEXT: csel x9, x9, xzr, lo
-; CHECK-GI-NEXT: csel x8, x8, x11, lo
-; CHECK-GI-NEXT: tst x13, #0x7f
+; CHECK-GI-NEXT: csel x8, x8, x13, lo
+; CHECK-GI-NEXT: cmp x10, #0
; CHECK-GI-NEXT: csel x8, x1, x8, eq
-; CHECK-GI-NEXT: orr x0, x10, x9
-; CHECK-GI-NEXT: orr x1, x12, x8
+; CHECK-GI-NEXT: orr x0, x11, x9
+; CHECK-GI-NEXT: orr x1, x14, x8
; CHECK-GI-NEXT: ret
entry:
%d = call i128 @llvm.fshr(i128 %a, i128 %a, i128 %c)
@@ -513,37 +513,36 @@ define i128 @fshl_i128(i128 %a, i128 %b, i128 %c) {
; CHECK-GI-NEXT: mov w8, #64 // =0x40
; CHECK-GI-NEXT: and x9, x4, #0x7f
; CHECK-GI-NEXT: mov w10, #127 // =0x7f
-; CHECK-GI-NEXT: sub x12, x8, x9
-; CHECK-GI-NEXT: lsl x13, x1, x9
+; CHECK-GI-NEXT: sub x11, x8, x9
+; CHECK-GI-NEXT: lsl x12, x1, x9
; CHECK-GI-NEXT: bic x10, x10, x4
-; CHECK-GI-NEXT: lsr x12, x0, x12
-; CHECK-GI-NEXT: sub x14, x9, #64
+; CHECK-GI-NEXT: lsr x11, x0, x11
+; CHECK-GI-NEXT: extr x13, x3, x2, #1
+; CHECK-GI-NEXT: lsr x14, x3, #1
+; CHECK-GI-NEXT: sub x16, x9, #64
; CHECK-GI-NEXT: lsl x15, x0, x9
-; CHECK-GI-NEXT: extr x16, x3, x2, #1
-; CHECK-GI-NEXT: cmp x9, #64
; CHECK-GI-NEXT: sub x8, x8, x10
-; CHECK-GI-NEXT: orr x9, x12, x13
-; CHECK-GI-NEXT: lsr x12, x3, #1
-; CHECK-GI-NEXT: lsl x13, x0, x14
-; CHECK-GI-NEXT: csel x14, x15, xzr, lo
-; CHECK-GI-NEXT: sub x15, x10, #64
-; CHECK-GI-NEXT: lsr x17, x16, x10
-; CHECK-GI-NEXT: lsl x8, x12, x8
-; CHECK-GI-NEXT: csel x9, x9, x13, lo
-; CHECK-GI-NEXT: tst x4, #0x7f
-; CHECK-GI-NEXT: lsr x13, x12, x15
-; CHECK-GI-NEXT: mvn x11, x4
-; CHECK-GI-NEXT: csel x9, x1, x9, eq
+; CHECK-GI-NEXT: orr x11, x11, x12
+; CHECK-GI-NEXT: lsl x12, x0, x16
+; CHECK-GI-NEXT: cmp x9, #64
+; CHECK-GI-NEXT: sub x16, x10, #64
+; CHECK-GI-NEXT: lsr x17, x13, x10
+; CHECK-GI-NEXT: lsl x8, x14, x8
+; CHECK-GI-NEXT: csel x15, x15, xzr, lo
+; CHECK-GI-NEXT: csel x11, x11, x12, lo
+; CHECK-GI-NEXT: cmp x9, #0
+; CHECK-GI-NEXT: lsr x9, x14, x16
+; CHECK-GI-NEXT: csel x11, x1, x11, eq
; CHECK-GI-NEXT: orr x8, x17, x8
; CHECK-GI-NEXT: cmp x10, #64
-; CHECK-GI-NEXT: lsr x12, x12, x10
-; CHECK-GI-NEXT: csel x8, x8, x13, lo
-; CHECK-GI-NEXT: tst x11, #0x7f
-; CHECK-GI-NEXT: csel x8, x16, x8, eq
+; CHECK-GI-NEXT: lsr x12, x14, x10
+; CHECK-GI-NEXT: csel x8, x8, x9, lo
+; CHECK-GI-NEXT: cmp x10, #0
+; CHECK-GI-NEXT: csel x8, x13, x8, eq
; CHECK-GI-NEXT: cmp x10, #64
-; CHECK-GI-NEXT: csel x10, x12, xzr, lo
-; CHECK-GI-NEXT: orr x0, x14, x8
-; CHECK-GI-NEXT: orr x1, x9, x10
+; CHECK-GI-NEXT: csel x9, x12, xzr, lo
+; CHECK-GI-NEXT: orr x0, x15, x8
+; CHECK-GI-NEXT: orr x1, x11, x9
; CHECK-GI-NEXT: ret
entry:
%d = call i128 @llvm.fshl(i128 %a, i128 %b, i128 %c)
@@ -578,32 +577,31 @@ define i128 @fshr_i128(i128 %a, i128 %b, i128 %c) {
; CHECK-GI-NEXT: and x14, x4, #0x7f
; CHECK-GI-NEXT: sub x12, x11, x8
; CHECK-GI-NEXT: lsl x13, x10, x8
-; CHECK-GI-NEXT: lsl x16, x9, x8
+; CHECK-GI-NEXT: lsl x15, x9, x8
; CHECK-GI-NEXT: lsr x12, x9, x12
-; CHECK-GI-NEXT: sub x17, x8, #64
+; CHECK-GI-NEXT: sub x16, x8, #64
; CHECK-GI-NEXT: cmp x8, #64
-; CHECK-GI-NEXT: lsl x8, x9, x17
+; CHECK-GI-NEXT: lsl x9, x9, x16
; CHECK-GI-NEXT: sub x11, x11, x14
-; CHECK-GI-NEXT: mvn x15, x4
-; CHECK-GI-NEXT: orr x12, x12, x13
-; CHECK-GI-NEXT: csel x9, x16, xzr, lo
-; CHECK-GI-NEXT: sub x13, x14, #64
; CHECK-GI-NEXT: lsr x16, x2, x14
+; CHECK-GI-NEXT: orr x12, x12, x13
+; CHECK-GI-NEXT: csel x13, x15, xzr, lo
+; CHECK-GI-NEXT: sub x15, x14, #64
; CHECK-GI-NEXT: lsl x11, x3, x11
-; CHECK-GI-NEXT: csel x8, x12, x8, lo
-; CHECK-GI-NEXT: tst x15, #0x7f
-; CHECK-GI-NEXT: lsr x12, x3, x13
-; CHECK-GI-NEXT: csel x8, x10, x8, eq
-; CHECK-GI-NEXT: orr x10, x16, x11
+; CHECK-GI-NEXT: csel x9, x12, x9, lo
+; CHECK-GI-NEXT: cmp x8, #0
+; CHECK-GI-NEXT: lsr x8, x3, x15
+; CHECK-GI-NEXT: csel x9, x10, x9, eq
; CHECK-GI-NEXT: cmp x14, #64
+; CHECK-GI-NEXT: orr x10, x16, x11
; CHECK-GI-NEXT: lsr x11, x3, x14
-; CHECK-GI-NEXT: csel x10, x10, x12, lo
-; CHECK-GI-NEXT: tst x4, #0x7f
-; CHECK-GI-NEXT: csel x10, x2, x10, eq
+; CHECK-GI-NEXT: csel x8, x10, x8, lo
+; CHECK-GI-NEXT: cmp x14, #0
+; CHECK-GI-NEXT: csel x8, x2, x8, eq
; CHECK-GI-NEXT: cmp x14, #64
-; CHECK-GI-NEXT: csel x11, x11, xzr, lo
-; CHECK-GI-NEXT: orr x0, x9, x10
-; CHECK-GI-NEXT: orr x1, x8, x11
+; CHECK-GI-NEXT: csel x10, x11, xzr, lo
+; CHECK-GI-NEXT: orr x0, x13, x8
+; CHECK-GI-NEXT: orr x1, x9, x10
; CHECK-GI-NEXT: ret
entry:
%d = call i128 @llvm.fshr(i128 %a, i128 %b, i128 %c)
@@ -1816,63 +1814,63 @@ define <2 x i128> @rotl_v2i128(<2 x i128> %a, <2 x i128> %c) {
; CHECK-GI-NEXT: mov w9, #64 // =0x40
; CHECK-GI-NEXT: neg x13, x4
; CHECK-GI-NEXT: sub x10, x9, x8
-; CHECK-GI-NEXT: lsl x12, x1, x8
; CHECK-GI-NEXT: sub x11, x8, #64
+; CHECK-GI-NEXT: lsl x12, x1, x8
; CHECK-GI-NEXT: lsr x10, x0, x10
-; CHECK-GI-NEXT: lsl x14, x0, x8
; CHECK-GI-NEXT: lsl x11, x0, x11
+; CHECK-GI-NEXT: lsl x14, x0, x8
; CHECK-GI-NEXT: cmp x8, #64
+; CHECK-GI-NEXT: and x13, x13, #0x7f
; CHECK-GI-NEXT: neg x15, x6
-; CHECK-GI-NEXT: orr x8, x10, x12
-; CHECK-GI-NEXT: and x10, x6, #0x7f
-; CHECK-GI-NEXT: csel x12, x14, xzr, lo
-; CHECK-GI-NEXT: sub x14, x9, x10
-; CHECK-GI-NEXT: csel x8, x8, x11, lo
-; CHECK-GI-NEXT: tst x4, #0x7f
-; CHECK-GI-NEXT: sub x11, x10, #64
-; CHECK-GI-NEXT: lsl x16, x2, x10
-; CHECK-GI-NEXT: lsr x14, x2, x14
-; CHECK-GI-NEXT: lsl x17, x3, x10
-; CHECK-GI-NEXT: csel x8, x1, x8, eq
-; CHECK-GI-NEXT: lsl x11, x2, x11
-; CHECK-GI-NEXT: cmp x10, #64
-; CHECK-GI-NEXT: and x4, x15, #0x7f
-; CHECK-GI-NEXT: orr x10, x14, x17
-; CHECK-GI-NEXT: csel x14, x16, xzr, lo
-; CHECK-GI-NEXT: and x16, x13, #0x7f
+; CHECK-GI-NEXT: orr x10, x10, x12
+; CHECK-GI-NEXT: and x12, x6, #0x7f
+; CHECK-GI-NEXT: csel x14, x14, xzr, lo
; CHECK-GI-NEXT: csel x10, x10, x11, lo
-; CHECK-GI-NEXT: sub x11, x9, x16
-; CHECK-GI-NEXT: sub x17, x16, #64
-; CHECK-GI-NEXT: lsr x18, x0, x16
+; CHECK-GI-NEXT: sub x11, x9, x12
+; CHECK-GI-NEXT: cmp x8, #0
+; CHECK-GI-NEXT: sub x8, x12, #64
+; CHECK-GI-NEXT: lsr x11, x2, x11
+; CHECK-GI-NEXT: lsl x17, x3, x12
+; CHECK-GI-NEXT: lsl x8, x2, x8
+; CHECK-GI-NEXT: lsl x16, x2, x12
+; CHECK-GI-NEXT: csel x10, x1, x10, eq
+; CHECK-GI-NEXT: cmp x12, #64
+; CHECK-GI-NEXT: orr x11, x11, x17
+; CHECK-GI-NEXT: lsr x17, x0, x13
+; CHECK-GI-NEXT: csel x8, x11, x8, lo
+; CHECK-GI-NEXT: sub x11, x9, x13
+; CHECK-GI-NEXT: csel x16, x16, xzr, lo
+; CHECK-GI-NEXT: cmp x12, #0
+; CHECK-GI-NEXT: sub x12, x13, #64
; CHECK-GI-NEXT: lsl x11, x1, x11
-; CHECK-GI-NEXT: tst x6, #0x7f
-; CHECK-GI-NEXT: lsr x17, x1, x17
-; CHECK-GI-NEXT: csel x10, x3, x10, eq
-; CHECK-GI-NEXT: cmp x16, #64
-; CHECK-GI-NEXT: orr x11, x18, x11
-; CHECK-GI-NEXT: sub x9, x9, x4
-; CHECK-GI-NEXT: lsr x1, x1, x16
-; CHECK-GI-NEXT: csel x11, x11, x17, lo
-; CHECK-GI-NEXT: tst x13, #0x7f
-; CHECK-GI-NEXT: sub x13, x4, #64
-; CHECK-GI-NEXT: lsr x17, x2, x4
+; CHECK-GI-NEXT: and x15, x15, #0x7f
+; CHECK-GI-NEXT: lsr x12, x1, x12
+; CHECK-GI-NEXT: csel x8, x3, x8, eq
+; CHECK-GI-NEXT: orr x11, x17, x11
+; CHECK-GI-NEXT: cmp x13, #64
+; CHECK-GI-NEXT: sub x9, x9, x15
+; CHECK-GI-NEXT: lsr x18, x1, x13
+; CHECK-GI-NEXT: csel x11, x11, x12, lo
+; CHECK-GI-NEXT: cmp x13, #0
+; CHECK-GI-NEXT: sub x12, x15, #64
+; CHECK-GI-NEXT: lsr x17, x2, x15
; CHECK-GI-NEXT: lsl x9, x3, x9
; CHECK-GI-NEXT: csel x11, x0, x11, eq
-; CHECK-GI-NEXT: cmp x16, #64
-; CHECK-GI-NEXT: lsr x13, x3, x13
-; CHECK-GI-NEXT: orr x0, x12, x11
-; CHECK-GI-NEXT: csel x16, x1, xzr, lo
+; CHECK-GI-NEXT: cmp x13, #64
+; CHECK-GI-NEXT: lsr x12, x3, x12
+; CHECK-GI-NEXT: csel x13, x18, xzr, lo
; CHECK-GI-NEXT: orr x9, x17, x9
-; CHECK-GI-NEXT: cmp x4, #64
-; CHECK-GI-NEXT: lsr x17, x3, x4
-; CHECK-GI-NEXT: csel x9, x9, x13, lo
-; CHECK-GI-NEXT: tst x15, #0x7f
+; CHECK-GI-NEXT: cmp x15, #64
+; CHECK-GI-NEXT: lsr x17, x3, x15
+; CHECK-GI-NEXT: csel x9, x9, x12, lo
+; CHECK-GI-NEXT: cmp x15, #0
; CHECK-GI-NEXT: csel x9, x2, x9, eq
-; CHECK-GI-NEXT: cmp x4, #64
-; CHECK-GI-NEXT: orr x1, x8, x16
-; CHECK-GI-NEXT: csel x13, x17, xzr, lo
-; CHECK-GI-NEXT: orr x2, x14, x9
-; CHECK-GI-NEXT: orr x3, x10, x13
+; CHECK-GI-NEXT: cmp x15, #64
+; CHECK-GI-NEXT: orr x0, x14, x11
+; CHECK-GI-NEXT: csel x12, x17, xzr, lo
+; CHECK-GI-NEXT: orr x1, x10, x13
+; CHECK-GI-NEXT: orr x2, x16, x9
+; CHECK-GI-NEXT: orr x3, x8, x12
; CHECK-GI-NEXT: ret
entry:
%d = call <2 x i128> @llvm.fshl(<2 x i128> %a, <2 x i128> %a, <2 x i128> %c)
@@ -1921,12 +1919,12 @@ define <2 x i128> @rotr_v2i128(<2 x i128> %a, <2 x i128> %c) {
; CHECK-GI-NEXT: cmp x8, #64
; CHECK-GI-NEXT: sub x15, x9, x14
; CHECK-GI-NEXT: neg x13, x4
-; CHECK-GI-NEXT: lsr x17, x3, x14
+; CHECK-GI-NEXT: neg x16, x6
; CHECK-GI-NEXT: orr x10, x12, x10
; CHECK-GI-NEXT: lsr x12, x1, x8
; CHECK-GI-NEXT: lsl x15, x3, x15
; CHECK-GI-NEXT: csel x10, x10, x11, lo
-; CHECK-GI-NEXT: tst x4, #0x7f
+; CHECK-GI-NEXT: cmp x8, #0
; CHECK-GI-NEXT: sub x11, x14, #64
; CHECK-GI-NEXT: csel x10, x0, x10, eq
; CHECK-GI-NEXT: cmp x8, #64
@@ -1935,41 +1933,41 @@ define <2 x i128> @rotr_v2i128(<2 x i128> %a, <2 x i128> %c) {
; CHECK-GI-NEXT: csel x12, x12, xzr, lo
; CHECK-GI-NEXT: cmp x14, #64
; CHECK-GI-NEXT: orr x8, x8, x15
-; CHECK-GI-NEXT: neg x16, x6
+; CHECK-GI-NEXT: lsr x17, x3, x14
+; CHECK-GI-NEXT: and x16, x16, #0x7f
; CHECK-GI-NEXT: csel x8, x8, x11, lo
-; CHECK-GI-NEXT: tst x6, #0x7f
; CHECK-GI-NEXT: and x11, x13, #0x7f
+; CHECK-GI-NEXT: cmp x14, #0
+; CHECK-GI-NEXT: sub x13, x9, x11
; CHECK-GI-NEXT: csel x8, x2, x8, eq
; CHECK-GI-NEXT: cmp x14, #64
-; CHECK-GI-NEXT: sub x14, x9, x11
-; CHECK-GI-NEXT: sub x15, x11, #64
-; CHECK-GI-NEXT: lsr x14, x0, x14
-; CHECK-GI-NEXT: lsl x18, x1, x11
-; CHECK-GI-NEXT: lsl x4, x0, x11
-; CHECK-GI-NEXT: lsl x15, x0, x15
-; CHECK-GI-NEXT: and x0, x16, #0x7f
+; CHECK-GI-NEXT: sub x14, x11, #64
+; CHECK-GI-NEXT: lsr x13, x0, x13
+; CHECK-GI-NEXT: lsl x15, x1, x11
+; CHECK-GI-NEXT: lsl x18, x0, x11
+; CHECK-GI-NEXT: lsl x14, x0, x14
; CHECK-GI-NEXT: csel x17, x17, xzr, lo
-; CHECK-GI-NEXT: orr x14, x14, x18
+; CHECK-GI-NEXT: orr x13, x13, x15
; CHECK-GI-NEXT: cmp x11, #64
-; CHECK-GI-NEXT: sub x9, x9, x0
-; CHECK-GI-NEXT: csel x14, x14, x15, lo
-; CHECK-GI-NEXT: sub x15, x0, #64
+; CHECK-GI-NEXT: sub x9, x9, x16
+; CHECK-GI-NEXT: csel x15, x18, xzr, lo
+; CHECK-GI-NEXT: csel x13, x13, x14, lo
+; CHECK-GI-NEXT: sub x14, x16, #64
; CHECK-GI-NEXT: lsr x9, x2, x9
-; CHECK-GI-NEXT: lsl x18, x3, x0
-; CHECK-GI-NEXT: csel x11, x4, xzr, lo
-; CHECK-GI-NEXT: tst x13, #0x7f
-; CHECK-GI-NEXT: lsl x13, x2, x0
-; CHECK-GI-NEXT: lsl x15, x2, x15
-; CHECK-GI-NEXT: csel x14, x1, x14, eq
+; CHECK-GI-NEXT: lsl x18, x3, x16
+; CHECK-GI-NEXT: cmp x11, #0
+; CHECK-GI-NEXT: lsl x11, x2, x16
+; CHECK-GI-NEXT: lsl x14, x2, x14
+; CHECK-GI-NEXT: csel x13, x1, x13, eq
; CHECK-GI-NEXT: orr x9, x9, x18
-; CHECK-GI-NEXT: cmp x0, #64
-; CHECK-GI-NEXT: csel x13, x13, xzr, lo
-; CHECK-GI-NEXT: csel x9, x9, x15, lo
-; CHECK-GI-NEXT: tst x16, #0x7f
+; CHECK-GI-NEXT: cmp x16, #64
+; CHECK-GI-NEXT: orr x0, x10, x15
+; CHECK-GI-NEXT: csel x11, x11, xzr, lo
+; CHECK-GI-NEXT: csel x9, x9, x14, lo
+; CHECK-GI-NEXT: cmp x16, #0
; CHECK-GI-NEXT: csel x9, x3, x9, eq
-; CHECK-GI-NEXT: orr x0, x10, x11
-; CHECK-GI-NEXT: orr x1, x12, x14
-; CHECK-GI-NEXT: orr x2, x8, x13
+; CHECK-GI-NEXT: orr x1, x12, x13
+; CHECK-GI-NEXT: orr x2, x8, x11
; CHECK-GI-NEXT: orr x3, x17, x9
; CHECK-GI-NEXT: ret
entry:
@@ -2987,78 +2985,72 @@ define <2 x i128> @fshl_v2i128(<2 x i128> %a, <2 x i128> %b, <2 x i128> %c) {
;
; CHECK-GI-LABEL: fshl_v2i128:
; CHECK-GI: // %bb.0: // %entry
-; CHECK-GI-NEXT: str x19, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-GI-NEXT: .cfi_def_cfa_offset 16
-; CHECK-GI-NEXT: .cfi_offset w19, -16
-; CHECK-GI-NEXT: ldr x11, [sp, #16]
-; CHECK-GI-NEXT: mov w9, #64 // =0x40
-; CHECK-GI-NEXT: ldr x12, [sp, #32]
-; CHECK-GI-NEXT: mov w13, #127 // =0x7f
-; CHECK-GI-NEXT: and x8, x11, #0x7f
-; CHECK-GI-NEXT: and x14, x12, #0x7f
-; CHECK-GI-NEXT: mvn x18, x11
-; CHECK-GI-NEXT: sub x10, x9, x8
-; CHECK-GI-NEXT: sub x15, x8, #64
-; CHECK-GI-NEXT: lsl x17, x1, x8
-; CHECK-GI-NEXT: lsr x16, x0, x10
-; CHECK-GI-NEXT: lsl x15, x0, x15
-; CHECK-GI-NEXT: cmp x8, #64
-; CHECK-GI-NEXT: lsl x19, x0, x8
-; CHECK-GI-NEXT: lsl x0, x3, x14
-; CHECK-GI-NEXT: mvn x10, x12
-; CHECK-GI-NEXT: orr x16, x16, x17
-; CHECK-GI-NEXT: sub x17, x14, #64
-; CHECK-GI-NEXT: csel x15, x16, x15, lo
-; CHECK-GI-NEXT: sub x16, x9, x14
-; CHECK-GI-NEXT: csel x8, x19, xzr, lo
-; CHECK-GI-NEXT: lsr x16, x2, x16
-; CHECK-GI-NEXT: tst x11, #0x7f
-; CHECK-GI-NEXT: lsl x19, x2, x14
-; CHECK-GI-NEXT: lsl x17, x2, x17
-; CHECK-GI-NEXT: csel x15, x1, x15, eq
-; CHECK-GI-NEXT: cmp x14, #64
-; CHECK-GI-NEXT: orr x16, x16, x0
-; CHECK-GI-NEXT: bic x11, x13, x11
-; CHECK-GI-NEXT: csel x14, x19, xzr, lo
-; CHECK-GI-NEXT: csel x16, x16, x17, lo
-; CHECK-GI-NEXT: tst x12, #0x7f
-; CHECK-GI-NEXT: lsr x17, x5, #1
-; CHECK-GI-NEXT: extr x0, x5, x4, #1
-; CHECK-GI-NEXT: bic x12, x13, x12
-; CHECK-GI-NEXT: csel x13, x3, x16, eq
-; CHECK-GI-NEXT: sub x16, x9, x11
-; CHECK-GI-NEXT: sub x1, x11, #64
-; CHECK-GI-NEXT: lsr x3, x7, #1
-; CHECK-GI-NEXT: lsr x2, x0, x11
-; CHECK-GI-NEXT: lsl x16, x17, x16
-; CHECK-GI-NEXT: extr x4, x7, x6, #1
-; CHECK-GI-NEXT: lsr x1, x17, x1
-; CHECK-GI-NEXT: cmp x11, #64
-; CHECK-GI-NEXT: sub x9, x9, x12
-; CHECK-GI-NEXT: orr x16, x2, x16
-; CHECK-GI-NEXT: lsr x17, x17, x11
-; CHECK-GI-NEXT: lsl x9, x3, x9
-; CHECK-GI-NEXT: csel x16, x16, x1, lo
-; CHECK-GI-NEXT: tst x18, #0x7f
+; CHECK-GI-NEXT: ldr x9, [sp]
+; CHECK-GI-NEXT: mov w11, #64 // =0x40
+; CHECK-GI-NEXT: ldr x12, [sp, #16]
+; CHECK-GI-NEXT: and x10, x9, #0x7f
+; CHECK-GI-NEXT: and x17, x12, #0x7f
+; CHECK-GI-NEXT: sub x13, x11, x10
+; CHECK-GI-NEXT: sub x8, x10, #64
+; CHECK-GI-NEXT: lsl x15, x1, x10
+; CHECK-GI-NEXT: lsr x13, x0, x13
+; CHECK-GI-NEXT: lsl x14, x0, x10
+; CHECK-GI-NEXT: lsl x16, x0, x8
+; CHECK-GI-NEXT: cmp x10, #64
+; CHECK-GI-NEXT: lsl x18, x2, x17
+; CHECK-GI-NEXT: orr x13, x13, x15
+; CHECK-GI-NEXT: csel x8, x14, xzr, lo
+; CHECK-GI-NEXT: sub x14, x17, #64
+; CHECK-GI-NEXT: csel x13, x13, x16, lo
+; CHECK-GI-NEXT: cmp x10, #0
+; CHECK-GI-NEXT: sub x10, x11, x17
+; CHECK-GI-NEXT: lsr x10, x2, x10
+; CHECK-GI-NEXT: lsl x15, x3, x17
+; CHECK-GI-NEXT: lsl x14, x2, x14
+; CHECK-GI-NEXT: mov w16, #127 // =0x7f
+; CHECK-GI-NEXT: csel x13, x1, x13, eq
+; CHECK-GI-NEXT: cmp x17, #64
+; CHECK-GI-NEXT: orr x10, x10, x15
+; CHECK-GI-NEXT: bic x9, x16, x9
+; CHECK-GI-NEXT: csel x15, x18, xzr, lo
+; CHECK-GI-NEXT: csel x10, x10, x14, lo
+; CHECK-GI-NEXT: cmp x17, #0
+; CHECK-GI-NEXT: lsr x14, x5, #1
+; CHECK-GI-NEXT: extr x17, x5, x4, #1
+; CHECK-GI-NEXT: bic x12, x16, x12
+; CHECK-GI-NEXT: sub x16, x11, x9
+; CHECK-GI-NEXT: sub x18, x9, #64
+; CHECK-GI-NEXT: lsl x16, x14, x16
+; CHECK-GI-NEXT: lsr x1, x7, #1
+; CHECK-GI-NEXT: lsr x0, x17, x9
+; CHECK-GI-NEXT: extr x2, x7, x6, #1
+; CHECK-GI-NEXT: lsr x18, x14, x18
+; CHECK-GI-NEXT: csel x10, x3, x10, eq
+; CHECK-GI-NEXT: cmp x9, #64
+; CHECK-GI-NEXT: sub x11, x11, x12
+; CHECK-GI-NEXT: orr x16, x0, x16
+; CHECK-GI-NEXT: lsr x14, x14, x9
+; CHECK-GI-NEXT: lsr x0, x2, x12
+; CHECK-GI-NEXT: csel x16, x16, x18, lo
+; CHECK-GI-NEXT: cmp x9, #0
; CHECK-GI-NEXT: sub x18, x12, #64
-; CHECK-GI-NEXT: lsr x1, x4, x12
-; CHECK-GI-NEXT: csel x16, x0, x16, eq
-; CHECK-GI-NEXT: cmp x11, #64
-; CHECK-GI-NEXT: lsr x11, x3, x18
-; CHECK-GI-NEXT: csel x17, x17, xzr, lo
+; CHECK-GI-NEXT: lsl x11, x1, x11
+; CHECK-GI-NEXT: csel x16, x17, x16, eq
+; CHECK-GI-NEXT: cmp x9, #64
+; CHECK-GI-NEXT: lsr x9, x1, x18
+; CHECK-GI-NEXT: csel x14, x14, xzr, lo
; CHECK-GI-NEXT: cmp x12, #64
-; CHECK-GI-NEXT: orr x9, x1, x9
-; CHECK-GI-NEXT: lsr x18, x3, x12
+; CHECK-GI-NEXT: orr x11, x0, x11
+; CHECK-GI-NEXT: lsr x17, x1, x12
; CHECK-GI-NEXT: orr x0, x8, x16
-; CHECK-GI-NEXT: csel x9, x9, x11, lo
-; CHECK-GI-NEXT: tst x10, #0x7f
-; CHECK-GI-NEXT: orr x1, x15, x17
-; CHECK-GI-NEXT: csel x9, x4, x9, eq
+; CHECK-GI-NEXT: csel x9, x11, x9, lo
+; CHECK-GI-NEXT: cmp x12, #0
+; CHECK-GI-NEXT: orr x1, x13, x14
+; CHECK-GI-NEXT: csel x9, x2, x9, eq
; CHECK-GI-NEXT: cmp x12, #64
-; CHECK-GI-NEXT: csel x10, x18, xzr, lo
-; CHECK-GI-NEXT: orr x2, x14, x9
-; CHECK-GI-NEXT: orr x3, x13, x10
-; CHECK-GI-NEXT: ldr x19, [sp], #16 // 8-byte Folded Reload
+; CHECK-GI-NEXT: csel x11, x17, xzr, lo
+; CHECK-GI-NEXT: orr x2, x15, x9
+; CHECK-GI-NEXT: orr x3, x10, x11
; CHECK-GI-NEXT: ret
entry:
%d = call <2 x i128> @llvm.fshl(<2 x i128> %a, <2 x i128> %b, <2 x i128> %c)
@@ -3100,74 +3092,72 @@ define <2 x i128> @fshr_v2i128(<2 x i128> %a, <2 x i128> %b, <2 x i128> %c) {
;
; CHECK-GI-LABEL: fshr_v2i128:
; CHECK-GI: // %bb.0: // %entry
-; CHECK-GI-NEXT: ldr x9, [sp]
-; CHECK-GI-NEXT: mov w10, #127 // =0x7f
-; CHECK-GI-NEXT: mov w12, #64 // =0x40
-; CHECK-GI-NEXT: lsl x13, x0, #1
-; CHECK-GI-NEXT: extr x14, x1, x0, #63
-; CHECK-GI-NEXT: ldr x8, [sp, #16]
-; CHECK-GI-NEXT: bic x11, x10, x9
-; CHECK-GI-NEXT: mvn x16, x9
-; CHECK-GI-NEXT: and x15, x9, #0x7f
-; CHECK-GI-NEXT: sub x17, x12, x11
-; CHECK-GI-NEXT: sub x18, x11, #64
-; CHECK-GI-NEXT: lsl x0, x14, x11
-; CHECK-GI-NEXT: lsr x17, x13, x17
-; CHECK-GI-NEXT: lsl x1, x13, x11
-; CHECK-GI-NEXT: lsl x13, x13, x18
-; CHECK-GI-NEXT: bic x10, x10, x8
-; CHECK-GI-NEXT: lsl x18, x2, #1
-; CHECK-GI-NEXT: cmp x11, #64
-; CHECK-GI-NEXT: orr x17, x17, x0
-; CHECK-GI-NEXT: extr x11, x3, x2, #63
-; CHECK-GI-NEXT: csel x0, x1, xzr, lo
-; CHECK-GI-NEXT: csel x13, x17, x13, lo
-; CHECK-GI-NEXT: sub x17, x12, x10
-; CHECK-GI-NEXT: tst x16, #0x7f
+; CHECK-GI-NEXT: ldr x8, [sp]
+; CHECK-GI-NEXT: mov w9, #127 // =0x7f
+; CHECK-GI-NEXT: mov w11, #64 // =0x40
+; CHECK-GI-NEXT: lsl x12, x0, #1
+; CHECK-GI-NEXT: extr x13, x1, x0, #63
+; CHECK-GI-NEXT: ldr x14, [sp, #16]
+; CHECK-GI-NEXT: bic x10, x9, x8
+; CHECK-GI-NEXT: and x8, x8, #0x7f
+; CHECK-GI-NEXT: sub x15, x11, x10
; CHECK-GI-NEXT: sub x16, x10, #64
-; CHECK-GI-NEXT: lsr x17, x18, x17
-; CHECK-GI-NEXT: lsl x2, x11, x10
-; CHECK-GI-NEXT: lsl x1, x18, x10
-; CHECK-GI-NEXT: csel x13, x14, x13, eq
-; CHECK-GI-NEXT: lsl x14, x18, x16
+; CHECK-GI-NEXT: lsl x17, x13, x10
+; CHECK-GI-NEXT: lsr x15, x12, x15
+; CHECK-GI-NEXT: lsl x18, x12, x10
+; CHECK-GI-NEXT: lsl x12, x12, x16
+; CHECK-GI-NEXT: bic x9, x9, x14
+; CHECK-GI-NEXT: lsl x16, x2, #1
; CHECK-GI-NEXT: cmp x10, #64
-; CHECK-GI-NEXT: mvn x10, x8
-; CHECK-GI-NEXT: orr x16, x17, x2
-; CHECK-GI-NEXT: csel x17, x1, xzr, lo
-; CHECK-GI-NEXT: csel x14, x16, x14, lo
-; CHECK-GI-NEXT: tst x10, #0x7f
-; CHECK-GI-NEXT: sub x10, x12, x15
-; CHECK-GI-NEXT: sub x16, x15, #64
-; CHECK-GI-NEXT: lsr x18, x4, x15
-; CHECK-GI-NEXT: lsl x10, x5, x10
-; CHECK-GI-NEXT: csel x11, x11, x14, eq
-; CHECK-GI-NEXT: lsr x14, x5, x16
-; CHECK-GI-NEXT: and x1, x8, #0x7f
-; CHECK-GI-NEXT: cmp x15, #64
-; CHECK-GI-NEXT: lsr x16, x5, x15
-; CHECK-GI-NEXT: orr x10, x18, x10
-; CHECK-GI-NEXT: csel x10, x10, x14, lo
-; CHECK-GI-NEXT: tst x9, #0x7f
-; CHECK-GI-NEXT: sub x9, x12, x1
-; CHECK-GI-NEXT: sub x12, x1, #64
-; CHECK-GI-NEXT: lsr x14, x6, x1
-; CHECK-GI-NEXT: lsl x9, x7, x9
-; CHECK-GI-NEXT: csel x10, x4, x10, eq
-; CHECK-GI-NEXT: cmp x15, #64
-; CHECK-GI-NEXT: lsr x12, x7, x12
-; CHECK-GI-NEXT: csel x15, x16, xzr, lo
-; CHECK-GI-NEXT: orr x9, x14, x9
-; CHECK-GI-NEXT: cmp x1, #64
-; CHECK-GI-NEXT: lsr x14, x7, x1
-; CHECK-GI-NEXT: csel x9, x9, x12, lo
-; CHECK-GI-NEXT: tst x8, #0x7f
-; CHECK-GI-NEXT: csel x8, x6, x9, eq
-; CHECK-GI-NEXT: cmp x1, #64
-; CHECK-GI-NEXT: orr x0, x0, x10
-; CHECK-GI-NEXT: csel x9, x14, xzr, lo
-; CHECK-GI-NEXT: orr x1, x13, x15
-; CHECK-GI-NEXT: orr x2, x17, x8
-; CHECK-GI-NEXT: orr x3, x11, x9
+; CHECK-GI-NEXT: orr x15, x15, x17
+; CHECK-GI-NEXT: extr x17, x3, x2, #63
+; CHECK-GI-NEXT: csel x18, x18, xzr, lo
+; CHECK-GI-NEXT: csel x12, x15, x12, lo
+; CHECK-GI-NEXT: sub x15, x11, x9
+; CHECK-GI-NEXT: cmp x10, #0
+; CHECK-GI-NEXT: sub x10, x9, #64
+; CHECK-GI-NEXT: lsr x15, x16, x15
+; CHECK-GI-NEXT: lsl x1, x17, x9
+; CHECK-GI-NEXT: lsl x0, x16, x9
+; CHECK-GI-NEXT: lsl x10, x16, x10
+; CHECK-GI-NEXT: csel x12, x13, x12, eq
+; CHECK-GI-NEXT: cmp x9, #64
+; CHECK-GI-NEXT: orr x13, x15, x1
+; CHECK-GI-NEXT: lsr x16, x4, x8
+; CHECK-GI-NEXT: csel x15, x0, xzr, lo
+; CHECK-GI-NEXT: csel x10, x13, x10, lo
+; CHECK-GI-NEXT: cmp x9, #0
+; CHECK-GI-NEXT: sub x9, x11, x8
+; CHECK-GI-NEXT: sub x13, x8, #64
+; CHECK-GI-NEXT: and x14, x14, #0x7f
+; CHECK-GI-NEXT: lsl x9, x5, x9
+; CHECK-GI-NEXT: lsr x13, x5, x13
+; CHECK-GI-NEXT: csel x10, x17, x10, eq
+; CHECK-GI-NEXT: cmp x8, #64
+; CHECK-GI-NEXT: sub x11, x11, x14
+; CHECK-GI-NEXT: lsr x17, x5, x8
+; CHECK-GI-NEXT: orr x9, x16, x9
+; CHECK-GI-NEXT: lsr x16, x6, x14
+; CHECK-GI-NEXT: lsl x11, x7, x11
+; CHECK-GI-NEXT: csel x9, x9, x13, lo
+; CHECK-GI-NEXT: cmp x8, #0
+; CHECK-GI-NEXT: sub x13, x14, #64
+; CHECK-GI-NEXT: csel x9, x4, x9, eq
+; CHECK-GI-NEXT: cmp x8, #64
+; CHECK-GI-NEXT: lsr x8, x7, x13
+; CHECK-GI-NEXT: csel x13, x17, xzr, lo
+; CHECK-GI-NEXT: orr x11, x16, x11
+; CHECK-GI-NEXT: cmp x14, #64
+; CHECK-GI-NEXT: lsr x16, x7, x14
+; CHECK-GI-NEXT: csel x8, x11, x8, lo
+; CHECK-GI-NEXT: cmp x14, #0
+; CHECK-GI-NEXT: csel x8, x6, x8, eq
+; CHECK-GI-NEXT: cmp x14, #64
+; CHECK-GI-NEXT: orr x0, x18, x9
+; CHECK-GI-NEXT: csel x11, x16, xzr, lo
+; CHECK-GI-NEXT: orr x1, x12, x13
+; CHECK-GI-NEXT: orr x2, x15, x8
+; CHECK-GI-NEXT: orr x3, x10, x11
; CHECK-GI-NEXT: ret
entry:
%d = call <2 x i128> @llvm.fshr(<2 x i128> %a, <2 x i128> %b, <2 x i128> %c)
diff --git a/llvm/test/CodeGen/AArch64/funnel-shift.ll b/llvm/test/CodeGen/AArch64/funnel-shift.ll
index 90fb10258dffb..61ea355542e35 100644
--- a/llvm/test/CodeGen/AArch64/funnel-shift.ll
+++ b/llvm/test/CodeGen/AArch64/funnel-shift.ll
@@ -88,37 +88,36 @@ define i128 @fshl_i128(i128 %x, i128 %y, i128 %z) nounwind {
; CHECK-GI-NEXT: mov w8, #64 // =0x40
; CHECK-GI-NEXT: and x9, x4, #0x7f
; CHECK-GI-NEXT: mov w10, #127 // =0x7f
-; CHECK-GI-NEXT: sub x12, x8, x9
-; CHECK-GI-NEXT: lsl x13, x1, x9
+; CHECK-GI-NEXT: sub x11, x8, x9
+; CHECK-GI-NEXT: lsl x12, x1, x9
; CHECK-GI-NEXT: bic x10, x10, x4
-; CHECK-GI-NEXT: lsr x12, x0, x12
-; CHECK-GI-NEXT: sub x14, x9, #64
+; CHECK-GI-NEXT: lsr x11, x0, x11
+; CHECK-GI-NEXT: extr x13, x3, x2, #1
+; CHECK-GI-NEXT: lsr x14, x3, #1
+; CHECK-GI-NEXT: sub x16, x9, #64
; CHECK-GI-NEXT: lsl x15, x0, x9
-; CHECK-GI-NEXT: extr x16, x3, x2, #1
-; CHECK-GI-NEXT: cmp x9, #64
; CHECK-GI-NEXT: sub x8, x8, x10
-; CHECK-GI-NEXT: orr x9, x12, x13
-; CHECK-GI-NEXT: lsr x12, x3, #1
-; CHECK-GI-NEXT: lsl x13, x0, x14
-; CHECK-GI-NEXT: csel x14, x15, xzr, lo
-; CHECK-GI-NEXT: sub x15, x10, #64
-; CHECK-GI-NEXT: lsr x17, x16, x10
-; CHECK-GI-NEXT: lsl x8, x12, x8
-; CHECK-GI-NEXT: csel x9, x9, x13, lo
-; CHECK-GI-NEXT: tst x4, #0x7f
-; CHECK-GI-NEXT: lsr x13, x12, x15
-; CHECK-GI-NEXT: mvn x11, x4
-; CHECK-GI-NEXT: csel x9, x1, x9, eq
+; CHECK-GI-NEXT: orr x11, x11, x12
+; CHECK-GI-NEXT: lsl x12, x0, x16
+; CHECK-GI-NEXT: cmp x9, #64
+; CHECK-GI-NEXT: sub x16, x10, #64
+; CHECK-GI-NEXT: lsr x17, x13, x10
+; CHECK-GI-NEXT: lsl x8, x14, x8
+; CHECK-GI-NEXT: csel x15, x15, xzr, lo
+; CHECK-GI-NEXT: csel x11, x11, x12, lo
+; CHECK-GI-NEXT: cmp x9, #0
+; CHECK-GI-NEXT: lsr x9, x14, x16
+; CHECK-GI-NEXT: csel x11, x1, x11, eq
; CHECK-GI-NEXT: orr x8, x17, x8
; CHECK-GI-NEXT: cmp x10, #64
-; CHECK-GI-NEXT: lsr x12, x12, x10
-; CHECK-GI-NEXT: csel x8, x8, x13, lo
-; CHECK-GI-NEXT: tst x11, #0x7f
-; CHECK-GI-NEXT: csel x8, x16, x8, eq
+; CHECK-GI-NEXT: lsr x12, x14, x10
+; CHECK-GI-NEXT: csel x8, x8, x9, lo
+; CHECK-GI-NEXT: cmp x10, #0
+; CHECK-GI-NEXT: csel x8, x13, x8, eq
; CHECK-GI-NEXT: cmp x10, #64
-; CHECK-GI-NEXT: csel x10, x12, xzr, lo
-; CHECK-GI-NEXT: orr x0, x14, x8
-; CHECK-GI-NEXT: orr x1, x9, x10
+; CHECK-GI-NEXT: csel x9, x12, xzr, lo
+; CHECK-GI-NEXT: orr x0, x15, x8
+; CHECK-GI-NEXT: orr x1, x11, x9
; CHECK-GI-NEXT: ret
%f = call i128 @llvm.fshl.i128(i128 %x, i128 %y, i128 %z)
ret i128 %f
diff --git a/llvm/test/CodeGen/AArch64/peephole-and-tst.ll b/llvm/test/CodeGen/AArch64/peephole-and-tst.ll
index 74b0e69d1b05b..e5617c7297008 100644
--- a/llvm/test/CodeGen/AArch64/peephole-and-tst.ll
+++ b/llvm/test/CodeGen/AArch64/peephole-and-tst.ll
@@ -7,66 +7,35 @@
@ptr_wrapper = common global ptr null, align 8
define i32 @test_func_i32_two_uses(i32 %in, i32 %bit, i32 %mask) {
-; CHECK-SD-LABEL: test_func_i32_two_uses:
-; CHECK-SD: // %bb.0: // %entry
-; CHECK-SD-NEXT: adrp x8, :got:ptr_wrapper
-; CHECK-SD-NEXT: ldr x8, [x8, :got_lo12:ptr_wrapper]
-; CHECK-SD-NEXT: ldr x9, [x8]
-; CHECK-SD-NEXT: mov w8, wzr
-; CHECK-SD-NEXT: b .LBB0_3
-; CHECK-SD-NEXT: .LBB0_1: // in Loop: Header=BB0_3 Depth=1
-; CHECK-SD-NEXT: str xzr, [x9, #8]
-; CHECK-SD-NEXT: .LBB0_2: // in Loop: Header=BB0_3 Depth=1
-; CHECK-SD-NEXT: lsl w1, w1, #1
-; CHECK-SD-NEXT: cbz w1, .LBB0_6
-; CHECK-SD-NEXT: .LBB0_3: // %do.body
-; CHECK-SD-NEXT: // =>This Inner Loop Header: Depth=1
-; CHECK-SD-NEXT: ands w10, w1, w0
-; CHECK-SD-NEXT: and w11, w2, w0
-; CHECK-SD-NEXT: cinc w8, w8, ne
-; CHECK-SD-NEXT: cmp w10, w11
-; CHECK-SD-NEXT: b.eq .LBB0_1
-; CHECK-SD-NEXT: // %bb.4: // %do.body
-; CHECK-SD-NEXT: // in Loop: Header=BB0_3 Depth=1
-; CHECK-SD-NEXT: cbnz w2, .LBB0_1
-; CHECK-SD-NEXT: // %bb.5: // %do.body
-; CHECK-SD-NEXT: // in Loop: Header=BB0_3 Depth=1
-; CHECK-SD-NEXT: cbz w10, .LBB0_2
-; CHECK-SD-NEXT: b .LBB0_1
-; CHECK-SD-NEXT: .LBB0_6: // %do.end
-; CHECK-SD-NEXT: mov w0, w8
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: test_func_i32_two_uses:
-; CHECK-GI: // %bb.0: // %entry
-; CHECK-GI-NEXT: adrp x8, :got:ptr_wrapper
-; CHECK-GI-NEXT: ldr x8, [x8, :got_lo12:ptr_wrapper]
-; CHECK-GI-NEXT: ldr x9, [x8]
-; CHECK-GI-NEXT: mov w8, wzr
-; CHECK-GI-NEXT: b .LBB0_3
-; CHECK-GI-NEXT: .LBB0_1: // in Loop: Header=BB0_3 Depth=1
-; CHECK-GI-NEXT: str xzr, [x9, #8]
-; CHECK-GI-NEXT: .LBB0_2: // in Loop: Header=BB0_3 Depth=1
-; CHECK-GI-NEXT: lsl w1, w1, #1
-; CHECK-GI-NEXT: cbz w1, .LBB0_6
-; CHECK-GI-NEXT: .LBB0_3: // %do.body
-; CHECK-GI-NEXT: // =>This Inner Loop Header: Depth=1
-; CHECK-GI-NEXT: and w10, w1, w0
-; CHECK-GI-NEXT: tst w1, w0
-; CHECK-GI-NEXT: and w11, w2, w0
-; CHECK-GI-NEXT: cinc w8, w8, ne
-; CHECK-GI-NEXT: cmp w10, w11
-; CHECK-GI-NEXT: b.eq .LBB0_1
-; CHECK-GI-NEXT: // %bb.4: // %do.body
-; CHECK-GI-NEXT: // in Loop: Header=BB0_3 Depth=1
-; CHECK-GI-NEXT: cbnz w2, .LBB0_1
-; CHECK-GI-NEXT: // %bb.5: // %do.body
-; CHECK-GI-NEXT: // in Loop: Header=BB0_3 Depth=1
-; CHECK-GI-NEXT: cbz w10, .LBB0_2
-; CHECK-GI-NEXT: b .LBB0_1
-; CHECK-GI-NEXT: .LBB0_6: // %do.end
-; CHECK-GI-NEXT: mov w0, w8
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: test_func_i32_two_uses:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: adrp x8, :got:ptr_wrapper
+; CHECK-NEXT: ldr x8, [x8, :got_lo12:ptr_wrapper]
+; CHECK-NEXT: ldr x9, [x8]
+; CHECK-NEXT: mov w8, wzr
+; CHECK-NEXT: b .LBB0_3
+; CHECK-NEXT: .LBB0_1: // in Loop: Header=BB0_3 Depth=1
+; CHECK-NEXT: str xzr, [x9, #8]
+; CHECK-NEXT: .LBB0_2: // in Loop: Header=BB0_3 Depth=1
+; CHECK-NEXT: lsl w1, w1, #1
+; CHECK-NEXT: cbz w1, .LBB0_6
+; CHECK-NEXT: .LBB0_3: // %do.body
+; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
+; CHECK-NEXT: ands w10, w1, w0
+; CHECK-NEXT: and w11, w2, w0
+; CHECK-NEXT: cinc w8, w8, ne
+; CHECK-NEXT: cmp w10, w11
+; CHECK-NEXT: b.eq .LBB0_1
+; CHECK-NEXT: // %bb.4: // %do.body
+; CHECK-NEXT: // in Loop: Header=BB0_3 Depth=1
+; CHECK-NEXT: cbnz w2, .LBB0_1
+; CHECK-NEXT: // %bb.5: // %do.body
+; CHECK-NEXT: // in Loop: Header=BB0_3 Depth=1
+; CHECK-NEXT: cbz w10, .LBB0_2
+; CHECK-NEXT: b .LBB0_1
+; CHECK-NEXT: .LBB0_6: // %do.end
+; CHECK-NEXT: mov w0, w8
+; CHECK-NEXT: ret
entry:
%0 = load ptr, ptr @ptr_wrapper, align 8
%result = getelementptr inbounds %struct.anon, ptr %0, i64 0, i32 1
@@ -102,52 +71,28 @@ do.end: ; preds = %4
}
define i32 @test_func_i64_one_use(i64 %in, i64 %bit, i64 %mask) {
-; CHECK-SD-LABEL: test_func_i64_one_use:
-; CHECK-SD: // %bb.0: // %entry
-; CHECK-SD-NEXT: adrp x8, :got:ptr_wrapper
-; CHECK-SD-NEXT: ldr x8, [x8, :got_lo12:ptr_wrapper]
-; CHECK-SD-NEXT: ldr x9, [x8]
-; CHECK-SD-NEXT: mov w8, wzr
-; CHECK-SD-NEXT: b .LBB1_2
-; CHECK-SD-NEXT: .LBB1_1: // in Loop: Header=BB1_2 Depth=1
-; CHECK-SD-NEXT: lsl x1, x1, #1
-; CHECK-SD-NEXT: cbz x1, .LBB1_4
-; CHECK-SD-NEXT: .LBB1_2: // %do.body
-; CHECK-SD-NEXT: // =>This Inner Loop Header: Depth=1
-; CHECK-SD-NEXT: ands x10, x1, x0
-; CHECK-SD-NEXT: orr x10, x2, x10
-; CHECK-SD-NEXT: cinc w8, w8, ne
-; CHECK-SD-NEXT: cbz x10, .LBB1_1
-; CHECK-SD-NEXT: // %bb.3: // in Loop: Header=BB1_2 Depth=1
-; CHECK-SD-NEXT: str xzr, [x9, #8]
-; CHECK-SD-NEXT: b .LBB1_1
-; CHECK-SD-NEXT: .LBB1_4: // %do.end
-; CHECK-SD-NEXT: mov w0, w8
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: test_func_i64_one_use:
-; CHECK-GI: // %bb.0: // %entry
-; CHECK-GI-NEXT: adrp x8, :got:ptr_wrapper
-; CHECK-GI-NEXT: ldr x8, [x8, :got_lo12:ptr_wrapper]
-; CHECK-GI-NEXT: ldr x9, [x8]
-; CHECK-GI-NEXT: mov w8, wzr
-; CHECK-GI-NEXT: b .LBB1_2
-; CHECK-GI-NEXT: .LBB1_1: // in Loop: Header=BB1_2 Depth=1
-; CHECK-GI-NEXT: lsl x1, x1, #1
-; CHECK-GI-NEXT: cbz x1, .LBB1_4
-; CHECK-GI-NEXT: .LBB1_2: // %do.body
-; CHECK-GI-NEXT: // =>This Inner Loop Header: Depth=1
-; CHECK-GI-NEXT: and x10, x1, x0
-; CHECK-GI-NEXT: tst x1, x0
-; CHECK-GI-NEXT: orr x10, x2, x10
-; CHECK-GI-NEXT: cinc w8, w8, ne
-; CHECK-GI-NEXT: cbz x10, .LBB1_1
-; CHECK-GI-NEXT: // %bb.3: // in Loop: Header=BB1_2 Depth=1
-; CHECK-GI-NEXT: str xzr, [x9, #8]
-; CHECK-GI-NEXT: b .LBB1_1
-; CHECK-GI-NEXT: .LBB1_4: // %do.end
-; CHECK-GI-NEXT: mov w0, w8
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: test_func_i64_one_use:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: adrp x8, :got:ptr_wrapper
+; CHECK-NEXT: ldr x8, [x8, :got_lo12:ptr_wrapper]
+; CHECK-NEXT: ldr x9, [x8]
+; CHECK-NEXT: mov w8, wzr
+; CHECK-NEXT: b .LBB1_2
+; CHECK-NEXT: .LBB1_1: // in Loop: Header=BB1_2 Depth=1
+; CHECK-NEXT: lsl x1, x1, #1
+; CHECK-NEXT: cbz x1, .LBB1_4
+; CHECK-NEXT: .LBB1_2: // %do.body
+; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
+; CHECK-NEXT: ands x10, x1, x0
+; CHECK-NEXT: orr x10, x2, x10
+; CHECK-NEXT: cinc w8, w8, ne
+; CHECK-NEXT: cbz x10, .LBB1_1
+; CHECK-NEXT: // %bb.3: // in Loop: Header=BB1_2 Depth=1
+; CHECK-NEXT: str xzr, [x9, #8]
+; CHECK-NEXT: b .LBB1_1
+; CHECK-NEXT: .LBB1_4: // %do.end
+; CHECK-NEXT: mov w0, w8
+; CHECK-NEXT: ret
entry:
%0 = load ptr, ptr @ptr_wrapper, align 8
%result = getelementptr inbounds %struct.anon, ptr %0, i64 0, i32 1
@@ -180,18 +125,11 @@ do.end: ; preds = %4
}
define i64 @test_and1(i64 %x, i64 %y) {
-; CHECK-SD-LABEL: test_and1:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ands x8, x0, #0x3
-; CHECK-SD-NEXT: csel x0, x8, x1, eq
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: test_and1:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: and x8, x0, #0x3
-; CHECK-GI-NEXT: tst x0, #0x3
-; CHECK-GI-NEXT: csel x0, x8, x1, eq
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: test_and1:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ands x8, x0, #0x3
+; CHECK-NEXT: csel x0, x8, x1, eq
+; CHECK-NEXT: ret
%a = and i64 %x, 3
%c = icmp eq i64 %a, 0
%s = select i1 %c, i64 %a, i64 %y
@@ -211,43 +149,23 @@ define i64 @test_and2(i64 %x, i64 %y) {
}
define i64 @test_and3(i64 %x, i64 %y) {
-; CHECK-SD-LABEL: test_and3:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: str x30, [sp, #-32]! // 8-byte Folded Spill
-; CHECK-SD-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill
-; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
-; CHECK-SD-NEXT: .cfi_offset w19, -8
-; CHECK-SD-NEXT: .cfi_offset w20, -16
-; CHECK-SD-NEXT: .cfi_offset w30, -32
-; CHECK-SD-NEXT: mov x20, x0
-; CHECK-SD-NEXT: mov x0, xzr
-; CHECK-SD-NEXT: mov x19, x1
-; CHECK-SD-NEXT: bl callee
-; CHECK-SD-NEXT: ands x8, x20, #0x3
-; CHECK-SD-NEXT: csel x0, x8, x19, eq
-; CHECK-SD-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
-; CHECK-SD-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: test_and3:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: stp x30, x21, [sp, #-32]! // 16-byte Folded Spill
-; CHECK-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill
-; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
-; CHECK-GI-NEXT: .cfi_offset w19, -8
-; CHECK-GI-NEXT: .cfi_offset w20, -16
-; CHECK-GI-NEXT: .cfi_offset w21, -24
-; CHECK-GI-NEXT: .cfi_offset w30, -32
-; CHECK-GI-NEXT: mov x19, x0
-; CHECK-GI-NEXT: and x21, x0, #0x3
-; CHECK-GI-NEXT: mov x0, xzr
-; CHECK-GI-NEXT: mov x20, x1
-; CHECK-GI-NEXT: bl callee
-; CHECK-GI-NEXT: tst x19, #0x3
-; CHECK-GI-NEXT: csel x0, x21, x20, eq
-; CHECK-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
-; CHECK-GI-NEXT: ldp x30, x21, [sp], #32 // 16-byte Folded Reload
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: test_and3:
+; CHECK: // %bb.0:
+; CHECK-NEXT: str x30, [sp, #-32]! // 8-byte Folded Spill
+; CHECK-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill
+; CHECK-NEXT: .cfi_def_cfa_offset 32
+; CHECK-NEXT: .cfi_offset w19, -8
+; CHECK-NEXT: .cfi_offset w20, -16
+; CHECK-NEXT: .cfi_offset w30, -32
+; CHECK-NEXT: and x20, x0, #0x3
+; CHECK-NEXT: mov x0, xzr
+; CHECK-NEXT: mov x19, x1
+; CHECK-NEXT: bl callee
+; CHECK-NEXT: cmp x20, #0
+; CHECK-NEXT: csel x0, x20, x19, eq
+; CHECK-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
+; CHECK-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
+; CHECK-NEXT: ret
%a = and i64 %x, 3
%b = call i64 @callee(i64 0)
%c = icmp eq i64 %a, 0
@@ -256,37 +174,19 @@ define i64 @test_and3(i64 %x, i64 %y) {
}
define i64 @test_and_4(i64 %x, i64 %y) {
-; CHECK-SD-LABEL: test_and_4:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
-; CHECK-SD-NEXT: .cfi_def_cfa_offset 16
-; CHECK-SD-NEXT: .cfi_offset w19, -8
-; CHECK-SD-NEXT: .cfi_offset w30, -16
-; CHECK-SD-NEXT: mov x19, x0
-; CHECK-SD-NEXT: ands x0, x0, #0x3
-; CHECK-SD-NEXT: bl callee
-; CHECK-SD-NEXT: ands x8, x19, #0x3
-; CHECK-SD-NEXT: csel x0, x8, x0, eq
-; CHECK-SD-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: test_and_4:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: str x30, [sp, #-32]! // 8-byte Folded Spill
-; CHECK-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill
-; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
-; CHECK-GI-NEXT: .cfi_offset w19, -8
-; CHECK-GI-NEXT: .cfi_offset w20, -16
-; CHECK-GI-NEXT: .cfi_offset w30, -32
-; CHECK-GI-NEXT: mov x19, x0
-; CHECK-GI-NEXT: and x20, x0, #0x3
-; CHECK-GI-NEXT: and x0, x0, #0x3
-; CHECK-GI-NEXT: bl callee
-; CHECK-GI-NEXT: tst x19, #0x3
-; CHECK-GI-NEXT: csel x0, x20, x0, eq
-; CHECK-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
-; CHECK-GI-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: test_and_4:
+; CHECK: // %bb.0:
+; CHECK-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: .cfi_offset w19, -8
+; CHECK-NEXT: .cfi_offset w30, -16
+; CHECK-NEXT: and x19, x0, #0x3
+; CHECK-NEXT: mov x0, x19
+; CHECK-NEXT: bl callee
+; CHECK-NEXT: cmp x19, #0
+; CHECK-NEXT: csel x0, x19, x0, eq
+; CHECK-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
+; CHECK-NEXT: ret
%a = and i64 %x, 3
%b = call i64 @callee(i64 %a)
%c = icmp eq i64 %a, 0
@@ -316,3 +216,6 @@ define i64 @test_add(i64 %x, i64 %y) {
}
declare i64 @callee(i64)
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; CHECK-GI: {{.*}}
+; CHECK-SD: {{.*}}
diff --git a/llvm/test/CodeGen/AArch64/sshl_sat.ll b/llvm/test/CodeGen/AArch64/sshl_sat.ll
index be2b3e763733b..34f233135f002 100644
--- a/llvm/test/CodeGen/AArch64/sshl_sat.ll
+++ b/llvm/test/CodeGen/AArch64/sshl_sat.ll
@@ -142,12 +142,11 @@ define i16 @combine_shlsat_to_shl(i16 %x) nounwind {
define i16 @combine_shlsat_to_shl_no_fold(i16 %x) nounwind {
; CHECK-LABEL: combine_shlsat_to_shl_no_fold:
; CHECK: // %bb.0:
-; CHECK-NEXT: sxth w8, w0
-; CHECK-NEXT: mov w9, #-65536 // =0xffff0000
+; CHECK-NEXT: sbfiz w8, w0, #14, #16
; CHECK-NEXT: mov w10, #-2147483648 // =0x80000000
-; CHECK-NEXT: ands w8, w9, w8, lsl #14
-; CHECK-NEXT: cinv w10, w10, pl
+; CHECK-NEXT: ands w8, w8, #0xffff0000
; CHECK-NEXT: lsl w9, w8, #3
+; CHECK-NEXT: cinv w10, w10, pl
; CHECK-NEXT: cmp w8, w9, asr #3
; CHECK-NEXT: csel w8, w10, w9, ne
; CHECK-NEXT: asr w0, w8, #16
More information about the llvm-commits
mailing list