[llvm] [AArch64] Restrict folding multiple-use AND nodes into ANDS (PR #167371)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 29 07:26:17 PST 2026


https://github.com/SiliconA-Z updated https://github.com/llvm/llvm-project/pull/167371

>From a796ad8c3bc0828ab85c9681e7a3eb7cd0cd1f11 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.

This works well for one-use because it works even if the cmp and and end up in different basic blocks.

Peephole will catch the extra stray cases.

Fixes: #175453
---
 .../Target/AArch64/AArch64ISelLowering.cpp    |   18 +-
 .../GISel/AArch64InstructionSelector.cpp      |    6 +-
 .../GlobalISel/split-wide-shifts-multiway.ll  | 5894 +++++++++--------
 llvm/test/CodeGen/AArch64/arm64-ccmp.ll       |    4 +-
 llvm/test/CodeGen/AArch64/fsh.ll              |  566 +-
 llvm/test/CodeGen/AArch64/funnel-shift.ll     |   49 +-
 llvm/test/CodeGen/AArch64/peephole-and-tst.ll |  276 +-
 llvm/test/CodeGen/AArch64/sshl_sat.ll         |    7 +-
 8 files changed, 3354 insertions(+), 3466 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 3b53b91d9f798..25aa97f68415b 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -3844,19 +3844,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 7605bbea51f56..5af21c878f6ca 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 71d26d25c0515..4058820789656 100644
--- a/llvm/test/CodeGen/AArch64/arm64-ccmp.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-ccmp.ll
@@ -1053,10 +1053,10 @@ define i32 @multiccmp(i32 %s0, i32 %s1, i32 %s2, i32 %s3, i32 %x, i32 %y) #0 {
 ; CHECK-SD-NEXT:    mov x19, x5
 ; CHECK-SD-NEXT:    cmp w0, w1
 ; CHECK-SD-NEXT:    ccmp w2, w3, #4, gt
-; CHECK-SD-NEXT:    mrs x20, NZCV
+; CHECK-SD-NEXT:    cset w20, ne
 ; CHECK-SD-NEXT:    csel w0, w5, w4, ne
 ; CHECK-SD-NEXT:    bl _callee
-; CHECK-SD-NEXT:    msr NZCV, x20
+; 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, #16] ; 16-byte Folded Reload
diff --git a/llvm/test/CodeGen/AArch64/fsh.ll b/llvm/test/CodeGen/AArch64/fsh.ll
index 15b8ce8226d71..c4f4941f064f3 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)
@@ -1814,63 +1812,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)
@@ -1919,12 +1917,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
@@ -1933,41 +1931,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:
@@ -2985,78 +2983,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)
@@ -3098,74 +3090,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..77e14424cde9c 100644
--- a/llvm/test/CodeGen/AArch64/peephole-and-tst.ll
+++ b/llvm/test/CodeGen/AArch64/peephole-and-tst.ll
@@ -1,72 +1,41 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s --check-prefixes=CHECK,CHECK-SD
-; RUN: llc < %s -mtriple=aarch64-- -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI
+; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s --check-prefixes=CHECK
+; RUN: llc < %s -mtriple=aarch64-- -global-isel | FileCheck %s --check-prefixes=CHECK
 
 %struct.anon = type { ptr, ptr }
 
 @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
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