[llvm] [GlobalISel] [AArch64] Skip redundant shift amount masking during isel (PR #223136)

Deepak Shirke via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 30 04:36:17 PDT 2026


https://github.com/deepakshirkem updated https://github.com/llvm/llvm-project/pull/223136

>From 65b95b341f0a8bf7fab0d7dd37fb2da8bf6a35a0 Mon Sep 17 00:00:00 2001
From: deepakshirkem <deepakshirke509 at gmail.com>
Date: Mon, 14 Sep 2026 18:14:17 +0530
Subject: [PATCH 1/2] AArch64: Skip redundant shift amount masking using isel
 ComplexPattern

AArch64 shift instructions (LSL/LSR/ASR) only use the low 5 bits (i32)
or 6 bits (i64) of the shift amount. Add SelectShiftMask ComplexPattern
and GIComplexOperandMatcher that strip redundant AND masks or zero-extensions
from shift amounts during instruction selection, when the mask exactly
covers a narrow type (byte, halfword, or word).

This mirrors what AArch64DAGToDAGISel::tryShiftAmountMod does, and adds
equivalent GlobalISel support via GIComplexPatternEquiv.
---
 .../Target/AArch64/AArch64ISelDAGToDAG.cpp    | 21 ++++
 .../lib/Target/AArch64/AArch64InstrFormats.td | 15 +++
 .../GISel/AArch64InstructionSelector.cpp      | 41 ++++++++
 ...st-and-by-const-from-lshr-in-eqcmp-zero.ll | 47 +++------
 ...ist-and-by-const-from-shl-in-eqcmp-zero.ll | 24 ++---
 llvm/test/CodeGen/AArch64/select_const.ll     |  3 -
 llvm/test/CodeGen/AArch64/shift-mod.ll        | 74 ++++++++++++++
 llvm/test/CodeGen/AArch64/shift.ll            | 96 ++++++-------------
 8 files changed, 202 insertions(+), 119 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
index feb8f46583794..9d5722e196173 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
@@ -89,6 +89,9 @@ class AArch64DAGToDAGISel : public SelectionDAGISel {
   bool SelectLogicalShiftedRegister(SDValue N, SDValue &Reg, SDValue &Shift) {
     return SelectShiftedRegister(N, true, Reg, Shift);
   }
+  template <unsigned ShiftWidth>
+  bool SelectShiftMask(SDValue N, SDValue &ShAmt);
+
   bool SelectAddrModeIndexed7S8(SDValue N, SDValue &Base, SDValue &OffImm) {
     return SelectAddrModeIndexed7S(N, 1, Base, OffImm);
   }
@@ -766,6 +769,24 @@ bool AArch64DAGToDAGISel::SelectInlineAsmMemoryOperand(
   return true;
 }
 
+template <unsigned ShiftWidth>
+bool AArch64DAGToDAGISel::SelectShiftMask(SDValue N, SDValue &ShAmt) {
+  // AArch64 shift instructions only use the low log2(ShiftWidth) bits of the
+  // shift amount. If the shift amount has a redundant AND mask that covers
+  // those bits, we can remove it. Return false if nothing was combined so
+  // other patterns (e.g. zext/sext GPR32 → SUBREG_TO_REG) can match.
+  if (N.getOpcode() == ISD::AND && isa<ConstantSDNode>(N.getOperand(1)) &&
+      N.getValueType() == (ShiftWidth == 32 ? MVT::i32 : MVT::i64)) {
+    uint64_t Mask = N.getConstantOperandVal(1);
+    // Remove AND if the mask covers the low log2(ShiftWidth) bits.
+    if ((Mask & (ShiftWidth - 1)) == (ShiftWidth - 1)) {
+      ShAmt = N.getOperand(0);
+      return true;
+    }
+  }
+  return false;
+}
+
 /// SelectArithImmed - Select an immediate value that can be represented as
 /// a 12-bit value shifted left by either 0 or 12.  If so, return true with
 /// Val set to the 12-bit value and Shift set to the shifter operand.
diff --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
index ea5164c956992..27d2a391aa3fa 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td
@@ -2749,6 +2749,16 @@ class BaseShift<bit size, bits<2> shift_type, RegisterClass regtype, string asm,
   let Inst{11-10} = shift_type;
 }
 
+// ComplexPattern to match shift amounts with redundant AND masks.
+// AArch64 shift instructions only use the low 5 bits (i32) or 6 bits (i64),
+// so AND masks that exactly cover a narrow type are redundant.
+def shiftMask32 : ComplexPattern<i32, 1, "SelectShiftMask<32>", [], [], 0>;
+def gi_shift_mask32 : GIComplexOperandMatcher<s32, "selectShiftMask<32>">,
+                      GIComplexPatternEquiv<shiftMask32>;
+def shiftMask64 : ComplexPattern<i64, 1, "SelectShiftMask<64>", [], [], 0>;
+def gi_shift_mask64 : GIComplexOperandMatcher<s64, "selectShiftMask<64>">,
+                      GIComplexPatternEquiv<shiftMask64>;
+
 multiclass Shift<bits<2> shift_type, string asm, SDNode OpNode> {
   def Wr : BaseShift<0b0, shift_type, GPR32, asm>;
 
@@ -2774,6 +2784,11 @@ multiclass Shift<bits<2> shift_type, string asm, SDNode OpNode> {
   def : Pat<(i64 (OpNode GPR64:$Rn, (i64 (zext GPR32:$Rm)))),
             (!cast<Instruction>(NAME # "Xr") GPR64:$Rn,
                 (SUBREG_TO_REG GPR32:$Rm, sub_32))>;
+
+  def : Pat<(i32 (OpNode GPR32:$Rn, shiftMask32:$Rm)),
+            (!cast<Instruction>(NAME # "Wr") GPR32:$Rn, shiftMask32:$Rm)>;
+  def : Pat<(i64 (OpNode GPR64:$Rn, shiftMask64:$Rm)),
+            (!cast<Instruction>(NAME # "Xr") GPR64:$Rn, shiftMask64:$Rm)>;
 }
 
 class ShiftAlias<string asm, Instruction inst, RegisterClass regtype>
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
index f42e1864d41b5..5073b52b2a3c5 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
@@ -384,6 +384,8 @@ class AArch64InstructionSelector : public InstructionSelector {
   ComplexRendererFns selectShiftA_64(const MachineOperand &Root) const;
   ComplexRendererFns selectShiftB_64(const MachineOperand &Root) const;
 
+  template <unsigned ShiftWidth>
+  ComplexRendererFns selectShiftMask(MachineOperand &Root) const;
   ComplexRendererFns select12BitValueWithLeftShift(uint64_t Immed) const;
   ComplexRendererFns selectArithImmed(MachineOperand &Root) const;
   ComplexRendererFns selectNegArithImmed(MachineOperand &Root) const;
@@ -7301,6 +7303,45 @@ AArch64InstructionSelector::selectShiftB_64(const MachineOperand &Root) const {
   return {{[=](MachineInstrBuilder &MIB) { MIB.addImm(Enc); }}};
 }
 
+template <unsigned ShiftWidth>
+InstructionSelector::ComplexRendererFns
+AArch64InstructionSelector::selectShiftMask(MachineOperand &Root) const {
+  if (!Root.isReg())
+    return std::nullopt;
+
+  MachineRegisterInfo &MRI =
+      Root.getParent()->getParent()->getParent()->getRegInfo();
+
+  Register ShAmtReg = Root.getReg();
+
+  // Peek through zext for i32 shifts only. For i64 shifts the zext case
+  // is already handled by existing patterns in the Shift multiclass.
+  if (ShiftWidth == 32) {
+    Register ZExtSrcReg;
+    if (mi_match(ShAmtReg, MRI, m_GZExt(m_Reg(ZExtSrcReg))))
+      ShAmtReg = ZExtSrcReg;
+  }
+
+  // Remove redundant AND mask that exactly covers a narrow type (byte,
+  // halfword, word) and whose result type matches the shift width. This
+  // avoids removing intentional masks used in fshl/fshr computations.
+  APInt AndMask;
+  Register AndSrcReg;
+  if (mi_match(ShAmtReg, MRI, m_GAnd(m_Reg(AndSrcReg), m_ICst(AndMask))) &&
+      MRI.getType(ShAmtReg).getSizeInBits() == ShiftWidth) {
+    uint64_t UMask = AndMask.getZExtValue();
+    if (UMask == 0xff || UMask == 0xffff || UMask == 0xffffffff)
+      ShAmtReg = AndSrcReg;
+  }
+
+  // Only succeed if we changed the shift amount; otherwise let other
+  // patterns (e.g. zext GPR32 -> SUBREG_TO_REG) match instead.
+  if (ShAmtReg == Root.getReg())
+    return std::nullopt;
+
+  return {{[=](MachineInstrBuilder &MIB) { MIB.addReg(ShAmtReg); }}};
+}
+
 /// Helper to select an immediate value that can be represented as a 12-bit
 /// value shifted left by either 0 or 12. If it is possible to do so, return
 /// the immediate and shift value. If not, return std::nullopt.
diff --git a/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-lshr-in-eqcmp-zero.ll b/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-lshr-in-eqcmp-zero.ll
index 7d8ff9ac11e30..78efedb0c9317 100644
--- a/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-lshr-in-eqcmp-zero.ll
+++ b/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-lshr-in-eqcmp-zero.ll
@@ -24,8 +24,7 @@ define i1 @scalar_i8_signbit_eq(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_signbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #128 // =0x80
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, eq
 ; CHECK-GI-NEXT:    ret
@@ -46,8 +45,7 @@ define i1 @scalar_i8_lowestbit_eq(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_lowestbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, eq
 ; CHECK-GI-NEXT:    ret
@@ -68,8 +66,7 @@ define i1 @scalar_i8_bitsinmiddle_eq(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_bitsinmiddle_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #24 // =0x18
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, eq
 ; CHECK-GI-NEXT:    ret
@@ -92,8 +89,7 @@ define i1 @scalar_i16_signbit_eq(i16 %x, i16 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i16_signbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #32768 // =0x8000
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, eq
 ; CHECK-GI-NEXT:    ret
@@ -114,8 +110,7 @@ define i1 @scalar_i16_lowestbit_eq(i16 %x, i16 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i16_lowestbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, eq
 ; CHECK-GI-NEXT:    ret
@@ -136,8 +131,7 @@ define i1 @scalar_i16_bitsinmiddle_eq(i16 %x, i16 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i16_bitsinmiddle_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #4080 // =0xff0
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, eq
 ; CHECK-GI-NEXT:    ret
@@ -425,8 +419,7 @@ define i1 @scalar_i8_signbit_ne(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_signbit_ne:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #128 // =0x80
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
+; CHECK-GI-NEXT:    lsr w8, w8, w1
 ; CHECK-GI-NEXT:    tst w8, w0
 ; CHECK-GI-NEXT:    cset w0, ne
 ; CHECK-GI-NEXT:    ret
@@ -480,24 +473,14 @@ define i1 @scalar_i8_bitsinmiddle_slt(i8 %x, i8 %y) nounwind {
 }
 
 define i1 @scalar_i8_signbit_eq_with_nonzero(i8 %x, i8 %y) nounwind {
-; CHECK-SD-LABEL: scalar_i8_signbit_eq_with_nonzero:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    mov w8, #128 // =0x80
-; CHECK-SD-NEXT:    lsr w8, w8, w1
-; CHECK-SD-NEXT:    and w8, w8, w0
-; CHECK-SD-NEXT:    cmp w8, #1
-; CHECK-SD-NEXT:    cset w0, eq
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: scalar_i8_signbit_eq_with_nonzero:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #128 // =0x80
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsr w8, w8, w9
-; CHECK-GI-NEXT:    and w8, w8, w0
-; CHECK-GI-NEXT:    cmp w8, #1
-; CHECK-GI-NEXT:    cset w0, eq
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: scalar_i8_signbit_eq_with_nonzero:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    mov w8, #128 // =0x80
+; CHECK-NEXT:    lsr w8, w8, w1
+; CHECK-NEXT:    and w8, w8, w0
+; CHECK-NEXT:    cmp w8, #1
+; CHECK-NEXT:    cset w0, eq
+; CHECK-NEXT:    ret
   %t0 = lshr i8 128, %y
   %t1 = and i8 %t0, %x
   %res = icmp eq i8 %t1, 1 ; should be comparing with 0
diff --git a/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-shl-in-eqcmp-zero.ll b/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
index f61e4303ca2be..b55efeb580ee7 100644
--- a/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
+++ b/llvm/test/CodeGen/AArch64/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
@@ -25,8 +25,7 @@ define i1 @scalar_i8_signbit_eq(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_signbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #-128 // =0xffffff80
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xff
 ; CHECK-GI-NEXT:    cset w0, eq
@@ -49,8 +48,7 @@ define i1 @scalar_i8_lowestbit_eq(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_lowestbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xff
 ; CHECK-GI-NEXT:    cset w0, eq
@@ -73,8 +71,7 @@ define i1 @scalar_i8_bitsinmiddle_eq(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_bitsinmiddle_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #24 // =0x18
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xff
 ; CHECK-GI-NEXT:    cset w0, eq
@@ -99,8 +96,7 @@ define i1 @scalar_i16_signbit_eq(i16 %x, i16 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i16_signbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #-32768 // =0xffff8000
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xffff
 ; CHECK-GI-NEXT:    cset w0, eq
@@ -123,8 +119,7 @@ define i1 @scalar_i16_lowestbit_eq(i16 %x, i16 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i16_lowestbit_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xffff
 ; CHECK-GI-NEXT:    cset w0, eq
@@ -147,8 +142,7 @@ define i1 @scalar_i16_bitsinmiddle_eq(i16 %x, i16 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i16_bitsinmiddle_eq:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #4080 // =0xff0
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xffff
 ; CHECK-GI-NEXT:    cset w0, eq
@@ -430,8 +424,7 @@ define i1 @scalar_i8_signbit_ne(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_signbit_ne:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #-128 // =0xffffff80
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    tst w8, #0xff
 ; CHECK-GI-NEXT:    cset w0, ne
@@ -488,8 +481,7 @@ define i1 @scalar_i8_bitsinmiddle_slt(i8 %x, i8 %y) nounwind {
 ; CHECK-GI-LABEL: scalar_i8_bitsinmiddle_slt:
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #24 // =0x18
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w1
 ; CHECK-GI-NEXT:    and w8, w8, w0
 ; CHECK-GI-NEXT:    sxtb w8, w8
 ; CHECK-GI-NEXT:    cmp w8, #0
diff --git a/llvm/test/CodeGen/AArch64/select_const.ll b/llvm/test/CodeGen/AArch64/select_const.ll
index daa9971dbcd58..c67d527dbfed1 100644
--- a/llvm/test/CodeGen/AArch64/select_const.ll
+++ b/llvm/test/CodeGen/AArch64/select_const.ll
@@ -672,7 +672,6 @@ define i8 @shl_constant_sel_constants(i1 %cond) {
 ; CHECK-GI-NEXT:    sbfx w9, w0, #0, #1
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
 ; CHECK-GI-NEXT:    add w9, w9, #3
-; CHECK-GI-NEXT:    and w9, w9, #0xff
 ; CHECK-GI-NEXT:    lsl w0, w8, w9
 ; CHECK-GI-NEXT:    ret
   %sel = select i1 %cond, i8 2, i8 3
@@ -714,7 +713,6 @@ define i8 @lshr_constant_sel_constants(i1 %cond) {
 ; CHECK-GI-NEXT:    sbfx w9, w0, #0, #1
 ; CHECK-GI-NEXT:    mov w8, #64 // =0x40
 ; CHECK-GI-NEXT:    add w9, w9, #3
-; CHECK-GI-NEXT:    and w9, w9, #0xff
 ; CHECK-GI-NEXT:    lsr w0, w8, w9
 ; CHECK-GI-NEXT:    ret
   %sel = select i1 %cond, i8 2, i8 3
@@ -747,7 +745,6 @@ define i8 @ashr_constant_sel_constants(i1 %cond) {
 ; CHECK-GI-NEXT:    sbfx w9, w0, #0, #1
 ; CHECK-GI-NEXT:    mov w8, #-128 // =0xffffff80
 ; CHECK-GI-NEXT:    add w9, w9, #3
-; CHECK-GI-NEXT:    and w9, w9, #0xff
 ; CHECK-GI-NEXT:    asr w0, w8, w9
 ; CHECK-GI-NEXT:    ret
   %sel = select i1 %cond, i8 2, i8 3
diff --git a/llvm/test/CodeGen/AArch64/shift-mod.ll b/llvm/test/CodeGen/AArch64/shift-mod.ll
index a235b3628ded5..8ba17c73e2093 100644
--- a/llvm/test/CodeGen/AArch64/shift-mod.ll
+++ b/llvm/test/CodeGen/AArch64/shift-mod.ll
@@ -191,3 +191,77 @@ define i64 @ashr_add_shl_mismatch_shifts2(i64 %r) {
   %conv1 = ashr i64 %sext, 8
   ret i64 %conv1
 }
+
+; Test that narrow shift amounts (i8/i16) don't generate redundant AND.
+define i32 @shl_i32_i8(i32 %x, i8 %amt) {
+; CHECK-LABEL: shl_i32_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsl w0, w0, w1
+; CHECK-NEXT:    ret
+  %ext = zext i8 %amt to i32
+  %r = shl i32 %x, %ext
+  ret i32 %r
+}
+
+define i32 @lshr_i32_i8(i32 %x, i8 %amt) {
+; CHECK-LABEL: lshr_i32_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsr w0, w0, w1
+; CHECK-NEXT:    ret
+  %ext = zext i8 %amt to i32
+  %r = lshr i32 %x, %ext
+  ret i32 %r
+}
+
+define i32 @ashr_i32_i8(i32 %x, i8 %amt) {
+; CHECK-LABEL: ashr_i32_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    asr w0, w0, w1
+; CHECK-NEXT:    ret
+  %ext = zext i8 %amt to i32
+  %r = ashr i32 %x, %ext
+  ret i32 %r
+}
+
+define i32 @shl_i32_i16(i32 %x, i16 %amt) {
+; CHECK-LABEL: shl_i32_i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsl w0, w0, w1
+; CHECK-NEXT:    ret
+  %ext = zext i16 %amt to i32
+  %r = shl i32 %x, %ext
+  ret i32 %r
+}
+
+define i64 @shl_i64_i8(i64 %x, i8 %amt) {
+; CHECK-LABEL: shl_i64_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $w1 killed $w1 def $x1
+; CHECK-NEXT:    lsl x0, x0, x1
+; CHECK-NEXT:    ret
+  %ext = zext i8 %amt to i64
+  %r = shl i64 %x, %ext
+  ret i64 %r
+}
+
+define i64 @lshr_i64_i8(i64 %x, i8 %amt) {
+; CHECK-LABEL: lshr_i64_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $w1 killed $w1 def $x1
+; CHECK-NEXT:    lsr x0, x0, x1
+; CHECK-NEXT:    ret
+  %ext = zext i8 %amt to i64
+  %r = lshr i64 %x, %ext
+  ret i64 %r
+}
+
+define i64 @ashr_i64_i16(i64 %x, i16 %amt) {
+; CHECK-LABEL: ashr_i64_i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $w1 killed $w1 def $x1
+; CHECK-NEXT:    asr x0, x0, x1
+; CHECK-NEXT:    ret
+  %ext = zext i16 %amt to i64
+  %r = ashr i64 %x, %ext
+  ret i64 %r
+}
diff --git a/llvm/test/CodeGen/AArch64/shift.ll b/llvm/test/CodeGen/AArch64/shift.ll
index 5d7935474c903..eb5f56f771a0f 100644
--- a/llvm/test/CodeGen/AArch64/shift.ll
+++ b/llvm/test/CodeGen/AArch64/shift.ll
@@ -19,31 +19,19 @@ define i1 @shl_i1(i1 %0, i1 %1){
 }
 
 define i8 @shl_i8(i8 %0, i8 %1){
-; CHECK-SD-LABEL: shl_i8:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    lsl w0, w0, w1
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: shl_i8:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    and w8, w1, #0xff
-; CHECK-GI-NEXT:    lsl w0, w0, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: shl_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsl w0, w0, w1
+; CHECK-NEXT:    ret
     %3 = shl i8 %0, %1
     ret i8 %3
 }
 
 define i16 @shl_i16(i16 %0, i16 %1){
-; CHECK-SD-LABEL: shl_i16:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    lsl w0, w0, w1
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: shl_i16:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    and w8, w1, #0xffff
-; CHECK-GI-NEXT:    lsl w0, w0, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: shl_i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsl w0, w0, w1
+; CHECK-NEXT:    ret
     %3 = shl i16 %0, %1
     ret i16 %3
 }
@@ -118,35 +106,21 @@ define i1 @ashr_i1(i1 %0, i1 %1){
 }
 
 define i8 @ashr_i8(i8 %0, i8 %1){
-; CHECK-SD-LABEL: ashr_i8:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    sxtb w8, w0
-; CHECK-SD-NEXT:    asr w0, w8, w1
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: ashr_i8:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    sxtb w8, w0
-; CHECK-GI-NEXT:    and w9, w1, #0xff
-; CHECK-GI-NEXT:    asr w0, w8, w9
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: ashr_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    sxtb w8, w0
+; CHECK-NEXT:    asr w0, w8, w1
+; CHECK-NEXT:    ret
     %3 = ashr i8 %0, %1
     ret i8 %3
 }
 
 define i16 @ashr_i16(i16 %0, i16 %1){
-; CHECK-SD-LABEL: ashr_i16:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    sxth w8, w0
-; CHECK-SD-NEXT:    asr w0, w8, w1
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: ashr_i16:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    sxth w8, w0
-; CHECK-GI-NEXT:    and w9, w1, #0xffff
-; CHECK-GI-NEXT:    asr w0, w8, w9
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: ashr_i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    sxth w8, w0
+; CHECK-NEXT:    asr w0, w8, w1
+; CHECK-NEXT:    ret
     %3 = ashr i16 %0, %1
     ret i16 %3
 }
@@ -223,35 +197,21 @@ define i1 @lshr_i1(i1 %0, i1 %1){
 }
 
 define i8 @lshr_i8(i8 %0, i8 %1){
-; CHECK-SD-LABEL: lshr_i8:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    and w8, w0, #0xff
-; CHECK-SD-NEXT:    lsr w0, w8, w1
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: lshr_i8:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    and w8, w1, #0xff
-; CHECK-GI-NEXT:    and w9, w0, #0xff
-; CHECK-GI-NEXT:    lsr w0, w9, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: lshr_i8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    and w8, w0, #0xff
+; CHECK-NEXT:    lsr w0, w8, w1
+; CHECK-NEXT:    ret
     %3 = lshr i8 %0, %1
     ret i8 %3
 }
 
 define i16 @lshr_i16(i16 %0, i16 %1){
-; CHECK-SD-LABEL: lshr_i16:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    and w8, w0, #0xffff
-; CHECK-SD-NEXT:    lsr w0, w8, w1
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: lshr_i16:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    and w8, w1, #0xffff
-; CHECK-GI-NEXT:    and w9, w0, #0xffff
-; CHECK-GI-NEXT:    lsr w0, w9, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: lshr_i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    and w8, w0, #0xffff
+; CHECK-NEXT:    lsr w0, w8, w1
+; CHECK-NEXT:    ret
     %3 = lshr i16 %0, %1
     ret i16 %3
 }

>From a223a6bcad95f9c47c579169e2144671ba450dd5 Mon Sep 17 00:00:00 2001
From: deepakshirkem <deepakshirke509 at gmail.com>
Date: Wed, 30 Sep 2026 15:37:37 +0530
Subject: [PATCH 2/2] Use countr_one for shift mask check

Address review feedback: use countr_one() >= Log2_32(ShiftWidth) instead
of explicit mask comparisons, matching the check that tryShiftAmountMod used.
---
 .../Target/AArch64/AArch64ISelDAGToDAG.cpp    |    4 +-
 .../GISel/AArch64InstructionSelector.cpp      |    3 +-
 .../GlobalISel/split-wide-shifts-multiway.ll  | 3942 ++++++++---------
 llvm/test/CodeGen/AArch64/frem-power2.ll      |    6 +-
 llvm/test/CodeGen/AArch64/fsh.ll              |  379 +-
 llvm/test/CodeGen/AArch64/funnel-shift.ll     |  176 +-
 6 files changed, 2207 insertions(+), 2303 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
index 9d5722e196173..02a69874e4bcb 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
@@ -778,8 +778,8 @@ bool AArch64DAGToDAGISel::SelectShiftMask(SDValue N, SDValue &ShAmt) {
   if (N.getOpcode() == ISD::AND && isa<ConstantSDNode>(N.getOperand(1)) &&
       N.getValueType() == (ShiftWidth == 32 ? MVT::i32 : MVT::i64)) {
     uint64_t Mask = N.getConstantOperandVal(1);
-    // Remove AND if the mask covers the low log2(ShiftWidth) bits.
-    if ((Mask & (ShiftWidth - 1)) == (ShiftWidth - 1)) {
+    // Remove AND if the mask covers at least the low log2(ShiftWidth) bits.
+    if ((unsigned)llvm::countr_one(Mask) >= Log2_32(ShiftWidth)) {
       ShAmt = N.getOperand(0);
       return true;
     }
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
index 5073b52b2a3c5..1ab07ca648bd6 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
@@ -7329,8 +7329,7 @@ AArch64InstructionSelector::selectShiftMask(MachineOperand &Root) const {
   Register AndSrcReg;
   if (mi_match(ShAmtReg, MRI, m_GAnd(m_Reg(AndSrcReg), m_ICst(AndMask))) &&
       MRI.getType(ShAmtReg).getSizeInBits() == ShiftWidth) {
-    uint64_t UMask = AndMask.getZExtValue();
-    if (UMask == 0xff || UMask == 0xffff || UMask == 0xffffffff)
+    if (AndMask.countr_one() >= Log2_32(ShiftWidth))
       ShAmtReg = AndSrcReg;
   }
 
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 ce1dae3cdfeff..e317ab2f0b764 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
@@ -85,23 +85,23 @@ 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 x11, x14, [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:    ldp x3, x6, [x1, #16]
-; GISEL-NEXT:    lsl x10, x11, x14
+; GISEL-NEXT:    and x13, x8, #0x3f
+; GISEL-NEXT:    mov w15, #64 ; =0x40
+; GISEL-NEXT:    sub x15, x15, x13
+; GISEL-NEXT:    ldp x2, x5, [x1, #16]
+; GISEL-NEXT:    lsl x10, x11, x8
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    ldp x20, x21, [x1, #32]
+; GISEL-NEXT:    ldp x19, x20, [x1, #32]
 ; GISEL-NEXT:    csel x12, x10, xzr, eq
 ; GISEL-NEXT:    cmp x9, #1
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    lsr x26, x21, x16
+; GISEL-NEXT:    lsr x25, x20, x15
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
@@ -112,228 +112,228 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x9, #7
 ; GISEL-NEXT:    csel x13, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    lsr x12, x11, x16
+; GISEL-NEXT:    lsr x12, x11, x15
 ; GISEL-NEXT:    csel x13, x11, x13, eq
-; GISEL-NEXT:    lsl x11, x15, x14
+; GISEL-NEXT:    lsl x11, x14, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x17, xzr, x12, eq
+; GISEL-NEXT:    csel x16, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x17, x11, x17
-; GISEL-NEXT:    csel x17, x17, xzr, eq
+; GISEL-NEXT:    orr x16, x11, x16
+; GISEL-NEXT:    csel x16, x16, xzr, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    csel x17, x10, x17, eq
+; GISEL-NEXT:    csel x16, x10, x16, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x16, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x16, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x16, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x16, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x16, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x2, xzr, x17, eq
+; GISEL-NEXT:    csel x17, xzr, x16, eq
 ; 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:    lsr x16, x14, x15
+; GISEL-NEXT:    csel x14, x14, x17, eq
+; GISEL-NEXT:    lsl x17, x2, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x4, xzr, x17, eq
+; GISEL-NEXT:    csel x3, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x4, x2, x4
-; GISEL-NEXT:    csel x4, x4, xzr, eq
+; GISEL-NEXT:    orr x3, x17, x3
+; GISEL-NEXT:    csel x3, x3, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x5, xzr, x12, eq
+; GISEL-NEXT:    csel x4, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x5, x11, x5
-; GISEL-NEXT:    csel x4, x5, x4, eq
+; GISEL-NEXT:    orr x4, x11, x4
+; GISEL-NEXT:    csel x3, x4, x3, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    csel x4, x10, x4, eq
+; GISEL-NEXT:    csel x3, x10, x3, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    csel x4, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x4, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x4, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x4, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x5, xzr, x4, eq
+; GISEL-NEXT:    csel x4, xzr, x3, eq
 ; 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:    lsr x3, x2, x15
+; GISEL-NEXT:    csel x2, x2, x4, eq
+; GISEL-NEXT:    lsl x4, x5, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x7, xzr, x4, eq
+; GISEL-NEXT:    csel x6, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x7, x5, x7
-; GISEL-NEXT:    csel x7, x7, xzr, eq
+; GISEL-NEXT:    orr x6, x4, x6
+; GISEL-NEXT:    csel x6, x6, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x17, eq
+; GISEL-NEXT:    csel x7, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x19, x2, x19
-; GISEL-NEXT:    csel x7, x19, x7, eq
+; GISEL-NEXT:    orr x7, x17, x7
+; GISEL-NEXT:    csel x6, x7, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x12, eq
+; GISEL-NEXT:    csel x7, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x19, x11, x19
-; GISEL-NEXT:    csel x7, x19, x7, eq
+; GISEL-NEXT:    orr x7, x11, x7
+; GISEL-NEXT:    csel x6, x7, x6, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    csel x7, x10, x7, eq
+; GISEL-NEXT:    csel x6, x10, x6, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x7, xzr, x7, eq
+; GISEL-NEXT:    csel x6, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x7, xzr, x7, eq
+; GISEL-NEXT:    csel x6, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x7, xzr, x7, eq
+; GISEL-NEXT:    csel x6, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x19, xzr, x7, eq
+; GISEL-NEXT:    csel x7, xzr, x6, eq
 ; 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:    lsr x6, x5, x15
+; GISEL-NEXT:    csel x5, x5, x7, eq
+; GISEL-NEXT:    lsl x7, x19, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x22, xzr, x7, eq
+; GISEL-NEXT:    csel x21, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x22, x19, x22
-; GISEL-NEXT:    csel x22, x22, xzr, eq
+; GISEL-NEXT:    orr x21, x7, x21
+; GISEL-NEXT:    csel x21, x21, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x23, xzr, x4, eq
+; GISEL-NEXT:    csel x22, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x23, x5, x23
-; GISEL-NEXT:    csel x22, x23, x22, eq
+; GISEL-NEXT:    orr x22, x4, x22
+; GISEL-NEXT:    csel x21, x22, x21, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x23, xzr, x17, eq
+; GISEL-NEXT:    csel x22, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x23, x2, x23
-; GISEL-NEXT:    csel x22, x23, x22, eq
+; GISEL-NEXT:    orr x22, x17, x22
+; GISEL-NEXT:    csel x21, x22, x21, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x23, xzr, x12, eq
+; GISEL-NEXT:    csel x22, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x23, x11, x23
-; GISEL-NEXT:    csel x22, x23, x22, eq
+; GISEL-NEXT:    orr x22, x11, x22
+; GISEL-NEXT:    csel x21, x22, x21, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x22, x10, x22, eq
+; GISEL-NEXT:    csel x21, x10, x21, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x22, xzr, x22, eq
+; GISEL-NEXT:    csel x21, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x22, xzr, x22, eq
+; GISEL-NEXT:    csel x21, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x23, xzr, x22, eq
+; GISEL-NEXT:    csel x22, xzr, x21, eq
 ; 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:    lsr x21, x19, x15
+; GISEL-NEXT:    csel x19, x19, x22, eq
+; GISEL-NEXT:    lsl x22, x20, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x24, xzr, x22, eq
+; GISEL-NEXT:    csel x23, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x24, x23, x24
-; GISEL-NEXT:    csel x24, x24, xzr, eq
+; GISEL-NEXT:    orr x23, x22, x23
+; GISEL-NEXT:    csel x23, x23, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x25, xzr, x7, eq
+; GISEL-NEXT:    csel x24, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x25, x19, x25
-; GISEL-NEXT:    csel x24, x25, x24, eq
+; GISEL-NEXT:    orr x24, x7, x24
+; GISEL-NEXT:    csel x23, x24, x23, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x25, xzr, x4, eq
+; GISEL-NEXT:    csel x24, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x25, x5, x25
-; GISEL-NEXT:    csel x24, x25, x24, eq
+; GISEL-NEXT:    orr x24, x4, x24
+; GISEL-NEXT:    csel x23, x24, x23, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x25, xzr, x17, eq
+; GISEL-NEXT:    csel x24, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x25, x2, x25
-; GISEL-NEXT:    csel x24, x25, x24, eq
+; GISEL-NEXT:    orr x24, x17, x24
+; GISEL-NEXT:    csel x23, x24, x23, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x25, xzr, x12, eq
+; GISEL-NEXT:    csel x24, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x25, x11, x25
-; GISEL-NEXT:    csel x24, x25, x24, eq
+; GISEL-NEXT:    orr x24, x11, x24
+; GISEL-NEXT:    csel x23, x24, x23, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x24, x10, x24, eq
+; GISEL-NEXT:    csel x23, x10, x23, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    ldp x25, x1, [x1, #48]
-; GISEL-NEXT:    csel x24, xzr, x24, eq
+; GISEL-NEXT:    ldp x24, x1, [x1, #48]
+; GISEL-NEXT:    csel x23, xzr, x23, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    stp x13, x15, [x0]
-; GISEL-NEXT:    csel x24, xzr, x24, eq
+; GISEL-NEXT:    stp x13, x14, [x0]
+; GISEL-NEXT:    csel x23, xzr, x23, 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:    stp x2, x5, [x0, #16]
+; GISEL-NEXT:    csel x20, x20, x23, eq
+; GISEL-NEXT:    lsl x23, x24, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x27, xzr, x26, eq
+; GISEL-NEXT:    csel x26, xzr, x25, 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:    lsr x15, x24, x15
+; GISEL-NEXT:    orr x26, x23, x26
+; GISEL-NEXT:    stp x19, x20, [x0, #32]
+; GISEL-NEXT:    csel x26, x26, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x28, xzr, x22, eq
+; GISEL-NEXT:    csel x27, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x28, x23, x28
-; GISEL-NEXT:    csel x27, x28, x27, eq
+; GISEL-NEXT:    orr x27, x22, x27
+; GISEL-NEXT:    ldp x20, x19, [sp, #64] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x26, x27, x26, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x28, xzr, x7, eq
+; GISEL-NEXT:    csel x27, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x28, x19, x28
-; GISEL-NEXT:    csel x27, x28, x27, eq
+; GISEL-NEXT:    orr x27, x7, x27
+; GISEL-NEXT:    csel x26, x27, x26, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x28, xzr, x4, eq
+; GISEL-NEXT:    csel x27, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x28, x5, x28
-; GISEL-NEXT:    csel x27, x28, x27, eq
+; GISEL-NEXT:    orr x27, x4, x27
+; GISEL-NEXT:    csel x26, x27, x26, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x28, xzr, x17, eq
+; GISEL-NEXT:    csel x27, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x28, x2, x28
-; GISEL-NEXT:    csel x27, x28, x27, eq
+; GISEL-NEXT:    orr x27, x17, x27
+; GISEL-NEXT:    csel x26, x27, x26, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x28, xzr, x12, eq
+; GISEL-NEXT:    csel x27, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x28, x11, x28
-; GISEL-NEXT:    csel x27, x28, x27, eq
+; GISEL-NEXT:    orr x27, x11, x27
+; GISEL-NEXT:    csel x26, x27, x26, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x27, x10, x27, eq
+; GISEL-NEXT:    csel x26, x10, x26, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x27, xzr, x27, eq
+; GISEL-NEXT:    csel x26, xzr, x26, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x25, x25, x27, eq
+; GISEL-NEXT:    csel x24, x24, x26, eq
+; GISEL-NEXT:    lsl x26, x1, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x16, xzr, x16, eq
+; GISEL-NEXT:    csel x15, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x14, x14, x16
-; GISEL-NEXT:    csel x14, x14, xzr, eq
+; GISEL-NEXT:    orr x15, x26, x15
+; GISEL-NEXT:    csel x15, x15, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x16, xzr, x26, eq
+; GISEL-NEXT:    csel x25, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x16, x24, x16
-; GISEL-NEXT:    csel x14, x16, x14, eq
+; GISEL-NEXT:    orr x23, x23, x25
+; GISEL-NEXT:    ldp x26, x25, [sp, #16] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x15, x23, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x16, xzr, x22, eq
+; GISEL-NEXT:    csel x21, xzr, x21, 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:    orr x21, x22, x21
+; GISEL-NEXT:    csel x15, x21, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x16, xzr, x7, eq
+; GISEL-NEXT:    csel x6, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x16, x19, x16
-; GISEL-NEXT:    ldp x20, x19, [sp, #64] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x14, x16, x14, eq
+; GISEL-NEXT:    orr x6, x7, x6
+; GISEL-NEXT:    ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x15, x6, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x16, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x3, 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:    orr x3, x4, x3
+; GISEL-NEXT:    csel x15, x3, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x16, xzr, x17, eq
+; GISEL-NEXT:    csel x16, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x16, x2, x16
-; GISEL-NEXT:    csel x13, x16, x14, eq
+; GISEL-NEXT:    orr x16, x17, x16
+; GISEL-NEXT:    csel x13, x16, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
@@ -343,8 +343,8 @@ define void @test_shl_i512(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    csel x9, x10, x11, eq
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x8, x1, x9, eq
-; GISEL-NEXT:    stp x25, x8, [x0, #48]
-; GISEL-NEXT:    ldp x26, x25, [sp, #16] ; 16-byte Folded Reload
+; GISEL-NEXT:    stp x24, x8, [x0, #48]
+; GISEL-NEXT:    ldp x24, x23, [sp, #32] ; 16-byte Folded Reload
 ; GISEL-NEXT:    ldp x28, x27, [sp], #80 ; 16-byte Folded Reload
 ; GISEL-NEXT:    ret
 entry:
@@ -437,23 +437,23 @@ define void @test_lshr_i512(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    mov w8, w2
 ; GISEL-NEXT:    ldp x13, x2, [x1]
 ; GISEL-NEXT:    mov w9, #64 ; =0x40
-; GISEL-NEXT:    and x14, x8, #0x3f
+; GISEL-NEXT:    and x10, x8, #0x3f
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    sub x17, x9, x14
+; GISEL-NEXT:    sub x14, x9, x10
 ; GISEL-NEXT:    ldp x5, x16, [x1, #16]
-; GISEL-NEXT:    lsl x10, x2, x17
+; GISEL-NEXT:    lsl x10, x2, x14
 ; GISEL-NEXT:    lsr x9, x8, #6
-; GISEL-NEXT:    lsr x11, x13, x14
-; GISEL-NEXT:    lsr x24, x2, x14
+; GISEL-NEXT:    lsr x11, x13, x8
+; GISEL-NEXT:    lsr x24, x2, x8
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
-; GISEL-NEXT:    lsl x23, x5, x17
+; GISEL-NEXT:    lsl x23, x5, x14
 ; 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:    lsl x22, x16, x14
+; GISEL-NEXT:    lsr x21, x5, x8
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x20, x16, x14
+; GISEL-NEXT:    lsr x20, x16, x8
 ; GISEL-NEXT:    csel x11, xzr, x23, eq
 ; GISEL-NEXT:    cmp x9, #1
 ; GISEL-NEXT:    orr x11, x24, x11
@@ -462,36 +462,36 @@ define void @test_lshr_i512(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x12, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    lsl x19, x15, x17
+; GISEL-NEXT:    lsl x19, x15, x14
 ; GISEL-NEXT:    orr x12, x21, x12
-; GISEL-NEXT:    lsl x6, x11, x17
+; GISEL-NEXT:    lsl x6, x11, x14
 ; GISEL-NEXT:    csel x10, x12, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x7, x15, x14
+; GISEL-NEXT:    lsr x7, x15, x8
 ; GISEL-NEXT:    csel x12, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #3
+; GISEL-NEXT:    lsr x4, x11, x8
 ; GISEL-NEXT:    orr x12, x20, x12
-; GISEL-NEXT:    csel x4, x12, x10, eq
+; GISEL-NEXT:    csel x17, x12, x10, eq
 ; GISEL-NEXT:    ldp x12, x10, [x1, #48]
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x1, xzr, x6, 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:    lsl x3, x12, x14
+; GISEL-NEXT:    csel x1, x1, x17, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x25, xzr, x3, eq
+; GISEL-NEXT:    csel x17, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x25, x4, x25
+; GISEL-NEXT:    orr x25, x4, x17
+; GISEL-NEXT:    lsl x17, x10, x14
 ; GISEL-NEXT:    csel x25, x25, x1, eq
-; GISEL-NEXT:    lsr x1, x12, x14
+; GISEL-NEXT:    lsr x1, x12, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x26, xzr, x17, eq
+; GISEL-NEXT:    csel x14, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    lsr x14, x10, x14
-; GISEL-NEXT:    orr x26, x1, x26
+; GISEL-NEXT:    orr x26, x1, x14
+; GISEL-NEXT:    lsr x14, x10, x8
 ; GISEL-NEXT:    csel x25, x26, x25, eq
 ; GISEL-NEXT:    cmp x9, #7
 ; GISEL-NEXT:    csel x25, x14, x25, eq
@@ -788,16 +788,16 @@ define void @test_ashr_i512(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    mov w8, w2
 ; GISEL-NEXT:    ldp x14, x4, [x1]
 ; GISEL-NEXT:    mov w9, #64 ; =0x40
-; GISEL-NEXT:    and x16, x8, #0x3f
-; GISEL-NEXT:    lsr x10, x8, #6
-; GISEL-NEXT:    sub x15, x9, x16
-; GISEL-NEXT:    ldr x9, [x1, #56]
+; GISEL-NEXT:    and x10, x8, #0x3f
 ; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    sub x15, x9, x10
+; GISEL-NEXT:    ldr x9, [x1, #56]
+; GISEL-NEXT:    lsr x10, x8, #6
 ; GISEL-NEXT:    lsl x12, x4, x15
 ; GISEL-NEXT:    ldp x7, x3, [x1, #16]
-; GISEL-NEXT:    lsr x13, x14, x16
+; GISEL-NEXT:    lsr x13, x14, x8
 ; GISEL-NEXT:    asr x11, x9, #63
-; GISEL-NEXT:    lsr x26, x4, x16
+; GISEL-NEXT:    lsr x26, x4, x8
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x10, #0
 ; GISEL-NEXT:    lsl x25, x7, x15
@@ -805,48 +805,48 @@ define void @test_ashr_i512(ptr %result, ptr %input, i32 %shift) {
 ; 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:    lsr x24, x7, x8
 ; GISEL-NEXT:    csel x13, xzr, x25, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    lsr x22, x3, x16
+; GISEL-NEXT:    lsr x22, x3, x8
 ; 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:    csel x16, xzr, x23, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x2, x24, x2
+; GISEL-NEXT:    orr x16, x24, x16
 ; GISEL-NEXT:    lsl x21, x17, x15
 ; GISEL-NEXT:    lsl x19, x13, x15
-; GISEL-NEXT:    csel x2, x2, x12, eq
+; GISEL-NEXT:    csel x16, x16, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    ldr x12, [x1, #48]
 ; GISEL-NEXT:    csel x1, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    lsr x20, x17, x16
+; GISEL-NEXT:    lsr x20, x17, x8
 ; 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:    lsr x6, x13, x8
+; GISEL-NEXT:    csel x16, x1, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x2, xzr, x19, eq
+; GISEL-NEXT:    csel x1, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x2, x20, x2
-; GISEL-NEXT:    csel x2, x2, x1, eq
+; GISEL-NEXT:    orr x1, x20, x1
+; GISEL-NEXT:    csel x16, x1, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x1, xzr, x5, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x27, x6, x1
+; GISEL-NEXT:    orr x2, 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:    csel x16, x2, x16, eq
+; GISEL-NEXT:    lsr x2, x12, x8
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x28, xzr, x1, eq
+; GISEL-NEXT:    csel x27, 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:    orr x27, x2, x27
+; GISEL-NEXT:    csel x27, x27, x16, eq
+; GISEL-NEXT:    lsr x16, x9, x8
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x28, xzr, x15, eq
 ; GISEL-NEXT:    cmp x10, #7
@@ -1219,14 +1219,14 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ;
 ; GISEL-LABEL: test_shl_i1024:
 ; GISEL:       ; %bb.0: ; %entry
-; GISEL-NEXT:    sub sp, sp, #448
-; GISEL-NEXT:    stp x28, x27, [sp, #352] ; 16-byte Folded Spill
-; GISEL-NEXT:    stp x26, x25, [sp, #368] ; 16-byte Folded Spill
-; GISEL-NEXT:    stp x24, x23, [sp, #384] ; 16-byte Folded Spill
-; GISEL-NEXT:    stp x22, x21, [sp, #400] ; 16-byte Folded Spill
-; GISEL-NEXT:    stp x20, x19, [sp, #416] ; 16-byte Folded Spill
-; GISEL-NEXT:    stp x29, x30, [sp, #432] ; 16-byte Folded Spill
-; GISEL-NEXT:    .cfi_def_cfa_offset 448
+; GISEL-NEXT:    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:    .cfi_offset w30, -8
 ; GISEL-NEXT:    .cfi_offset w29, -16
 ; GISEL-NEXT:    .cfi_offset w19, -24
@@ -1242,56 +1242,48 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; 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:    and x14, x8, #0x3f
 ; GISEL-NEXT:    mov w13, #64 ; =0x40
-; GISEL-NEXT:    mov x6, x1
-; GISEL-NEXT:    str x0, [sp, #176] ; 8-byte Spill
-; GISEL-NEXT:    lsl x28, x10, x12
-; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    sub x1, x13, x14
-; GISEL-NEXT:    lsr x0, x10, x1
-; GISEL-NEXT:    lsl x3, x11, x14
 ; GISEL-NEXT:    and x14, x8, #0x3f
-; GISEL-NEXT:    csel x12, x28, xzr, eq
+; GISEL-NEXT:    sub x6, x13, x14
+; GISEL-NEXT:    str x0, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT:    lsl x15, x10, x8
+; GISEL-NEXT:    cmp x9, #0
+; GISEL-NEXT:    lsr x16, x10, x6
+; GISEL-NEXT:    lsl x0, x11, x8
+; GISEL-NEXT:    lsr x2, x11, x6
+; GISEL-NEXT:    str x1, [sp, #312] ; 8-byte Spill
+; GISEL-NEXT:    csel x12, x15, xzr, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    lsr x5, x11, x1
+; GISEL-NEXT:    mov x25, x15
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    and x16, x8, #0x3f
+; GISEL-NEXT:    mov x17, x16
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    mov x2, x0
+; GISEL-NEXT:    mov x3, x0
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    mov x21, x3
+; GISEL-NEXT:    mov x4, x17
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x7, x5
+; GISEL-NEXT:    mov x23, x3
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    mov x23, x6
+; GISEL-NEXT:    str x6, [sp, #56] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    and x30, x8, #0x3f
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    mov x27, x1
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    mov x22, x21
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    mov x20, x7
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    str x7, [sp, #24] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    str x23, [sp, #336] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    str x2, [sp, #320] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #14
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
@@ -1300,13 +1292,13 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x10, x10, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x10, [sp, #264] ; 8-byte Spill
-; GISEL-NEXT:    csel x10, xzr, x0, eq
+; GISEL-NEXT:    str x10, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x10, x3, x10
+; GISEL-NEXT:    orr x10, x0, x10
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    csel x10, x28, x10, eq
+; GISEL-NEXT:    csel x10, x15, x10, eq
 ; GISEL-NEXT:    cmp x9, #2
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #3
@@ -1332,34 +1324,34 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x9, #13
 ; GISEL-NEXT:    csel x13, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    ldp x12, x10, [x6, #16]
+; GISEL-NEXT:    ldp x12, x10, [x1, #16]
 ; GISEL-NEXT:    csel x13, xzr, x13, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x13, xzr, x13, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    lsl x19, x12, x14
+; GISEL-NEXT:    lsl x5, x12, x8
 ; GISEL-NEXT:    csel x11, x11, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #256] ; 8-byte Spill
-; GISEL-NEXT:    csel x11, xzr, x5, eq
+; GISEL-NEXT:    str x11, [sp, #208] ; 8-byte Spill
+; GISEL-NEXT:    csel x11, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x19, x11
-; GISEL-NEXT:    lsr x15, x12, x1
-; GISEL-NEXT:    lsl x14, x10, x16
+; GISEL-NEXT:    orr x11, x5, x11
+; GISEL-NEXT:    lsl x28, x10, x8
 ; GISEL-NEXT:    csel x11, x11, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x17, x10, x1
-; GISEL-NEXT:    csel x13, xzr, x0, eq
+; GISEL-NEXT:    csel x13, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x13, x3, x13
+; GISEL-NEXT:    orr x13, x0, x13
 ; GISEL-NEXT:    csel x11, x13, x11, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    csel x11, x28, x11, eq
+; GISEL-NEXT:    csel x11, x15, x11, eq
 ; GISEL-NEXT:    cmp x9, #3
+; GISEL-NEXT:    lsr x15, x12, x6
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #4
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #5
+; GISEL-NEXT:    str x15, [sp, #272] ; 8-byte Spill
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #6
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
@@ -1384,23 +1376,24 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT:    str x11, [sp, #200] ; 8-byte Spill
 ; GISEL-NEXT:    csel x11, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x14, x11
+; GISEL-NEXT:    orr x11, x28, x11
 ; GISEL-NEXT:    csel x11, x11, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x5, eq
+; GISEL-NEXT:    csel x12, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x12, x19, x12
+; GISEL-NEXT:    orr x12, x5, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x12, x3, x12
+; GISEL-NEXT:    lsr x16, x10, x6
+; GISEL-NEXT:    orr x12, x0, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    csel x11, x28, x11, eq
+; GISEL-NEXT:    csel x11, x25, x11, eq
 ; GISEL-NEXT:    cmp x9, #4
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #5
@@ -1422,42 +1415,44 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x9, #13
 ; GISEL-NEXT:    csel x13, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    ldp x12, x11, [x6, #32]
+; GISEL-NEXT:    ldp x12, x11, [x1, #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 x0, x12, x16
+; GISEL-NEXT:    lsl x0, x12, x8
 ; GISEL-NEXT:    csel x10, x10, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x10, [sp, #240] ; 8-byte Spill
-; GISEL-NEXT:    csel x10, xzr, x17, eq
+; GISEL-NEXT:    str x10, [sp, #192] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #0
 ; GISEL-NEXT:    orr x10, x0, x10
-; GISEL-NEXT:    lsr x26, x12, x1
-; GISEL-NEXT:    lsl x24, x11, x16
+; GISEL-NEXT:    lsr x7, x12, x6
+; GISEL-NEXT:    lsl x21, x11, x8
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x16, x15
 ; GISEL-NEXT:    csel x13, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    str x0, [sp, #32] ; 8-byte Spill
-; GISEL-NEXT:    orr x13, x14, x13
-; GISEL-NEXT:    stp x14, x16, [sp, #56] ; 16-byte Folded Spill
+; GISEL-NEXT:    str x21, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT:    orr x13, x28, x13
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x5, eq
+; GISEL-NEXT:    csel x13, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x13, x19, x13
+; GISEL-NEXT:    orr x13, x5, x13
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    csel x13, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #3
+; GISEL-NEXT:    mov x17, x2
 ; GISEL-NEXT:    orr x13, x3, x13
+; GISEL-NEXT:    mov x20, x17
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x10, x28, x10, eq
+; GISEL-NEXT:    mov x19, x20
+; GISEL-NEXT:    csel x10, x25, x10, eq
 ; GISEL-NEXT:    cmp x9, #5
+; GISEL-NEXT:    str x20, [sp, #224] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #6
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
@@ -1482,37 +1477,35 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x10, x12, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x10, [sp, #232] ; 8-byte Spill
-; GISEL-NEXT:    csel x10, xzr, x26, eq
+; GISEL-NEXT:    str x10, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x10, x24, x10
+; GISEL-NEXT:    orr x10, x21, x10
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x17, eq
+; GISEL-NEXT:    csel x12, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #1
 ; GISEL-NEXT:    orr x12, x0, x12
 ; GISEL-NEXT:    csel x10, x12, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x12, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    and x15, x8, #0x3f
-; GISEL-NEXT:    orr x12, x14, x12
+; GISEL-NEXT:    orr x12, x28, x12
 ; GISEL-NEXT:    csel x10, x12, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x5, eq
+; GISEL-NEXT:    csel x12, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x12, x19, x12
+; GISEL-NEXT:    lsr x2, x11, x6
+; GISEL-NEXT:    orr x12, x5, x12
 ; GISEL-NEXT:    csel x10, x12, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x2, eq
+; GISEL-NEXT:    csel x12, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #4
 ; GISEL-NEXT:    orr x12, x3, x12
-; GISEL-NEXT:    lsr x3, x11, x1
 ; GISEL-NEXT:    csel x10, x12, x10, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x10, x28, x10, eq
+; GISEL-NEXT:    csel x10, x25, x10, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    str x3, [sp, #344] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #7
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
@@ -1529,53 +1522,56 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x9, #13
 ; GISEL-NEXT:    csel x13, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    ldp x12, x10, [x6, #48]
+; GISEL-NEXT:    ldp x12, x10, [x1, #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 x5, x12, x15
+; GISEL-NEXT:    lsl x27, x12, x8
 ; 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, x3, eq
+; GISEL-NEXT:    str x11, [sp, #176] ; 8-byte Spill
+; GISEL-NEXT:    csel x11, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x5, x11
-; GISEL-NEXT:    lsl x4, x10, x15
+; GISEL-NEXT:    orr x11, x27, x11
+; GISEL-NEXT:    lsr x26, x10, x6
 ; GISEL-NEXT:    csel x11, x11, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x26, eq
+; GISEL-NEXT:    csel x13, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    stp x4, x26, [sp, #272] ; 16-byte Folded Spill
-; GISEL-NEXT:    orr x13, x24, x13
+; GISEL-NEXT:    orr x13, x21, x13
 ; GISEL-NEXT:    csel x11, x13, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x17, eq
+; GISEL-NEXT:    csel x13, xzr, x16, 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:    csel x13, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x13, x14, x13
+; GISEL-NEXT:    orr x13, x28, x13
 ; GISEL-NEXT:    csel x11, x13, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x7, eq
+; GISEL-NEXT:    csel x13, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x13, x19, x13
+; GISEL-NEXT:    mov x17, x5
+; GISEL-NEXT:    orr x13, x5, x13
+; GISEL-NEXT:    lsl x5, x10, x8
+; GISEL-NEXT:    mov x24, x17
 ; GISEL-NEXT:    csel x11, x13, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    str x24, [sp, #8] ; 8-byte Spill
+; GISEL-NEXT:    csel x13, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x13, x21, x13
+; GISEL-NEXT:    mov x14, x5
+; GISEL-NEXT:    orr x13, x3, x13
 ; GISEL-NEXT:    csel x11, x13, x11, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    lsr x13, x12, x1
-; GISEL-NEXT:    csel x11, x28, x11, eq
+; GISEL-NEXT:    lsr x13, x12, x6
+; GISEL-NEXT:    csel x11, x25, 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
@@ -1594,43 +1590,45 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT:    str x11, [sp, #168] ; 8-byte Spill
 ; GISEL-NEXT:    csel x11, xzr, x13, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x4, x11
+; 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:    csel x12, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x12, x5, x12
+; GISEL-NEXT:    orr x12, x27, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x26, eq
+; GISEL-NEXT:    csel x12, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x12, x24, x12
+; GISEL-NEXT:    orr x12, x21, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x17, eq
+; GISEL-NEXT:    csel x12, xzr, x16, 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:    csel x12, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x12, x14, x12
+; GISEL-NEXT:    orr x12, x28, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x7, eq
+; GISEL-NEXT:    csel x12, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x12, x19, x12
+; GISEL-NEXT:    orr x12, x17, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x2, eq
+; GISEL-NEXT:    csel x12, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x12, x21, x12
+; GISEL-NEXT:    orr x12, x3, x12
+; GISEL-NEXT:    mov x3, x13
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x11, x28, x11, eq
+; GISEL-NEXT:    mov x24, x3
+; GISEL-NEXT:    csel x11, x25, x11, eq
 ; GISEL-NEXT:    cmp x9, #8
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #9
@@ -1647,63 +1645,63 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x12, xzr, x11, eq
-; GISEL-NEXT:    ldr x11, [x6, #64]
+; GISEL-NEXT:    ldp x11, x1, [x1, #64]
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    lsr x6, x10, x1
 ; GISEL-NEXT:    csel x12, x10, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsl x25, x11, x30
-; GISEL-NEXT:    str x12, [sp, #208] ; 8-byte Spill
-; GISEL-NEXT:    ldr x1, [x23, #72]
-; GISEL-NEXT:    csel x12, xzr, x6, eq
+; GISEL-NEXT:    mov x10, x21
+; GISEL-NEXT:    lsl x22, x11, x8
+; GISEL-NEXT:    str x12, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT:    csel x12, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    lsr x30, x11, x27
-; GISEL-NEXT:    orr x12, x25, x12
-; GISEL-NEXT:    mov x10, x3
+; GISEL-NEXT:    lsl x30, x1, x8
+; GISEL-NEXT:    orr x12, x22, x12
 ; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    str x30, [sp, #296] ; 8-byte Spill
 ; GISEL-NEXT:    csel x13, xzr, x13, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x13, x4, x13
+; 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:    csel x13, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    mov x3, x4
-; GISEL-NEXT:    orr x13, x5, x13
+; GISEL-NEXT:    orr x13, x27, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x26, eq
+; GISEL-NEXT:    csel x13, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x13, x24, x13
+; GISEL-NEXT:    orr x13, x21, x13
+; GISEL-NEXT:    mov x21, x17
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x17, eq
+; 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:    csel x13, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x13, x14, 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:    csel x13, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    mov x7, x5
-; GISEL-NEXT:    orr x13, x19, x13
-; GISEL-NEXT:    str x7, [sp, #120] ; 8-byte Spill
+; GISEL-NEXT:    mov x20, x4
+; GISEL-NEXT:    orr x13, x17, x13
+; GISEL-NEXT:    mov x17, x2
+; GISEL-NEXT:    str x20, [sp, #16] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    str x17, [sp, #40] ; 8-byte Spill
+; GISEL-NEXT:    csel x13, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x13, x21, x13
+; GISEL-NEXT:    lsr x4, x11, x6
+; GISEL-NEXT:    orr x13, x23, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    and x13, x8, #0x3f
-; GISEL-NEXT:    csel x12, x28, x12, eq
+; GISEL-NEXT:    csel x12, x25, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    lsl x21, x1, x13
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
@@ -1720,60 +1718,63 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x11, x11, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #200] ; 8-byte Spill
-; GISEL-NEXT:    csel x11, xzr, x30, eq
+; GISEL-NEXT:    str x11, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT:    csel x11, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    orr x11, x30, x11
 ; GISEL-NEXT:    csel x11, x11, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x6, eq
+; GISEL-NEXT:    csel x12, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x12, x25, x12
+; GISEL-NEXT:    orr x12, x22, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x12, x4, x12
-; GISEL-NEXT:    mov x4, x25
+; GISEL-NEXT:    mov x3, x23
+; GISEL-NEXT:    orr x12, x5, x12
+; GISEL-NEXT:    lsr x5, x1, x6
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x10, eq
+; GISEL-NEXT:    csel x12, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    mov x10, x24
-; GISEL-NEXT:    orr x12, x5, x12
-; GISEL-NEXT:    lsr x5, x1, x27
+; GISEL-NEXT:    mov x2, x27
+; GISEL-NEXT:    orr x12, x27, x12
+; GISEL-NEXT:    mov x27, x26
+; GISEL-NEXT:    str x5, [sp, #280] ; 8-byte Spill
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x26, eq
+; GISEL-NEXT:    stp x22, x27, [sp, #80] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x12, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    str x5, [sp, #48] ; 8-byte Spill
-; GISEL-NEXT:    orr x12, x24, x12
-; GISEL-NEXT:    mov x24, x0
+; GISEL-NEXT:    orr x12, x10, x12
+; GISEL-NEXT:    ldr x10, [sp, #312] ; 8-byte Reload
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x17, eq
+; GISEL-NEXT:    csel x12, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #5
 ; 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:    csel x12, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x12, x14, x12
+; GISEL-NEXT:    orr x12, x28, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x20, eq
+; GISEL-NEXT:    csel x12, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    mov x20, x28
-; GISEL-NEXT:    orr x12, x19, x12
-; GISEL-NEXT:    str x20, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT:    orr x12, x21, x12
+; GISEL-NEXT:    mov x21, x25
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x2, eq
+; GISEL-NEXT:    str x21, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT:    csel x12, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x12, x22, x12
+; GISEL-NEXT:    orr x12, x23, x12
+; GISEL-NEXT:    mov x23, x14
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    csel x11, x28, x11, eq
+; GISEL-NEXT:    csel x11, x25, x11, eq
 ; GISEL-NEXT:    cmp x9, #10
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #11
@@ -1786,174 +1787,158 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x12, xzr, x11, eq
-; GISEL-NEXT:    ldp x11, x28, [x23, #80]
+; GISEL-NEXT:    ldp x11, x25, [x10, #80]
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    mov x23, x21
+; GISEL-NEXT:    mov x10, x4
 ; GISEL-NEXT:    csel x12, x1, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x1, x30
-; GISEL-NEXT:    lsl x0, x11, x13
-; GISEL-NEXT:    str x12, [sp, #192] ; 8-byte Spill
+; GISEL-NEXT:    mov x1, x2
+; GISEL-NEXT:    lsl x19, x11, x8
+; GISEL-NEXT:    str x12, [sp, #144] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, xzr, x5, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    str x1, [sp, #88] ; 8-byte Spill
-; GISEL-NEXT:    orr x12, x0, x12
-; GISEL-NEXT:    str x0, [sp, #288] ; 8-byte Spill
+; GISEL-NEXT:    stp x23, x1, [sp, #64] ; 16-byte Folded Spill
+; GISEL-NEXT:    orr x12, x19, x12
+; GISEL-NEXT:    stp x19, x4, [sp, #232] ; 16-byte Folded Spill
 ; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x30, eq
+; GISEL-NEXT:    csel x13, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    ldr x30, [sp, #344] ; 8-byte Reload
-; GISEL-NEXT:    orr x13, x21, x13
-; GISEL-NEXT:    mov x21, x15
+; GISEL-NEXT:    lsr x4, x11, x6
+; GISEL-NEXT:    orr x13, x30, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x21, [sp, #296] ; 8-byte Spill
-; GISEL-NEXT:    csel x13, xzr, x6, eq
+; GISEL-NEXT:    str x4, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT:    csel x13, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x13, x25, x13
-; GISEL-NEXT:    mov x25, x27
+; GISEL-NEXT:    mov x26, x0
+; GISEL-NEXT:    orr x13, x22, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x25, [sp, #16] ; 8-byte Spill
-; GISEL-NEXT:    csel x13, xzr, x15, eq
+; GISEL-NEXT:    csel x13, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    mov x15, x17
-; GISEL-NEXT:    orr x13, x3, x13
-; GISEL-NEXT:    mov x3, x20
+; GISEL-NEXT:    orr x13, x14, x13
+; GISEL-NEXT:    ldr x14, [sp, #248] ; 8-byte Reload
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x30, eq
+; GISEL-NEXT:    csel x13, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x13, x7, x13
+; GISEL-NEXT:    orr x13, x2, x13
+; GISEL-NEXT:    mov x2, x24
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x26, eq
+; GISEL-NEXT:    csel x13, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x26, x10
-; GISEL-NEXT:    orr x13, x10, x13
-; GISEL-NEXT:    mov x10, x14
-; GISEL-NEXT:    str x26, [sp, #104] ; 8-byte Spill
+; GISEL-NEXT:    orr x13, x14, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x17, eq
+; GISEL-NEXT:    csel x13, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    mov x17, x22
-; GISEL-NEXT:    orr x13, x24, x13
-; GISEL-NEXT:    mov x24, x19
-; GISEL-NEXT:    str x17, [sp, #96] ; 8-byte Spill
+; GISEL-NEXT:    orr x13, x0, x13
+; GISEL-NEXT:    mov x0, x28
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x16, eq
+; GISEL-NEXT:    csel x13, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x13, x14, x13
-; GISEL-NEXT:    ldr x14, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT:    ldr x15, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT:    orr x13, x28, x13
+; GISEL-NEXT:    ldr x28, [sp, #8] ; 8-byte Reload
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x14, eq
+; GISEL-NEXT:    csel x13, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x13, x19, x13
+; GISEL-NEXT:    orr x13, x28, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    csel x13, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    mov x2, x1
-; GISEL-NEXT:    orr x13, x22, x13
-; GISEL-NEXT:    mov x22, x23
+; GISEL-NEXT:    lsl x20, x25, x8
+; GISEL-NEXT:    orr x13, x3, x13
 ; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    lsr x13, x11, x27
-; GISEL-NEXT:    csel x12, x20, x12, eq
+; GISEL-NEXT:    mov x13, x21
+; GISEL-NEXT:    csel x12, x21, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    mov x27, x4
+; GISEL-NEXT:    ldr x21, [sp, #272] ; 8-byte Reload
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    str x13, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT:    str x20, [sp, #96] ; 8-byte Spill
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    mov x20, x26
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    stp x27, x22, [sp, #72] ; 16-byte Folded Spill
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x11, x11, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #184] ; 8-byte Spill
-; GISEL-NEXT:    and x11, x8, #0x3f
-; GISEL-NEXT:    lsl x19, x28, x11
-; GISEL-NEXT:    csel x11, xzr, x13, eq
+; GISEL-NEXT:    str x11, [sp, #128] ; 8-byte Spill
+; GISEL-NEXT:    csel x11, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x19, x11
-; GISEL-NEXT:    str x19, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT:    orr x11, x20, x11
 ; GISEL-NEXT:    csel x11, x11, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x12, xzr, x5, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    mov x5, x7
-; GISEL-NEXT:    orr x12, x0, x12
-; GISEL-NEXT:    ldr x0, [sp, #32] ; 8-byte Reload
+; GISEL-NEXT:    mov x5, x1
+; GISEL-NEXT:    orr x12, x19, x12
+; GISEL-NEXT:    mov x19, x27
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    mov x1, x17
-; GISEL-NEXT:    orr x12, x23, x12
-; GISEL-NEXT:    mov x23, x21
+; GISEL-NEXT:    ldr x10, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x30, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x6, eq
+; GISEL-NEXT:    csel x12, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x12, x4, x12
-; GISEL-NEXT:    mov x4, x15
+; GISEL-NEXT:    ldr x27, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x22, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x21, eq
-; GISEL-NEXT:    ldr x21, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x12, x21, x12
+; GISEL-NEXT:    mov x24, x16
+; GISEL-NEXT:    orr x12, x23, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x30, eq
+; GISEL-NEXT:    csel x12, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x30, x27
-; GISEL-NEXT:    orr x12, x7, x12
-; GISEL-NEXT:    ldr x7, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x1, x12
+; GISEL-NEXT:    mov x1, x26
 ; 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, x26, x12
-; GISEL-NEXT:    ldr x26, [sp, #48] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x14, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    ldr x15, [sp, #320] ; 8-byte Reload
-; GISEL-NEXT:    orr x12, x0, x12
+; GISEL-NEXT:    mov x16, x28
+; GISEL-NEXT:    orr x12, x26, x12
+; GISEL-NEXT:    ldr x26, [sp, #16] ; 8-byte Reload
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x16, eq
+; GISEL-NEXT:    csel x12, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    mov x16, x14
-; GISEL-NEXT:    orr x12, x10, x12
-; GISEL-NEXT:    ldr x10, [sp, #336] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x0, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x12, x24, x12
+; GISEL-NEXT:    orr x12, x28, x12
+; GISEL-NEXT:    mov x28, x30
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x12, x17, x12
-; GISEL-NEXT:    mov x17, x13
+; GISEL-NEXT:    orr x12, x3, x12
 ; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x11, x3, x11, eq
+; GISEL-NEXT:    csel x11, x13, x11, eq
 ; GISEL-NEXT:    cmp x9, #12
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #13
@@ -1962,398 +1947,391 @@ define void @test_shl_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x12, xzr, x11, eq
+; GISEL-NEXT:    ldp x11, x15, [x10, #96]
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    ldp x11, x3, [x10, #96]
-; GISEL-NEXT:    csel x12, x28, x12, eq
-; GISEL-NEXT:    str x12, [sp, #168] ; 8-byte Spill
-; GISEL-NEXT:    lsr x12, x28, x25
-; GISEL-NEXT:    and x10, x8, #0x3f
+; GISEL-NEXT:    csel x12, x25, x12, eq
+; GISEL-NEXT:    lsr x25, x25, x6
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x28, x0
-; GISEL-NEXT:    lsl x14, x11, x10
-; GISEL-NEXT:    csel x10, xzr, x12, eq
+; GISEL-NEXT:    lsl x13, x11, x8
+; GISEL-NEXT:    str x12, [sp, #120] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    str x12, [sp, #112] ; 8-byte Spill
-; GISEL-NEXT:    ldr x12, [sp, #288] ; 8-byte Reload
-; GISEL-NEXT:    orr x10, x14, x10
-; GISEL-NEXT:    str x14, [sp, #312] ; 8-byte Spill
-; GISEL-NEXT:    mov x14, x6
+; GISEL-NEXT:    str x25, [sp, #32] ; 8-byte Spill
+; GISEL-NEXT:    orr x10, x13, x10
+; GISEL-NEXT:    str x13, [sp, #256] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x14, [sp, #40] ; 8-byte Spill
-; GISEL-NEXT:    csel x13, xzr, x13, eq
+; GISEL-NEXT:    csel x13, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x13, x19, x13
+; GISEL-NEXT:    mov x4, x20
+; GISEL-NEXT:    orr x13, x20, x13
+; GISEL-NEXT:    ldp x12, x17, [sp, #232] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x26, eq
+; GISEL-NEXT:    mov x20, x1
+; GISEL-NEXT:    csel x13, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #2
 ; GISEL-NEXT:    orr x13, x12, x13
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    csel x13, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    ldr x2, [sp, #344] ; 8-byte Reload
-; GISEL-NEXT:    orr x13, x22, x13
+; GISEL-NEXT:    orr x13, x30, x13
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x6, eq
+; GISEL-NEXT:    csel x13, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    mov x6, x16
-; GISEL-NEXT:    orr x13, x27, x13
-; GISEL-NEXT:    ldr x27, [sp, #112] ; 8-byte Reload
+; GISEL-NEXT:    mov x19, x24
+; GISEL-NEXT:    orr x13, x22, x13
+; GISEL-NEXT:    mov x22, x2
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x23, eq
+; GISEL-NEXT:    csel x13, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x23, x3
-; GISEL-NEXT:    orr x13, x21, x13
+; GISEL-NEXT:    ldr x2, [sp, #40] ; 8-byte Reload
+; GISEL-NEXT:    orr x13, x23, x13
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x13, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #6
 ; GISEL-NEXT:    orr x13, x5, x13
+; GISEL-NEXT:    mov x5, x0
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x13, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x13, x20, x13
-; GISEL-NEXT:    ldp x19, x20, [sp, #56] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x13, x14, x13
+; GISEL-NEXT:    mov x14, x2
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x4, eq
+; GISEL-NEXT:    csel x13, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x13, x0, x13
-; GISEL-NEXT:    ldr x0, [sp, #88] ; 8-byte Reload
+; GISEL-NEXT:    mov x24, x3
+; GISEL-NEXT:    orr x13, x1, x13
+; GISEL-NEXT:    mov x1, x26
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x20, eq
+; GISEL-NEXT:    csel x13, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x13, x19, x13
+; GISEL-NEXT:    ldr x21, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT:    orr x13, x0, x13
+; GISEL-NEXT:    ldp x0, x30, [sp, #256] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x16, eq
+; GISEL-NEXT:    csel x13, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x13, x24, x13
-; GISEL-NEXT:    ldp x16, x5, [sp, #304] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x13, x16, x13
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x15, eq
+; GISEL-NEXT:    csel x13, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    mov x15, x25
-; GISEL-NEXT:    orr x13, x1, x13
-; GISEL-NEXT:    ldr x1, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT:    ldr x26, [sp, #48] ; 8-byte Reload
+; GISEL-NEXT:    orr x13, x3, x13
+; GISEL-NEXT:    ldr x3, [sp, #272] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x13, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    lsr x13, x11, x25
-; GISEL-NEXT:    csel x10, x1, x10, eq
+; GISEL-NEXT:    lsr x13, x11, x6
+; GISEL-NEXT:    csel x10, x26, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    ldr x25, [sp, #120] ; 8-byte Reload
+; GISEL-NEXT:    mov x6, x15
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    str x13, [sp, #144] ; 8-byte Spill
+; GISEL-NEXT:    str x13, [sp, #288] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x10, [sp, #160] ; 8-byte Spill
-; GISEL-NEXT:    and x10, x8, #0x3f
-; GISEL-NEXT:    lsl x11, x3, x10
+; GISEL-NEXT:    lsl x11, x15, x8
+; GISEL-NEXT:    str x10, [sp, #112] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, xzr, x13, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    mov x13, x21
-; GISEL-NEXT:    ldr x3, [sp, #320] ; 8-byte Reload
 ; GISEL-NEXT:    orr x10, x11, x10
-; GISEL-NEXT:    str x11, [sp, #128] ; 8-byte Spill
+; GISEL-NEXT:    str x11, [sp, #304] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x27, eq
+; GISEL-NEXT:    csel x11, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x11, x5, x11
+; GISEL-NEXT:    orr x11, x0, x11
+; GISEL-NEXT:    ldp x15, x23, [sp, #80] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x17, eq
+; GISEL-NEXT:    csel x11, xzr, x30, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    mov x17, x1
-; GISEL-NEXT:    orr x11, x16, x11
+; GISEL-NEXT:    orr x11, x4, x11
+; GISEL-NEXT:    ldp x4, x13, [sp, #64] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x26, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #3
 ; GISEL-NEXT:    orr x11, x12, x11
-; GISEL-NEXT:    ldr x12, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT:    ldr x12, [sp, #248] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x11, x22, x11
-; GISEL-NEXT:    ldr x22, [sp, #128] ; 8-byte Reload
+; GISEL-NEXT:    mov x17, x1
+; GISEL-NEXT:    orr x11, x28, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x14, eq
+; GISEL-NEXT:    csel x11, xzr, x23, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x11, x30, x11
+; GISEL-NEXT:    orr x11, x15, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x11, x21, x11
-; GISEL-NEXT:    ldr x21, [sp, #104] ; 8-byte Reload
+; GISEL-NEXT:    orr x11, x4, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x11, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    mov x2, x19
-; GISEL-NEXT:    orr x11, x25, x11
+; GISEL-NEXT:    mov x2, x16
+; GISEL-NEXT:    orr x11, x13, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x11, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    mov x7, x28
-; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    orr x11, x12, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x4, eq
+; GISEL-NEXT:    csel x11, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x11, x28, x11
-; GISEL-NEXT:    mov x28, x20
+; GISEL-NEXT:    orr x11, x20, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x20, eq
+; GISEL-NEXT:    csel x11, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x11, x19, x11
-; GISEL-NEXT:    ldr x19, [sp, #96] ; 8-byte Reload
+; GISEL-NEXT:    orr x11, x5, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x6, eq
+; GISEL-NEXT:    csel x11, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    orr x11, x16, x11
+; GISEL-NEXT:    ldr x16, [sp, #56] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x3, eq
+; GISEL-NEXT:    csel x11, xzr, x1, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    orr x11, x19, x11
+; GISEL-NEXT:    ldr x1, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT:    orr x11, x24, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x10, x1, x10, eq
+; GISEL-NEXT:    csel x10, x26, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    ldr x1, [sp, #336] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x11, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x11, x23, x11, eq
+; GISEL-NEXT:    csel x11, x6, x11, eq
+; GISEL-NEXT:    lsr x6, x6, x16
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #152] ; 8-byte Spill
-; GISEL-NEXT:    lsr x11, x23, x15
-; GISEL-NEXT:    ldr x23, [sp, #288] ; 8-byte Reload
-; GISEL-NEXT:    ldp x10, x15, [x1, #112]
-; GISEL-NEXT:    and x1, x8, #0x3f
-; GISEL-NEXT:    lsl x20, x10, x1
-; GISEL-NEXT:    csel x1, xzr, x11, eq
+; GISEL-NEXT:    str x11, [sp, #104] ; 8-byte Spill
+; GISEL-NEXT:    ldp x10, x11, [x1, #112]
+; GISEL-NEXT:    csel x1, xzr, x6, eq
+; GISEL-NEXT:    str x6, [sp, #24] ; 8-byte Spill
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    str x20, [sp, #336] ; 8-byte Spill
-; GISEL-NEXT:    orr x1, x20, x1
-; GISEL-NEXT:    ldr x20, [sp, #144] ; 8-byte Reload
+; GISEL-NEXT:    ldr x6, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT:    lsl x27, x10, x8
+; GISEL-NEXT:    orr x1, x27, x1
+; GISEL-NEXT:    str x27, [sp, #312] ; 8-byte Spill
+; GISEL-NEXT:    ldr x27, [sp, #304] ; 8-byte Reload
 ; GISEL-NEXT:    csel x1, x1, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x20, eq
+; GISEL-NEXT:    csel x28, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x30, x22, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    ldr x6, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT:    orr x28, x27, x28
+; GISEL-NEXT:    ldr x27, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x27, eq
+; GISEL-NEXT:    csel x28, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x30, x5, x30
-; GISEL-NEXT:    ldr x5, [sp, #136] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x0, x28
+; GISEL-NEXT:    ldr x0, [sp, #96] ; 8-byte Reload
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x5, eq
+; GISEL-NEXT:    csel x28, xzr, x30, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x30, x16, x30
-; GISEL-NEXT:    ldr x16, [sp, #80] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x0, x28
+; GISEL-NEXT:    ldp x30, x25, [sp, #232] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x26, eq
+; GISEL-NEXT:    csel x28, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x30, x23, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x30, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x0, eq
+; GISEL-NEXT:    csel x28, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x30, x16, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x6, x28
+; GISEL-NEXT:    mov x6, x26
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x14, eq
-; GISEL-NEXT:    ldr x14, [sp, #72] ; 8-byte Reload
+; GISEL-NEXT:    csel x28, xzr, x23, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x30, x14, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x15, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x12, eq
+; GISEL-NEXT:    csel x28, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    ldr x12, [sp, #344] ; 8-byte Reload
-; GISEL-NEXT:    orr x30, x13, x30
-; GISEL-NEXT:    ldr x13, [sp, #280] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x4, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x12, eq
+; GISEL-NEXT:    csel x28, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x30, x25, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x13, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x13, eq
+; GISEL-NEXT:    csel x28, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x30, x21, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x12, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x4, eq
+; GISEL-NEXT:    csel x28, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x30, x7, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x20, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x28, eq
+; GISEL-NEXT:    csel x28, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    orr x30, x2, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x5, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x6, eq
+; GISEL-NEXT:    csel x28, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    orr x30, x24, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x2, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x30, xzr, x3, eq
+; GISEL-NEXT:    csel x28, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    orr x30, x19, x30
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x28, x24, x28
+; GISEL-NEXT:    csel x1, x28, x1, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, x17, x1, eq
+; GISEL-NEXT:    lsr x28, x10, x16
+; GISEL-NEXT:    csel x1, x26, x1, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    ldr x17, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT:    mov x16, x11
 ; GISEL-NEXT:    csel x1, xzr, x1, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    lsr x30, x10, x17
-; GISEL-NEXT:    csel x17, x10, x1, eq
-; GISEL-NEXT:    and x10, x8, #0x3f
-; GISEL-NEXT:    lsl x10, x15, x10
+; GISEL-NEXT:    csel x26, x10, x1, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x30, eq
+; GISEL-NEXT:    lsl x10, x11, x8
+; GISEL-NEXT:    csel x1, xzr, x28, eq
 ; GISEL-NEXT:    cmp x9, #0
+; GISEL-NEXT:    ldr x11, [sp, #24] ; 8-byte Reload
 ; GISEL-NEXT:    orr x10, x10, x1
-; GISEL-NEXT:    ldr x1, [sp, #336] ; 8-byte Reload
+; GISEL-NEXT:    ldr x1, [sp, #312] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #1
 ; GISEL-NEXT:    orr x11, x1, x11
-; GISEL-NEXT:    ldr x1, [sp, #312] ; 8-byte Reload
+; GISEL-NEXT:    ldr x1, [sp, #304] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
+; GISEL-NEXT:    ldr x11, [sp, #288] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x20, eq
+; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x11, x22, x11
-; GISEL-NEXT:    ldp x29, x30, [sp, #432] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    ldr x1, [sp, #256] ; 8-byte Reload
 ; 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, x27, eq
+; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #3
 ; GISEL-NEXT:    orr x11, x1, x11
-; GISEL-NEXT:    ldr x1, [sp, #304] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
+; GISEL-NEXT:    ldr x11, [sp, #264] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    orr x11, x0, x11
+; GISEL-NEXT:    ldr x0, [sp, #296] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x26, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    orr x11, x30, x11
+; GISEL-NEXT:    ldp x29, x30, [sp, #400] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x11, x16, x11
+; GISEL-NEXT:    orr x11, x0, x11
+; GISEL-NEXT:    ldp x28, x27, [sp, #320] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
-; GISEL-NEXT:    ldr x11, [sp, #40] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x11, eq
+; GISEL-NEXT:    csel x11, xzr, x23, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x11, x14, x11
-; GISEL-NEXT:    ldr x14, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT:    orr x11, x15, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
-; GISEL-NEXT:    ldr x11, [sp, #296] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x11, eq
+; GISEL-NEXT:    csel x11, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x11, x14, x11
-; GISEL-NEXT:    ldr x14, [sp, #176] ; 8-byte Reload
+; GISEL-NEXT:    orr x11, x4, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x11, x25, x11
-; GISEL-NEXT:    ldp x26, x25, [sp, #368] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x11, x13, x11
+; GISEL-NEXT:    ldr x13, [sp, #136] ; 8-byte Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x13, eq
+; GISEL-NEXT:    csel x11, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x11, x21, x11
-; GISEL-NEXT:    ldp x22, x21, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x11, x12, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
-; GISEL-NEXT:    ldr x11, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT:    ldr x11, [sp, #216] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [x14]
-; GISEL-NEXT:    ldp x12, x11, [sp, #248] ; 16-byte Folded Reload
-; GISEL-NEXT:    stp x11, x12, [x14, #8]
-; GISEL-NEXT:    csel x11, xzr, x4, eq
+; GISEL-NEXT:    str x11, [x13]
+; GISEL-NEXT:    ldp x12, x11, [sp, #200] ; 16-byte Folded Reload
+; GISEL-NEXT:    stp x11, x12, [x13, #8]
+; GISEL-NEXT:    csel x11, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    orr x11, x7, x11
+; GISEL-NEXT:    orr x11, x20, x11
+; GISEL-NEXT:    ldp x20, x19, [sp, #384] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
-; GISEL-NEXT:    ldr x11, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT:    ldr x11, [sp, #192] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [x14, #24]
-; GISEL-NEXT:    ldp x12, x11, [sp, #224] ; 16-byte Folded Reload
-; GISEL-NEXT:    stp x11, x12, [x14, #32]
-; GISEL-NEXT:    csel x11, xzr, x28, eq
+; GISEL-NEXT:    str x11, [x13, #24]
+; GISEL-NEXT:    ldp x12, x11, [sp, #176] ; 16-byte Folded Reload
+; GISEL-NEXT:    stp x11, x12, [x13, #32]
+; GISEL-NEXT:    csel x11, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    orr x11, x2, x11
-; GISEL-NEXT:    ldp x28, x27, [sp, #352] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x11, x5, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
-; GISEL-NEXT:    ldr x11, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT:    ldr x11, [sp, #168] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [x14, #48]
-; GISEL-NEXT:    ldp x12, x11, [sp, #200] ; 16-byte Folded Reload
-; GISEL-NEXT:    stp x11, x12, [x14, #56]
-; GISEL-NEXT:    csel x11, xzr, x6, eq
+; GISEL-NEXT:    str x11, [x13, #48]
+; GISEL-NEXT:    ldp x12, x11, [sp, #152] ; 16-byte Folded Reload
+; GISEL-NEXT:    stp x11, x12, [x13, #56]
+; GISEL-NEXT:    csel x11, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    orr x11, x24, x11
-; GISEL-NEXT:    ldr x12, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT:    orr x11, x2, x11
+; GISEL-NEXT:    ldp x22, x21, [sp, #368] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
-; GISEL-NEXT:    ldr x11, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT:    ldr x11, [sp, #144] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldp x24, x23, [sp, #384] ; 16-byte Folded Reload
-; GISEL-NEXT:    str x11, [x14, #72]
-; GISEL-NEXT:    ldr x11, [sp, #184] ; 8-byte Reload
-; GISEL-NEXT:    str x11, [x14, #80]
-; GISEL-NEXT:    csel x11, xzr, x3, eq
+; GISEL-NEXT:    str x11, [x13, #72]
+; GISEL-NEXT:    ldp x12, x11, [sp, #120] ; 16-byte Folded Reload
+; GISEL-NEXT:    stp x11, x12, [x13, #80]
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    orr x11, x19, x11
-; GISEL-NEXT:    ldp x20, x19, [sp, #416] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    ldp x24, x23, [sp, #352] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    ldr x9, [sp, #160] ; 8-byte Reload
-; GISEL-NEXT:    stp x12, x9, [x14, #88]
-; GISEL-NEXT:    ldr x9, [sp, #328] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x9, x10, eq
+; GISEL-NEXT:    ldr x11, [sp, #112] ; 8-byte Reload
+; GISEL-NEXT:    csel x9, x6, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    ldr x8, [sp, #152] ; 8-byte Reload
-; GISEL-NEXT:    stp x8, x17, [x14, #104]
-; GISEL-NEXT:    csel x8, x15, x9, eq
-; GISEL-NEXT:    str x8, [x14, #120]
-; GISEL-NEXT:    add sp, sp, #448
+; GISEL-NEXT:    ldr x8, [sp, #104] ; 8-byte Reload
+; GISEL-NEXT:    stp x11, x8, [x13, #96]
+; GISEL-NEXT:    csel x8, x16, x9, eq
+; GISEL-NEXT:    stp x26, x8, [x13, #112]
+; GISEL-NEXT:    ldp x26, x25, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT:    add sp, sp, #416
 ; GISEL-NEXT:    ret
 entry:
   %input_val = load i1024, ptr %input, align 128
@@ -2494,14 +2472,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, #384
+; GISEL-NEXT:    stp x28, x27, [sp, #288] ; 16-byte Folded Spill
+; GISEL-NEXT:    stp x26, x25, [sp, #304] ; 16-byte Folded Spill
+; GISEL-NEXT:    stp x24, x23, [sp, #320] ; 16-byte Folded Spill
+; GISEL-NEXT:    stp x22, x21, [sp, #336] ; 16-byte Folded Spill
+; GISEL-NEXT:    stp x20, x19, [sp, #352] ; 16-byte Folded Spill
+; GISEL-NEXT:    stp x29, x30, [sp, #368] ; 16-byte Folded Spill
+; GISEL-NEXT:    .cfi_def_cfa_offset 384
 ; GISEL-NEXT:    .cfi_offset w30, -8
 ; GISEL-NEXT:    .cfi_offset w29, -16
 ; GISEL-NEXT:    .cfi_offset w19, -24
@@ -2515,737 +2493,745 @@ 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 x12, x16, [x1]
+; GISEL-NEXT:    ldp x21, x15, [x1]
 ; GISEL-NEXT:    mov w9, #64 ; =0x40
-; GISEL-NEXT:    and x14, x8, #0x3f
+; GISEL-NEXT:    and x10, x8, #0x3f
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    sub x15, x9, x14
-; GISEL-NEXT:    lsr x9, x8, #6
-; GISEL-NEXT:    str x0, [sp, #288] ; 8-byte Spill
-; GISEL-NEXT:    str x12, [sp, #160] ; 8-byte Spill
-; GISEL-NEXT:    lsl x10, x16, x15
-; GISEL-NEXT:    lsr x11, x12, x14
+; GISEL-NEXT:    sub x14, x9, x10
 ; GISEL-NEXT:    ldp x12, x13, [x1, #16]
-; GISEL-NEXT:    lsr x19, x16, x14
+; GISEL-NEXT:    lsl x10, x15, x14
+; GISEL-NEXT:    lsr x9, x8, #6
+; GISEL-NEXT:    lsr x11, x21, x8
+; GISEL-NEXT:    lsr x26, x15, x8
+; GISEL-NEXT:    str x0, [sp, #280] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
+; GISEL-NEXT:    lsl x19, x12, x14
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    str x16, [sp, #256] ; 8-byte Spill
 ; GISEL-NEXT:    orr x10, x11, x10
-; GISEL-NEXT:    ldp x4, x2, [x1, #64]
-; GISEL-NEXT:    lsl x0, x12, x15
+; GISEL-NEXT:    stp x12, x15, [sp, #160] ; 16-byte Folded Spill
+; GISEL-NEXT:    lsr x24, x12, x8
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x12, [sp, #232] ; 8-byte Spill
-; GISEL-NEXT:    lsr x17, x12, x14
-; GISEL-NEXT:    lsr x3, x13, x14
-; GISEL-NEXT:    csel x11, xzr, x0, eq
-; GISEL-NEXT:    str x0, [sp, #152] ; 8-byte Spill
-; GISEL-NEXT:    lsl x0, x13, x15
+; GISEL-NEXT:    lsl x0, x13, x14
+; GISEL-NEXT:    csel x11, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x11, x19, x11
-; GISEL-NEXT:    str x4, [sp, #208] ; 8-byte Spill
-; GISEL-NEXT:    ldp x12, x16, [x1, #32]
+; GISEL-NEXT:    str x13, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT:    orr x11, x26, x11
+; GISEL-NEXT:    ldp x12, x15, [x1, #32]
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x17, x0, [sp, #136] ; 16-byte Folded Spill
-; GISEL-NEXT:    lsl x28, x2, x15
+; GISEL-NEXT:    lsr x13, x13, x8
 ; GISEL-NEXT:    csel x11, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    lsr x26, x4, x14
-; GISEL-NEXT:    lsl x0, x12, x15
-; GISEL-NEXT:    orr x11, x17, x11
-; GISEL-NEXT:    stp x13, x12, [sp, #168] ; 16-byte Folded Spill
+; GISEL-NEXT:    str x0, [sp, #40] ; 8-byte Spill
+; GISEL-NEXT:    lsl x30, x12, x14
+; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    lsl x17, x15, x14
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x17, x12, x14
-; GISEL-NEXT:    csel x11, xzr, x0, eq
-; GISEL-NEXT:    str x0, [sp, #304] ; 8-byte Spill
-; GISEL-NEXT:    lsl x0, x16, x15
+; GISEL-NEXT:    stp x12, x15, [sp, #176] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x11, xzr, x30, eq
+; GISEL-NEXT:    lsr x16, x12, x8
+; GISEL-NEXT:    stp x17, x13, [sp, #136] ; 16-byte Folded Spill
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x11, x3, x11
-; GISEL-NEXT:    str x16, [sp, #184] ; 8-byte Spill
+; GISEL-NEXT:    orr x11, x13, x11
 ; GISEL-NEXT:    ldp x13, x12, [x1, #48]
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x17, x0, [sp, #120] ; 16-byte Folded Spill
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    str x2, [sp, #216] ; 8-byte Spill
-; GISEL-NEXT:    lsl x0, x13, x15
-; GISEL-NEXT:    orr x11, x17, x11
-; GISEL-NEXT:    lsr x17, x16, x14
+; GISEL-NEXT:    lsl x17, x13, x14
+; GISEL-NEXT:    orr x11, x16, x11
+; GISEL-NEXT:    lsr x2, x13, x8
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsl x7, x12, x15
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    lsr x3, x12, x8
+; GISEL-NEXT:    stp x17, x16, [sp, #120] ; 16-byte Folded Spill
+; GISEL-NEXT:    lsr x16, x15, x8
+; GISEL-NEXT:    csel x11, xzr, x17, eq
+; GISEL-NEXT:    lsl x17, x12, x14
 ; GISEL-NEXT:    cmp x9, #5
 ; GISEL-NEXT:    stp x13, x12, [sp, #192] ; 16-byte Folded Spill
-; GISEL-NEXT:    orr x11, x17, x11
-; GISEL-NEXT:    lsr x13, x13, x14
-; GISEL-NEXT:    stp x17, x0, [sp, #104] ; 16-byte Folded Spill
+; GISEL-NEXT:    orr x11, x16, x11
+; GISEL-NEXT:    stp x17, x16, [sp, #104] ; 16-byte Folded Spill
+; GISEL-NEXT:    ldp x16, x4, [x1, #64]
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsl x0, x4, x15
-; GISEL-NEXT:    csel x11, xzr, x7, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    lsr x22, x12, x14
-; GISEL-NEXT:    orr x11, x13, x11
-; GISEL-NEXT:    str x13, [sp, #96] ; 8-byte Spill
+; GISEL-NEXT:    orr x11, x2, x11
+; GISEL-NEXT:    lsl x17, x16, x14
+; GISEL-NEXT:    str x16, [sp, #208] ; 8-byte Spill
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x28, [sp, #16] ; 8-byte Spill
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    lsr x5, x16, x8
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    str x3, [sp, #32] ; 8-byte Spill
-; GISEL-NEXT:    orr x11, x22, x11
-; GISEL-NEXT:    csel x16, x11, x10, eq
-; GISEL-NEXT:    ldp x10, x4, [x1, #80]
+; GISEL-NEXT:    stp x17, x2, [sp, #88] ; 16-byte Folded Spill
+; GISEL-NEXT:    orr x11, x3, x11
+; GISEL-NEXT:    lsr x7, x4, x8
+; GISEL-NEXT:    stp x5, x3, [sp, #24] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x15, x11, x10, eq
+; GISEL-NEXT:    lsl x10, x4, x14
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x11, x2
-; GISEL-NEXT:    csel x2, xzr, x28, eq
+; GISEL-NEXT:    str x10, [sp, #80] ; 8-byte Spill
+; GISEL-NEXT:    csel x16, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    lsr x24, x11, x14
-; GISEL-NEXT:    orr x2, x26, x2
-; GISEL-NEXT:    lsl x23, x10, x15
-; GISEL-NEXT:    lsl x12, x4, x15
-; GISEL-NEXT:    csel x16, x2, x16, eq
+; GISEL-NEXT:    ldp x2, x10, [x1, #80]
+; GISEL-NEXT:    orr x16, x5, x16
+; GISEL-NEXT:    csel x15, x16, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x10, [sp, #224] ; 8-byte Spill
-; GISEL-NEXT:    csel x2, xzr, x23, eq
+; GISEL-NEXT:    lsl x12, x2, x14
+; GISEL-NEXT:    stp x4, x2, [sp, #224] ; 16-byte Folded Spill
+; GISEL-NEXT:    mov x4, x10
+; GISEL-NEXT:    str x10, [sp, #240] ; 8-byte Spill
+; GISEL-NEXT:    lsr x20, x2, x8
+; GISEL-NEXT:    lsr x28, x4, x8
+; GISEL-NEXT:    csel x16, xzr, x12, eq
+; GISEL-NEXT:    str x12, [sp, #72] ; 8-byte Spill
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    ldr x11, [x1, #96]
-; GISEL-NEXT:    orr x2, x24, x2
-; GISEL-NEXT:    lsr x10, x10, x14
-; GISEL-NEXT:    lsr x13, x4, x14
-; GISEL-NEXT:    csel x16, x2, x16, eq
+; GISEL-NEXT:    orr x16, x7, x16
+; GISEL-NEXT:    lsl x12, x10, x14
+; GISEL-NEXT:    str x28, [sp, #16] ; 8-byte Spill
+; GISEL-NEXT:    ldp x11, x10, [x1, #96]
+; GISEL-NEXT:    csel x15, x16, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsl x25, x11, x15
-; GISEL-NEXT:    csel x2, xzr, x12, eq
-; GISEL-NEXT:    stp x10, x12, [sp, #80] ; 16-byte Folded Spill
+; GISEL-NEXT:    str x12, [sp, #64] ; 8-byte Spill
+; GISEL-NEXT:    csel x16, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x2, x10, x2
-; GISEL-NEXT:    ldp x10, x30, [x1, #104]
-; GISEL-NEXT:    csel x16, x2, x16, eq
+; GISEL-NEXT:    orr x16, x20, x16
+; GISEL-NEXT:    lsl x12, x11, x14
+; GISEL-NEXT:    mov x2, x11
+; GISEL-NEXT:    csel x15, x16, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x27, x11, x14
-; GISEL-NEXT:    csel x2, xzr, x25, eq
+; GISEL-NEXT:    stp x11, x10, [sp, #248] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x16, xzr, x12, eq
+; GISEL-NEXT:    str x12, [sp, #56] ; 8-byte Spill
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    stp x4, x11, [sp, #240] ; 16-byte Folded Spill
-; GISEL-NEXT:    orr x2, x13, x2
-; GISEL-NEXT:    lsl x12, x10, x15
-; GISEL-NEXT:    lsl x5, x30, x15
-; GISEL-NEXT:    csel x16, x2, x16, eq
+; GISEL-NEXT:    orr x16, x28, x16
+; GISEL-NEXT:    lsl x22, x10, x14
+; GISEL-NEXT:    mov x11, x10
+; GISEL-NEXT:    ldp x10, x12, [x1, #112]
+; GISEL-NEXT:    csel x15, x16, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x11, [x1, #120]
-; GISEL-NEXT:    csel x2, xzr, x12, eq
+; GISEL-NEXT:    lsr x25, x2, x8
+; GISEL-NEXT:    lsr x23, x11, x8
+; GISEL-NEXT:    csel x16, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    lsr x21, x10, x14
-; GISEL-NEXT:    orr x4, x27, x2
-; GISEL-NEXT:    stp x10, x30, [sp, #264] ; 16-byte Folded Spill
-; GISEL-NEXT:    mov x10, x11
-; GISEL-NEXT:    csel x16, x4, x16, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x11, [sp, #280] ; 8-byte Spill
-; GISEL-NEXT:    csel x1, xzr, x5, eq
+; GISEL-NEXT:    mov x2, x24
+; GISEL-NEXT:    orr x16, x25, x16
+; GISEL-NEXT:    lsl x17, x10, x14
+; GISEL-NEXT:    lsl x27, x12, x14
+; GISEL-NEXT:    csel x16, x16, x15, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    lsr x6, x10, x8
+; GISEL-NEXT:    csel x15, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    lsl x11, x11, x15
-; GISEL-NEXT:    orr x1, x21, x1
-; GISEL-NEXT:    lsr x20, x30, x14
-; GISEL-NEXT:    lsr x6, x10, x14
-; GISEL-NEXT:    csel x1, x1, x16, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x10, [sp, #160] ; 8-byte Reload
-; GISEL-NEXT:    csel x30, xzr, x11, eq
+; GISEL-NEXT:    str x10, [sp, #264] ; 8-byte Spill
+; GISEL-NEXT:    orr x11, x23, x15
+; GISEL-NEXT:    lsr x4, x12, x8
+; GISEL-NEXT:    str x17, [sp, #48] ; 8-byte Spill
+; GISEL-NEXT:    csel x11, x11, x16, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    str x12, [sp, #152] ; 8-byte Spill
+; GISEL-NEXT:    csel x14, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    str x13, [sp, #296] ; 8-byte Spill
-; GISEL-NEXT:    orr x30, x20, x30
-; GISEL-NEXT:    ldp x13, x4, [sp, #128] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x1, x30, x1, eq
+; GISEL-NEXT:    orr x10, x6, x14
+; GISEL-NEXT:    ldp x17, x13, [sp, #136] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x10, x10, x11, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    str x12, [sp, #312] ; 8-byte Spill
-; GISEL-NEXT:    csel x1, x6, x1, eq
+; GISEL-NEXT:    csel x10, x4, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    ldr x12, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT:    csel x10, x10, x1, eq
+; GISEL-NEXT:    csel x10, x21, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x20, x11, [sp, #64] ; 16-byte Folded Spill
-; GISEL-NEXT:    str x10, [sp, #160] ; 8-byte Spill
-; GISEL-NEXT:    ldp x2, x10, [sp, #144] ; 16-byte Folded Reload
-; GISEL-NEXT:    ldp x17, x11, [sp, #112] ; 16-byte Folded Reload
-; GISEL-NEXT:    ldr x14, [sp, #104] ; 8-byte Reload
-; GISEL-NEXT:    mov x30, x7
-; GISEL-NEXT:    ldr x16, [sp, #80] ; 8-byte Reload
-; GISEL-NEXT:    stp x5, x25, [sp, #48] ; 16-byte Folded Spill
-; GISEL-NEXT:    csel x1, xzr, x10, eq
+; GISEL-NEXT:    mov x21, x20
+; GISEL-NEXT:    str x10, [sp, #272] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    ldr x10, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT:    orr x1, x19, x1
-; GISEL-NEXT:    str x21, [sp, #40] ; 8-byte Spill
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    orr x10, x26, x10
+; GISEL-NEXT:    ldp x15, x1, [sp, #104] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x27, [sp, #24] ; 8-byte Spill
-; GISEL-NEXT:    csel x19, xzr, x2, eq
+; GISEL-NEXT:    mov x19, x7
+; GISEL-NEXT:    csel x11, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x19, x4, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x26, x30
+; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    ldp x0, x12, [sp, #120] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x12, eq
+; GISEL-NEXT:    mov x24, x25
+; GISEL-NEXT:    csel x11, xzr, x30, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x19, x3, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x30, x4
+; GISEL-NEXT:    orr x11, x13, x11
+; GISEL-NEXT:    ldp x16, x14, [sp, #88] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x13, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x19, x11, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x12, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x17, eq
+; GISEL-NEXT:    csel x11, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x19, x14, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x7, eq
-; GISEL-NEXT:    ldp x15, x7, [sp, #88] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x11, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x19, x7, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x14, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x19, x22, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x3, x11
+; GISEL-NEXT:    ldr x3, [sp, #80] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x28, eq
+; GISEL-NEXT:    csel x11, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x19, x26, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x5, x11
+; GISEL-NEXT:    ldr x5, [sp, #72] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x23, eq
+; GISEL-NEXT:    csel x11, xzr, x5, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x19, x24, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x7, x11
+; GISEL-NEXT:    ldr x7, [sp, #64] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x15, eq
+; GISEL-NEXT:    csel x11, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x19, x16, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x20, x11
+; GISEL-NEXT:    ldr x20, [sp, #56] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x25, eq
-; GISEL-NEXT:    ldr x25, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT:    csel x11, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x19, x25, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    mov x28, x6
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x10, eq
+; GISEL-NEXT:    csel x11, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    ldr x10, [sp, #256] ; 8-byte Reload
-; GISEL-NEXT:    orr x19, x27, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x25, x11
+; GISEL-NEXT:    ldr x25, [sp, #48] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    ldr x5, [sp, #72] ; 8-byte Reload
-; GISEL-NEXT:    orr x19, x21, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    orr x19, x20, x19
-; GISEL-NEXT:    mov x20, x6
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x6, x11
+; GISEL-NEXT:    mov x6, x19
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, x6, x1, eq
+; GISEL-NEXT:    ldr x11, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x4, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    ldr x6, [sp, #64] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x10, x10, x1, eq
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x2, eq
+; GISEL-NEXT:    str x10, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT:    ldr x10, [sp, #40] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    str x10, [sp, #256] ; 8-byte Spill
-; GISEL-NEXT:    orr x1, x4, x1
-; GISEL-NEXT:    ldp x2, x21, [sp, #48] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    orr x10, x2, x10
+; GISEL-NEXT:    ldp x4, x2, [sp, #24] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x10, [sp, #232] ; 8-byte Reload
-; GISEL-NEXT:    csel x19, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    mov x12, x30
-; GISEL-NEXT:    orr x19, x3, x19
-; GISEL-NEXT:    mov x4, x13
-; GISEL-NEXT:    mov x3, x11
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x13, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x13, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    mov x13, x0
-; GISEL-NEXT:    orr x19, x11, x19
-; GISEL-NEXT:    mov x11, x14
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x12, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x17, eq
+; GISEL-NEXT:    csel x11, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x19, x14, x19
-; GISEL-NEXT:    mov x14, x15
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x30, eq
+; GISEL-NEXT:    csel x11, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    mov x30, x7
-; GISEL-NEXT:    orr x19, x7, x19
-; GISEL-NEXT:    mov x7, x22
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x14, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x0, x11
-; GISEL-NEXT:    orr x19, x22, x19
-; GISEL-NEXT:    mov x22, x28
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x2, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x28, eq
+; GISEL-NEXT:    csel x11, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    ldr x28, [sp, #40] ; 8-byte Reload
-; GISEL-NEXT:    orr x19, x26, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x4, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x23, eq
+; GISEL-NEXT:    csel x11, xzr, x5, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x19, x24, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x19, x11
+; GISEL-NEXT:    mov x19, x21
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x15, eq
+; GISEL-NEXT:    csel x11, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x19, x16, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    ldr x21, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x21, eq
+; GISEL-NEXT:    csel x11, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x19, x25, x19
-; GISEL-NEXT:    ldr x25, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x25, eq
+; GISEL-NEXT:    csel x11, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x19, x27, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    orr x19, x28, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    orr x19, x6, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x1, x20, x1, eq
+; GISEL-NEXT:    ldr x11, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x10, x10, x1, eq
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x10, [sp, #232] ; 8-byte Spill
-; GISEL-NEXT:    ldr x10, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, xzr, x10, eq
-; GISEL-NEXT:    ldr x10, [sp, #32] ; 8-byte Reload
+; GISEL-NEXT:    str x10, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x26, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x1, x10, x1
-; GISEL-NEXT:    ldr x10, [sp, #168] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    orr x10, x13, x10
+; GISEL-NEXT:    mov x13, x14
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x4, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x19, x3, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x12, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x17, eq
+; GISEL-NEXT:    csel x11, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x19, x11, x19
-; GISEL-NEXT:    mov x11, x7
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x19, x30, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x14, x11
+; GISEL-NEXT:    mov x14, x16
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x13, eq
+; GISEL-NEXT:    csel x11, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x19, x7, x19
-; GISEL-NEXT:    mov x7, x30
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x16, x2
+; GISEL-NEXT:    orr x11, x2, x11
+; GISEL-NEXT:    mov x2, x3
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x22, eq
+; GISEL-NEXT:    csel x11, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x22, x21
-; GISEL-NEXT:    orr x19, x26, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x3, x4
+; GISEL-NEXT:    orr x11, x4, x11
+; GISEL-NEXT:    mov x4, x5
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x23, eq
+; GISEL-NEXT:    csel x11, xzr, x5, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x19, x24, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x5, x6
+; GISEL-NEXT:    orr x11, x6, x11
+; GISEL-NEXT:    mov x6, x7
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x15, eq
+; GISEL-NEXT:    csel x11, xzr, x7, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x19, x16, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x7, x19
+; GISEL-NEXT:    orr x11, x19, x11
+; GISEL-NEXT:    mov x19, x20
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x21, eq
-; GISEL-NEXT:    ldr x21, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT:    csel x11, xzr, x20, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x19, x21, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x20, x21
+; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    mov x21, x22
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x25, eq
+; GISEL-NEXT:    csel x11, xzr, x22, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    mov x25, x0
-; GISEL-NEXT:    orr x19, x27, x19
-; GISEL-NEXT:    mov x27, x28
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x22, x24
+; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    mov x24, x25
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x25, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x19, x28, x19
-; GISEL-NEXT:    mov x28, x26
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    orr x19, x6, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x1, x20, x1, eq
+; GISEL-NEXT:    ldr x11, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x10, x10, x1, eq
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x4, eq
+; GISEL-NEXT:    str x10, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT:    csel x10, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    str x10, [sp, #304] ; 8-byte Spill
-; GISEL-NEXT:    orr x1, x3, x1
-; GISEL-NEXT:    mov x3, x12
-; GISEL-NEXT:    ldr x10, [sp, #176] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    orr x10, x12, x10
+; GISEL-NEXT:    mov x12, x15
+; GISEL-NEXT:    mov x17, x3
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x4, x27
-; GISEL-NEXT:    csel x19, xzr, x17, eq
+; GISEL-NEXT:    csel x11, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x19, x0, x19
-; GISEL-NEXT:    mov x0, x13
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    ldr x12, [sp, #16] ; 8-byte Reload
-; GISEL-NEXT:    orr x19, x30, x19
-; GISEL-NEXT:    mov x30, x23
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x15, x16
+; GISEL-NEXT:    orr x11, x13, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x13, eq
+; GISEL-NEXT:    csel x11, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    mov x13, x11
-; GISEL-NEXT:    orr x19, x11, x19
-; GISEL-NEXT:    mov x11, x0
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x16, x11
+; GISEL-NEXT:    mov x16, x2
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x19, x26, x19
-; GISEL-NEXT:    mov x26, x12
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x2, x4
+; GISEL-NEXT:    orr x11, x3, x11
+; GISEL-NEXT:    mov x3, x5
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x23, eq
+; GISEL-NEXT:    csel x11, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    mov x23, x24
-; GISEL-NEXT:    orr x19, x24, x19
-; GISEL-NEXT:    ldr x24, [sp, #312] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x4, x6
+; GISEL-NEXT:    orr x11, x5, x11
+; GISEL-NEXT:    mov x5, x7
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x15, eq
+; GISEL-NEXT:    csel x11, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    mov x15, x16
-; GISEL-NEXT:    orr x19, x16, x19
-; GISEL-NEXT:    mov x16, x22
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x6, x19
+; GISEL-NEXT:    orr x11, x7, x11
+; GISEL-NEXT:    mov x7, x20
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x22, eq
+; GISEL-NEXT:    csel x11, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    ldr x22, [sp, #24] ; 8-byte Reload
-; GISEL-NEXT:    orr x19, x21, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x19, x21
+; GISEL-NEXT:    orr x11, x20, x11
+; GISEL-NEXT:    mov x20, x22
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x24, eq
+; GISEL-NEXT:    csel x11, xzr, x21, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x19, x22, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    mov x21, x23
+; GISEL-NEXT:    orr x11, x22, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x19, x27, x19
-; GISEL-NEXT:    mov x27, x7
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x19, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    orr x19, x6, x19
-; GISEL-NEXT:    csel x1, x19, x1, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x1, x20, x1, eq
+; GISEL-NEXT:    ldr x11, [sp, #176] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x19, x10, x1, eq
+; GISEL-NEXT:    csel x26, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x10, [sp, #184] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x0, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    mov x17, x3
-; GISEL-NEXT:    orr x1, x25, x1
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    mov x0, x17
+; GISEL-NEXT:    orr x10, x1, x10
+; GISEL-NEXT:    mov x1, x3
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x3, eq
+; GISEL-NEXT:    csel x11, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x3, x7, x3
-; GISEL-NEXT:    mov x7, x30
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x11, x13, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x3, x13, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x11, x15, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x12, eq
+; GISEL-NEXT:    csel x11, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    mov x12, x13
-; GISEL-NEXT:    orr x3, x28, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x11, x17, x11
+; GISEL-NEXT:    mov x17, x2
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x30, eq
+; GISEL-NEXT:    csel x11, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    mov x30, x24
-; GISEL-NEXT:    orr x3, x23, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    mov x2, x4
+; GISEL-NEXT:    orr x11, x3, x11
+; GISEL-NEXT:    mov x3, x5
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x14, eq
+; GISEL-NEXT:    csel x11, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x3, x15, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    mov x4, x6
+; GISEL-NEXT:    orr x11, x5, x11
+; GISEL-NEXT:    mov x5, x7
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x16, eq
+; GISEL-NEXT:    csel x11, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x3, x21, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    mov x6, x19
+; GISEL-NEXT:    orr x11, x7, x11
+; GISEL-NEXT:    mov x7, x23
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x24, eq
+; GISEL-NEXT:    csel x11, xzr, x19, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    mov x24, x22
-; GISEL-NEXT:    orr x3, x22, x3
-; GISEL-NEXT:    mov x22, x23
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x11, x20, x11
+; GISEL-NEXT:    ldp x20, x19, [sp, #352] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x3, x4, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    orr x3, x6, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x1, x20, x1, eq
+; GISEL-NEXT:    ldr x11, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x10, x10, x1, eq
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x17, eq
-; GISEL-NEXT:    cmp x9, #0
 ; GISEL-NEXT:    str x10, [sp, #184] ; 8-byte Spill
-; GISEL-NEXT:    orr x17, x27, x0
-; GISEL-NEXT:    ldr x10, [sp, #192] ; 8-byte Reload
-; GISEL-NEXT:    csel x17, x17, xzr, eq
+; GISEL-NEXT:    csel x10, xzr, x12, eq
+; GISEL-NEXT:    cmp x9, #0
+; GISEL-NEXT:    orr x10, x13, x10
+; GISEL-NEXT:    mov x13, x1
+; GISEL-NEXT:    mov x12, x17
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x11, eq
+; GISEL-NEXT:    csel x11, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x0, x13, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    orr x11, x15, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x26, eq
+; GISEL-NEXT:    csel x11, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x0, x28, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    orr x11, x0, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x7, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x0, x23, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    mov x17, x2
+; GISEL-NEXT:    orr x11, x1, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x14, eq
+; GISEL-NEXT:    csel x11, xzr, x2, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x0, x15, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    mov x2, x3
+; GISEL-NEXT:    orr x11, x3, x11
+; GISEL-NEXT:    mov x3, x4
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x16, eq
+; GISEL-NEXT:    csel x11, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x0, x21, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    mov x4, x5
+; GISEL-NEXT:    orr x11, x5, x11
+; GISEL-NEXT:    mov x5, x6
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x30, eq
+; GISEL-NEXT:    csel x11, xzr, x6, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x0, x24, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    mov x6, x22
+; GISEL-NEXT:    orr x11, x22, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x0, x4, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    orr x0, x6, x0
-; GISEL-NEXT:    csel x17, x0, x17, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    mov x0, x7
-; GISEL-NEXT:    csel x17, x20, x17, eq
+; GISEL-NEXT:    ldr x11, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x17, xzr, x17, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x17, x10, x17, eq
+; GISEL-NEXT:    csel x1, x11, x10, 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 x10, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x12, x12, x13
-; GISEL-NEXT:    csel x12, x12, xzr, eq
+; GISEL-NEXT:    mov x14, x17
+; GISEL-NEXT:    orr x10, x15, x10
+; GISEL-NEXT:    mov x15, x3
+; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x26, eq
+; GISEL-NEXT:    csel x11, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x13, x28, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x11, x0, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x7, eq
+; GISEL-NEXT:    csel x11, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x13, x22, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x11, x13, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x14, eq
+; GISEL-NEXT:    csel x11, xzr, x17, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x13, x15, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x11, x2, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x16, eq
+; GISEL-NEXT:    csel x11, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x13, x21, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    mov x3, x4
+; GISEL-NEXT:    orr x11, x4, x11
+; GISEL-NEXT:    mov x4, x5
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x30, eq
+; GISEL-NEXT:    csel x11, xzr, x5, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x13, x24, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x11, x22, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x13, x4, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x11, x7, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    orr x13, x6, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x11, x28, x11
+; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    csel x12, x20, x12, eq
+; GISEL-NEXT:    ldr x11, [sp, #200] ; 8-byte Reload
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x12, xzr, x12, eq
+; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x12, x10, x12, eq
+; GISEL-NEXT:    csel x17, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x26, eq
+; GISEL-NEXT:    csel x10, xzr, x16, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x10, x28, x11
-; GISEL-NEXT:    ldp x26, x25, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT:    mov x16, x3
+; GISEL-NEXT:    orr x10, x0, x10
 ; GISEL-NEXT:    csel x10, x10, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x11, x23, x11
-; GISEL-NEXT:    ldp x28, x27, [sp, #320] ; 16-byte Folded Reload
+; 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:    cmp x9, #2
-; GISEL-NEXT:    orr x11, x15, x11
+; GISEL-NEXT:    orr x11, x2, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x16, eq
+; GISEL-NEXT:    csel x11, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x11, x21, x11
+; GISEL-NEXT:    orr x11, x3, x11
+; GISEL-NEXT:    mov x3, x4
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x30, eq
+; GISEL-NEXT:    csel x11, xzr, x4, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x11, x24, x11
+; GISEL-NEXT:    orr x11, x22, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x2, eq
+; GISEL-NEXT:    csel x11, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x11, x4, x11
+; GISEL-NEXT:    orr x11, x23, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x5, eq
+; GISEL-NEXT:    csel x11, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    orr x11, x6, x11
+; GISEL-NEXT:    orr x11, x28, x11
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    cmp x9, #7
 ; GISEL-NEXT:    ldr x11, [sp, #208] ; 8-byte Reload
-; GISEL-NEXT:    csel x10, x20, x10, eq
+; GISEL-NEXT:    csel x10, x30, x10, eq
 ; GISEL-NEXT:    cmp x9, #8
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #9
@@ -3265,38 +3251,38 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x8, #0
 ; GISEL-NEXT:    csel x10, x11, x10, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x11, xzr, x0, eq
+; GISEL-NEXT:    csel x11, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x11, x23, x11
+; GISEL-NEXT:    orr x11, x13, x11
 ; GISEL-NEXT:    csel x11, x11, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x13, x15, x13
-; GISEL-NEXT:    csel x11, x13, x11, eq
+; GISEL-NEXT:    orr x12, x2, x12
+; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x16, eq
+; GISEL-NEXT:    csel x12, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x13, x21, x13
-; GISEL-NEXT:    csel x11, x13, x11, eq
+; GISEL-NEXT:    orr x12, x16, x12
+; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x30, eq
+; GISEL-NEXT:    csel x12, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x13, x24, x13
-; GISEL-NEXT:    csel x11, x13, x11, eq
+; GISEL-NEXT:    orr x12, x6, x12
+; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x2, eq
+; GISEL-NEXT:    csel x12, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x13, x4, x13
-; GISEL-NEXT:    csel x11, x13, x11, eq
+; GISEL-NEXT:    orr x12, x23, x12
+; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x5, eq
+; GISEL-NEXT:    csel x12, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    orr x13, x6, x13
-; GISEL-NEXT:    csel x11, x13, x11, eq
+; GISEL-NEXT:    orr x12, x28, x12
+; GISEL-NEXT:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    ldr x13, [sp, #216] ; 8-byte Reload
-; GISEL-NEXT:    csel x11, x20, x11, eq
+; GISEL-NEXT:    ldr x12, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT:    csel x11, x30, x11, eq
 ; GISEL-NEXT:    cmp x9, #7
 ; GISEL-NEXT:    csel x11, xzr, x11, eq
 ; GISEL-NEXT:    cmp x9, #8
@@ -3316,266 +3302,268 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
 ; 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:    csel x11, x12, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x14, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x13, x15, x13
-; GISEL-NEXT:    csel x13, x13, xzr, eq
+; GISEL-NEXT:    ldr x14, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x2, x12
+; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x16, eq
+; GISEL-NEXT:    stp x17, x10, [x14, #56]
+; GISEL-NEXT:    csel x13, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x0, x21, x0
-; GISEL-NEXT:    csel x13, x0, x13, eq
+; GISEL-NEXT:    orr x13, x16, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x30, eq
+; GISEL-NEXT:    csel x13, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x0, x24, x0
-; GISEL-NEXT:    csel x13, x0, x13, eq
+; GISEL-NEXT:    orr x13, x22, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x2, eq
+; GISEL-NEXT:    csel x13, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x0, x4, x0
-; GISEL-NEXT:    csel x13, x0, x13, eq
+; GISEL-NEXT:    orr x13, x23, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x5, eq
+; GISEL-NEXT:    csel x13, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    orr x0, x6, x0
-; GISEL-NEXT:    csel x13, x0, x13, eq
+; GISEL-NEXT:    orr x13, x28, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    ldr x0, [sp, #224] ; 8-byte Reload
-; GISEL-NEXT:    csel x13, x20, x13, eq
+; GISEL-NEXT:    ldr x13, [sp, #232] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x30, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x13, xzr, x13, eq
+; GISEL-NEXT:    csel x12, xzr, 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:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x13, x0, x13, eq
+; GISEL-NEXT:    csel x13, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x16, eq
+; GISEL-NEXT:    csel x12, xzr, x15, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    ldr x16, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT:    orr x0, x21, x0
-; GISEL-NEXT:    ldp x22, x21, [sp, #368] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x0, x0, xzr, eq
+; GISEL-NEXT:    stp x11, x13, [x14, #72]
+; GISEL-NEXT:    orr x12, x16, x12
+; GISEL-NEXT:    ldp x15, x16, [sp, #264] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x30, eq
+; GISEL-NEXT:    csel x0, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x1, x24, x1
-; GISEL-NEXT:    csel x0, x1, x0, eq
+; GISEL-NEXT:    orr x0, x22, x0
+; GISEL-NEXT:    str x16, [x14]
+; GISEL-NEXT:    ldr x16, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x0, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x2, eq
+; GISEL-NEXT:    csel x0, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x1, x4, x1
-; GISEL-NEXT:    csel x0, x1, x0, eq
+; GISEL-NEXT:    str x16, [x14, #8]
+; GISEL-NEXT:    orr x0, x23, x0
+; GISEL-NEXT:    ldr x16, [sp, #160] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x0, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x5, eq
+; GISEL-NEXT:    csel x0, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    orr x1, x6, x1
-; GISEL-NEXT:    csel x0, x1, x0, eq
+; GISEL-NEXT:    str x16, [x14, #16]
+; GISEL-NEXT:    orr x0, x28, x0
+; GISEL-NEXT:    ldr x16, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x0, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    ldr x1, [sp, #240] ; 8-byte Reload
-; GISEL-NEXT:    csel x0, x20, x0, eq
+; GISEL-NEXT:    ldr x0, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x30, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    stp x16, x26, [x14, #24]
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    ldr x16, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    stp x16, x1, [x14, #40]
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x0, xzr, x0, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x0, x1, x0, eq
+; GISEL-NEXT:    csel x0, x0, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x30, eq
+; GISEL-NEXT:    csel x12, xzr, x3, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x1, x24, x1
-; GISEL-NEXT:    ldp x29, x30, [sp, #400] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    orr x12, x22, x12
+; GISEL-NEXT:    ldp x22, x21, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x2, eq
+; GISEL-NEXT:    csel x3, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x3, x4, x3
-; GISEL-NEXT:    ldp x24, x23, [sp, #352] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x3, x23, x3
+; GISEL-NEXT:    ldp x26, x25, [sp, #304] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x12, x3, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x5, eq
+; GISEL-NEXT:    csel x3, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    orr x3, x6, x3
-; GISEL-NEXT:    csel x1, x3, x1, eq
+; GISEL-NEXT:    orr x3, x28, x3
+; GISEL-NEXT:    csel x12, x3, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
 ; GISEL-NEXT:    ldr x3, [sp, #248] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x20, x1, eq
+; GISEL-NEXT:    csel x12, x30, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x3, x3, x1, eq
+; GISEL-NEXT:    csel x3, x3, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x2, eq
+; GISEL-NEXT:    csel x12, xzr, x24, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x1, x4, x1
-; GISEL-NEXT:    ldr x4, [sp, #160] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x1, xzr, eq
+; GISEL-NEXT:    stp x0, x3, [x14, #88]
+; GISEL-NEXT:    orr x12, x23, x12
+; GISEL-NEXT:    ldp x24, x23, [sp, #320] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x2, xzr, x5, eq
+; GISEL-NEXT:    csel x2, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    orr x2, x6, x2
-; GISEL-NEXT:    csel x1, x2, x1, eq
+; GISEL-NEXT:    orr x2, x28, x2
+; GISEL-NEXT:    csel x12, x2, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    ldr x2, [sp, #264] ; 8-byte Reload
-; GISEL-NEXT:    csel x1, x20, x1, eq
+; GISEL-NEXT:    ldr x2, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x30, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x1, xzr, x1, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x2, x2, x1, eq
+; GISEL-NEXT:    csel x2, x2, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x1, [sp, #256] ; 8-byte Reload
-; GISEL-NEXT:    csel x15, xzr, x5, eq
+; GISEL-NEXT:    csel x12, xzr, x27, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    orr x15, x6, x15
-; GISEL-NEXT:    csel x15, x15, xzr, eq
+; GISEL-NEXT:    orr x12, x28, x12
+; GISEL-NEXT:    ldp x28, x27, [sp, #288] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x12, x12, xzr, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    csel x15, x20, x15, eq
+; GISEL-NEXT:    csel x12, x30, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #12
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #13
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #14
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #15
-; GISEL-NEXT:    csel x15, xzr, x15, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x15, x16, x15, eq
+; GISEL-NEXT:    csel x15, x15, x12, eq
 ; GISEL-NEXT:    cmp x9, #0
-; GISEL-NEXT:    ldr x16, [sp, #288] ; 8-byte Reload
-; GISEL-NEXT:    csel x14, x20, xzr, eq
+; GISEL-NEXT:    csel x12, x30, xzr, eq
 ; GISEL-NEXT:    cmp x9, #1
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    stp x2, x15, [x14, #104]
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #2
-; GISEL-NEXT:    stp x17, x12, [x16, #48]
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #3
-; GISEL-NEXT:    stp x10, x11, [x16, #64]
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #4
-; GISEL-NEXT:    stp x4, x1, [x16]
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #5
-; GISEL-NEXT:    ldr x4, [sp, #232] ; 8-byte Reload
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #6
-; GISEL-NEXT:    ldr x1, [sp, #304] ; 8-byte Reload
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #7
-; GISEL-NEXT:    stp x13, x0, [x16, #80]
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #8
-; GISEL-NEXT:    stp x4, x1, [x16, #16]
-; GISEL-NEXT:    csel x14, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #9
-; GISEL-NEXT:    ldr x1, [sp, #184] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, xzr, x14, eq
+; GISEL-NEXT:    csel x12, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #10
-; GISEL-NEXT:    stp x3, x2, [x16, #96]
 ; GISEL-NEXT:    csel x10, xzr, x12, eq
 ; GISEL-NEXT:    cmp x9, #11
-; GISEL-NEXT:    stp x19, x1, [x16, #32]
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
 ; GISEL-NEXT:    cmp x9, #12
 ; GISEL-NEXT:    csel x10, xzr, x10, eq
@@ -3586,11 +3574,11 @@ define void @test_lshr_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x9, #15
 ; GISEL-NEXT:    csel x9, xzr, x10, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    ldr x8, [sp, #280] ; 8-byte Reload
-; GISEL-NEXT:    ldp x20, x19, [sp, #384] ; 16-byte Folded Reload
+; GISEL-NEXT:    ldr x8, [sp, #152] ; 8-byte Reload
+; GISEL-NEXT:    ldp x29, x30, [sp, #368] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x8, x8, x9, eq
-; GISEL-NEXT:    stp x15, x8, [x16, #112]
-; GISEL-NEXT:    add sp, sp, #416
+; GISEL-NEXT:    str x8, [x14, #120]
+; GISEL-NEXT:    add sp, sp, #384
 ; GISEL-NEXT:    ret
 entry:
   %input_val = load i1024, ptr %input, align 128
@@ -3755,823 +3743,808 @@ 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, #256] ; 8-byte Spill
 ; GISEL-NEXT:    mov w8, w2
+; GISEL-NEXT:    ldp x12, x17, [x1]
 ; 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:    ldr x28, [x1, #120]
+; GISEL-NEXT:    and x10, x8, #0x3f
+; GISEL-NEXT:    ldr x27, [x1, #120]
+; GISEL-NEXT:    sub x14, x9, x10
+; GISEL-NEXT:    ldp x16, x15, [x1, #16]
+; GISEL-NEXT:    lsl x9, x17, x14
+; GISEL-NEXT:    stp x17, x12, [sp, #168] ; 16-byte Folded Spill
 ; GISEL-NEXT:    lsr x10, x8, #6
-; GISEL-NEXT:    ldp x16, x17, [x1, #16]
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsl x9, x0, x14
-; GISEL-NEXT:    lsr x12, x7, x15
-; GISEL-NEXT:    asr x11, x28, #63
-; GISEL-NEXT:    lsr x20, x0, x15
-; GISEL-NEXT:    str x0, [sp, #224] ; 8-byte Spill
-; GISEL-NEXT:    lsl x27, x28, x14
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    lsr x12, x12, x8
+; GISEL-NEXT:    asr x11, x27, #63
 ; GISEL-NEXT:    csel x9, xzr, x9, eq
-; GISEL-NEXT:    lsl x19, x16, x14
+; GISEL-NEXT:    lsl x24, x16, x14
 ; GISEL-NEXT:    cmp x10, #0
 ; GISEL-NEXT:    orr x9, x12, x9
-; GISEL-NEXT:    str x16, [sp, #200] ; 8-byte Spill
-; GISEL-NEXT:    lsr x2, x16, x15
+; GISEL-NEXT:    lsr x6, x17, x8
+; GISEL-NEXT:    lsl x26, x15, x14
 ; GISEL-NEXT:    csel x9, x9, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsl x30, x17, x14
-; GISEL-NEXT:    csel x12, xzr, x19, eq
+; GISEL-NEXT:    lsr x3, x16, x8
+; GISEL-NEXT:    csel x12, xzr, x24, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    lsr x25, x17, x15
-; GISEL-NEXT:    orr x12, x20, x12
-; GISEL-NEXT:    ldp x13, x16, [x1, #32]
+; GISEL-NEXT:    lsr x25, x15, x8
+; GISEL-NEXT:    orr x12, x6, x12
+; GISEL-NEXT:    ldp x13, x17, [x1, #32]
 ; GISEL-NEXT:    csel x9, x12, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x17, [sp, #176] ; 8-byte Spill
-; GISEL-NEXT:    csel x12, xzr, x30, eq
+; GISEL-NEXT:    str x15, [sp, #224] ; 8-byte Spill
+; GISEL-NEXT:    csel x12, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    str x2, [sp, #80] ; 8-byte Spill
-; GISEL-NEXT:    lsl x24, x13, x14
-; GISEL-NEXT:    orr x12, x2, x12
-; GISEL-NEXT:    str x13, [sp, #160] ; 8-byte Spill
+; GISEL-NEXT:    str x16, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT:    lsl x20, x13, x14
+; GISEL-NEXT:    orr x12, x3, x12
+; GISEL-NEXT:    stp x13, x17, [sp, #184] ; 16-byte Folded 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 x17, x16, x14
+; GISEL-NEXT:    lsr x2, x13, x8
+; GISEL-NEXT:    csel x12, xzr, x20, eq
+; GISEL-NEXT:    lsl x16, x17, x14
 ; GISEL-NEXT:    cmp x10, #3
 ; GISEL-NEXT:    orr x12, x25, x12
-; GISEL-NEXT:    ldp x13, x0, [x1, #48]
+; GISEL-NEXT:    ldp x15, x13, [x1, #48]
 ; GISEL-NEXT:    csel x9, x12, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x17, [sp, #120] ; 8-byte Spill
-; GISEL-NEXT:    csel x12, xzr, x17, eq
+; GISEL-NEXT:    str x0, [sp, #296] ; 8-byte Spill
+; GISEL-NEXT:    csel x12, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    str x16, [sp, #136] ; 8-byte Spill
-; GISEL-NEXT:    lsl x17, x13, x14
-; GISEL-NEXT:    orr x12, x21, x12
-; GISEL-NEXT:    lsr x16, x16, x15
+; GISEL-NEXT:    stp x2, x16, [sp, #152] ; 16-byte Folded Spill
+; GISEL-NEXT:    lsl x0, x15, x14
+; GISEL-NEXT:    orr x12, x2, x12
+; GISEL-NEXT:    lsr x2, x17, x8
 ; GISEL-NEXT:    csel x9, x12, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x13, x0, [sp, #144] ; 16-byte Folded Spill
-; GISEL-NEXT:    csel x12, xzr, x17, eq
-; GISEL-NEXT:    str x16, [sp, #112] ; 8-byte Spill
-; GISEL-NEXT:    lsr x6, x13, x15
-; GISEL-NEXT:    orr x12, x16, x12
-; GISEL-NEXT:    ldp x16, x13, [x1, #64]
-; GISEL-NEXT:    str x17, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT:    mov x16, x15
+; GISEL-NEXT:    csel x12, xzr, x0, eq
+; GISEL-NEXT:    stp x15, x13, [sp, #200] ; 16-byte Folded Spill
+; GISEL-NEXT:    lsl x17, x13, x14
+; GISEL-NEXT:    ldp x15, x5, [x1, #64]
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    lsl x17, x0, x14
+; GISEL-NEXT:    orr x12, x2, x12
+; GISEL-NEXT:    lsr x16, x16, x8
+; GISEL-NEXT:    stp x2, x0, [sp, #312] ; 16-byte Folded Spill
 ; GISEL-NEXT:    csel x9, x12, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x28, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT:    lsr x0, x13, x8
 ; GISEL-NEXT:    csel x12, xzr, x17, eq
-; GISEL-NEXT:    lsl x2, x16, x14
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x12, x6, x12
-; GISEL-NEXT:    str x16, [sp, #168] ; 8-byte Spill
-; GISEL-NEXT:    lsl x3, x11, x14
-; GISEL-NEXT:    stp x2, x17, [sp, #288] ; 16-byte Folded Spill
-; GISEL-NEXT:    mov x17, x16
+; GISEL-NEXT:    lsl x22, x15, x14
+; GISEL-NEXT:    orr x12, x16, x12
+; GISEL-NEXT:    str x16, [sp, #304] ; 8-byte Spill
+; GISEL-NEXT:    lsl x16, x5, x14
 ; GISEL-NEXT:    csel x9, x12, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x16, x0, x15
-; GISEL-NEXT:    str x13, [sp, #184] ; 8-byte Spill
-; GISEL-NEXT:    csel x12, xzr, x2, eq
+; GISEL-NEXT:    lsr x13, x15, x8
+; GISEL-NEXT:    csel x12, xzr, x22, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    lsr x0, x17, x15
-; GISEL-NEXT:    orr x12, x16, x12
-; GISEL-NEXT:    str x30, [sp, #40] ; 8-byte Spill
+; GISEL-NEXT:    str x15, [sp, #216] ; 8-byte Spill
+; GISEL-NEXT:    orr x12, x0, x12
+; GISEL-NEXT:    ldp x4, x7, [x1, #80]
 ; GISEL-NEXT:    csel x9, x12, x9, eq
-; GISEL-NEXT:    lsl x12, x13, x14
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x0, [sp, #104] ; 8-byte Spill
-; GISEL-NEXT:    stp x12, x16, [sp, #272] ; 16-byte Folded Spill
-; GISEL-NEXT:    mov x16, x13
-; GISEL-NEXT:    csel x17, xzr, x12, eq
-; GISEL-NEXT:    ldp x13, x5, [x1, #80]
+; GISEL-NEXT:    str x17, [sp, #144] ; 8-byte Spill
+; GISEL-NEXT:    csel x15, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    orr x17, x0, x17
-; GISEL-NEXT:    stp x25, x24, [sp, #8] ; 16-byte Folded Spill
-; GISEL-NEXT:    csel x17, x17, x9, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x9, x16, x15
-; GISEL-NEXT:    lsl x0, x13, x14
-; GISEL-NEXT:    str x13, [sp, #192] ; 8-byte Spill
-; GISEL-NEXT:    lsl x23, x5, x14
-; GISEL-NEXT:    lsr x12, x13, x15
-; GISEL-NEXT:    csel x4, xzr, x0, eq
-; GISEL-NEXT:    stp x9, x0, [sp, #88] ; 16-byte Folded Spill
+; GISEL-NEXT:    ldr x28, [x1, #112]
+; GISEL-NEXT:    orr x15, x13, x15
+; GISEL-NEXT:    lsl x19, x4, x14
+; GISEL-NEXT:    stp x5, x4, [sp, #232] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x15, x15, x9, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    lsr x9, x5, x8
+; GISEL-NEXT:    csel x17, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    orr x4, x9, x4
-; GISEL-NEXT:    ldp x9, x13, [x1, #96]
-; GISEL-NEXT:    csel x17, x4, x17, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x23, [sp, #264] ; 8-byte Spill
-; GISEL-NEXT:    csel x4, xzr, x23, eq
+; GISEL-NEXT:    lsl x21, x7, x14
+; GISEL-NEXT:    orr x17, x9, x17
+; GISEL-NEXT:    lsr x30, x4, x8
+; GISEL-NEXT:    str x7, [sp, #256] ; 8-byte Spill
+; GISEL-NEXT:    ldp x5, x4, [x1, #96]
+; GISEL-NEXT:    csel x15, x17, x15, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    lsr x7, x7, x8
+; GISEL-NEXT:    str x9, [sp, #136] ; 8-byte Spill
+; GISEL-NEXT:    csel x17, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    orr x4, x12, x4
-; GISEL-NEXT:    lsl x16, x9, x14
-; GISEL-NEXT:    stp x5, x9, [sp, #208] ; 16-byte Folded Spill
-; GISEL-NEXT:    csel x17, x4, x17, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x16, x12, [sp, #64] ; 16-byte Folded Spill
-; GISEL-NEXT:    mov x12, x9
-; GISEL-NEXT:    lsr x9, x5, x15
-; GISEL-NEXT:    csel x4, xzr, x16, eq
-; GISEL-NEXT:    lsl x16, x13, x14
+; GISEL-NEXT:    stp x28, x27, [sp, #280] ; 16-byte Folded Spill
+; GISEL-NEXT:    orr x17, x30, x17
+; GISEL-NEXT:    lsl x23, x5, x14
+; GISEL-NEXT:    lsl x9, x4, x14
+; GISEL-NEXT:    csel x15, x17, x15, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    lsr x12, x5, x8
+; GISEL-NEXT:    csel x17, xzr, x23, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    orr x4, x9, x4
-; GISEL-NEXT:    lsr x12, x12, x15
-; GISEL-NEXT:    ldr x5, [sp, #88] ; 8-byte Reload
-; GISEL-NEXT:    stp x16, x9, [sp, #48] ; 16-byte Folded Spill
-; GISEL-NEXT:    ldr x9, [x1, #112]
-; GISEL-NEXT:    csel x17, x4, x17, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x1, xzr, x16, eq
-; GISEL-NEXT:    lsl x16, x9, x14
+; GISEL-NEXT:    stp x5, x4, [sp, #264] ; 16-byte Folded Spill
+; GISEL-NEXT:    orr x17, x7, x17
+; GISEL-NEXT:    mov x5, x9
+; GISEL-NEXT:    stp x3, x26, [sp, #80] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x15, x17, x15, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    stp x25, x20, [sp, #48] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x17, xzr, x9, eq
+; GISEL-NEXT:    lsl x9, x28, x14
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    orr x1, x12, x1
-; GISEL-NEXT:    stp x13, x9, [sp, #232] ; 16-byte Folded Spill
-; GISEL-NEXT:    stp x16, x12, [sp, #320] ; 16-byte Folded Spill
-; GISEL-NEXT:    mov x12, x9
-; GISEL-NEXT:    csel x1, x1, x17, eq
+; GISEL-NEXT:    orr x17, x12, x17
+; GISEL-NEXT:    stp x19, x0, [sp, #32] ; 16-byte Folded Spill
+; GISEL-NEXT:    stp x9, x12, [sp, #120] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x15, x17, x15, 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:    lsr x12, x4, x8
+; GISEL-NEXT:    csel x17, xzr, x9, eq
 ; GISEL-NEXT:    cmp x10, #13
-; 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:    lsl x9, x27, x14
+; GISEL-NEXT:    mov x4, x19
+; GISEL-NEXT:    str x22, [sp, #72] ; 8-byte Spill
+; GISEL-NEXT:    orr x1, x12, x17
+; GISEL-NEXT:    str x12, [sp, #112] ; 8-byte Spill
+; GISEL-NEXT:    lsr x12, x28, x8
+; GISEL-NEXT:    csel x15, x1, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    lsr x22, x9, x15
-; GISEL-NEXT:    csel x28, xzr, x27, eq
+; GISEL-NEXT:    mov x1, x9
+; GISEL-NEXT:    csel x28, xzr, x9, eq
+; GISEL-NEXT:    str x12, [sp, #104] ; 8-byte Spill
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    orr x28, x26, x28
-; GISEL-NEXT:    ldp x0, x16, [sp, #112] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x12, x28, x13, eq
+; GISEL-NEXT:    orr x28, x12, x28
+; GISEL-NEXT:    lsl x12, x11, x14
+; GISEL-NEXT:    lsr x14, x27, x8
+; GISEL-NEXT:    csel x28, x28, x15, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x22, x3, [sp, #24] ; 16-byte Folded Spill
-; GISEL-NEXT:    csel x28, xzr, x3, eq
+; GISEL-NEXT:    ldr x9, [sp, #176] ; 8-byte Reload
+; GISEL-NEXT:    csel x27, xzr, x12, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    orr x28, x22, x28
-; GISEL-NEXT:    ldp x2, x13, [sp, #296] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, x28, x12, eq
+; GISEL-NEXT:    str x14, [sp, #96] ; 8-byte Spill
+; GISEL-NEXT:    orr x27, x14, x27
+; GISEL-NEXT:    mov x14, x5
+; GISEL-NEXT:    str x23, [sp, #328] ; 8-byte Spill
+; GISEL-NEXT:    csel x27, x27, x28, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    mov x28, x24
-; GISEL-NEXT:    csel x9, x7, x9, eq
+; GISEL-NEXT:    ldr x28, [sp, #144] ; 8-byte Reload
+; GISEL-NEXT:    csel x9, x9, x27, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x7, [sp, #80] ; 8-byte Reload
-; GISEL-NEXT:    str x9, [sp, #128] ; 8-byte Spill
-; GISEL-NEXT:    csel x9, xzr, x19, eq
+; GISEL-NEXT:    mov x27, x25
+; GISEL-NEXT:    csel x24, xzr, x24, eq
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    orr x9, x20, x9
-; GISEL-NEXT:    ldr x12, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x9, x11, eq
+; GISEL-NEXT:    str x9, [sp, #176] ; 8-byte Spill
+; GISEL-NEXT:    orr x6, x6, x24
+; GISEL-NEXT:    str x21, [sp, #64] ; 8-byte Spill
+; GISEL-NEXT:    csel x6, x6, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x30, eq
+; GISEL-NEXT:    stp x30, x16, [sp, #16] ; 16-byte Folded Spill
+; GISEL-NEXT:    csel x24, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    mov x30, x25
-; GISEL-NEXT:    orr x20, x7, x20
-; GISEL-NEXT:    ldp x4, x19, [sp, #96] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
-; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x24, eq
+; GISEL-NEXT:    mov x26, x20
+; GISEL-NEXT:    orr x24, x3, x24
+; GISEL-NEXT:    ldr x3, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
+; GISEL-NEXT:    tst x8, #0x3f
+; GISEL-NEXT:    csel x24, xzr, x20, eq
+; GISEL-NEXT:    ldp x20, x2, [sp, #152] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x24, x25, x24
 ; 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:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x16, eq
+; GISEL-NEXT:    csel x24, xzr, x2, eq
+; GISEL-NEXT:    ldp x25, x9, [sp, #312] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x24, x20, x24
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x20, x21, x20
-; GISEL-NEXT:    ldp x15, x14, [sp, #64] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x13, eq
+; GISEL-NEXT:    csel x24, xzr, x9, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x20, x0, x20
-; GISEL-NEXT:    ldp x1, x17, [sp, #48] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x25, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x2, eq
+; GISEL-NEXT:    csel x24, xzr, x28, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x20, x6, x20
-; GISEL-NEXT:    ldp x21, x6, [sp, #280] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x3, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x6, eq
+; GISEL-NEXT:    csel x24, xzr, x22, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x20, x21, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x0, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x12, eq
+; GISEL-NEXT:    csel x24, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    orr x20, x19, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x13, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x4, eq
+; GISEL-NEXT:    csel x24, xzr, x19, eq
+; GISEL-NEXT:    ldp x15, x19, [sp, #128] ; 16-byte Folded Reload
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    orr x20, x5, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x19, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x23, eq
+; GISEL-NEXT:    csel x24, xzr, x21, 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:    mov x21, x12
+; GISEL-NEXT:    orr x24, x30, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x15, eq
+; GISEL-NEXT:    csel x24, xzr, x23, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    orr x20, x17, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    mov x23, x7
+; GISEL-NEXT:    orr x24, x7, x24
+; GISEL-NEXT:    ldp x22, x7, [sp, #96] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x1, eq
+; GISEL-NEXT:    csel x24, xzr, x5, eq
+; GISEL-NEXT:    ldp x5, x17, [sp, #112] ; 16-byte Folded Reload
+; GISEL-NEXT:    orr x24, x15, x24
 ; 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:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x20, eq
+; GISEL-NEXT:    csel x24, xzr, x17, 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:    orr x24, x5, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x27, eq
+; GISEL-NEXT:    csel x24, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    orr x20, x26, x20
-; GISEL-NEXT:    ldr x26, [sp, #264] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x7, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x3, eq
+; GISEL-NEXT:    csel x24, xzr, x12, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    ldr x3, [sp, #224] ; 8-byte Reload
-; GISEL-NEXT:    orr x20, x22, x20
-; GISEL-NEXT:    mov x22, x23
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    ldr x12, [sp, #168] ; 8-byte Reload
+; GISEL-NEXT:    orr x24, x22, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    csel x12, x12, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x3, x16
-; GISEL-NEXT:    str x9, [sp, #224] ; 8-byte Spill
-; GISEL-NEXT:    ldr x9, [sp, #40] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, xzr, x9, eq
+; GISEL-NEXT:    str x12, [sp, #168] ; 8-byte Spill
+; GISEL-NEXT:    ldr x12, [sp, #88] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, xzr, x12, eq
+; GISEL-NEXT:    ldr x12, [sp, #80] ; 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:    orr x6, x12, x6
+; GISEL-NEXT:    mov x12, x13
+; GISEL-NEXT:    csel x6, x6, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x28, eq
+; GISEL-NEXT:    csel x24, xzr, x26, 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:    orr x24, x27, x24
+; GISEL-NEXT:    mov x27, x16
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x16, eq
+; GISEL-NEXT:    csel x24, xzr, x2, 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:    orr x24, x20, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x13, eq
+; GISEL-NEXT:    csel x24, xzr, x9, 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:    orr x24, x25, x24
+; GISEL-NEXT:    ldp x26, x9, [sp, #64] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x2, eq
+; GISEL-NEXT:    mov x25, x19
+; GISEL-NEXT:    csel x24, xzr, x28, 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:    orr x24, x3, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x6, eq
+; GISEL-NEXT:    csel x24, xzr, x9, 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:    orr x24, x0, x24
+; GISEL-NEXT:    mov x0, x9
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x12, eq
+; GISEL-NEXT:    csel x24, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    ldr x12, [sp, #200] ; 8-byte Reload
-; GISEL-NEXT:    orr x20, x19, x20
-; GISEL-NEXT:    mov x19, x27
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    mov x16, x20
+; GISEL-NEXT:    orr x24, x13, x24
+; GISEL-NEXT:    ldr x13, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x4, eq
+; GISEL-NEXT:    csel x24, xzr, x4, 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:    orr x24, x19, x24
+; GISEL-NEXT:    mov x19, x2
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    mov x5, x3
-; GISEL-NEXT:    csel x20, xzr, x26, eq
+; GISEL-NEXT:    csel x24, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    orr x20, x14, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x30, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x15, eq
+; GISEL-NEXT:    csel x24, xzr, x13, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    orr x20, x17, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    ldr x13, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT:    orr x24, x23, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x1, eq
+; GISEL-NEXT:    csel x24, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    orr x20, x4, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x15, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x30, eq
+; GISEL-NEXT:    csel x24, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    orr x20, x7, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x5, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x27, eq
+; GISEL-NEXT:    csel x24, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    orr x20, x23, x20
-; GISEL-NEXT:    ldp x27, x23, [sp, #24] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x7, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x23, eq
+; GISEL-NEXT:    csel x24, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    orr x20, x27, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x22, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    csel x4, x13, x6, eq
+; GISEL-NEXT:    ldr x13, [sp, #56] ; 8-byte Reload
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    str x9, [sp, #200] ; 8-byte Spill
-; GISEL-NEXT:    ldp x12, x9, [sp, #8] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x9, xzr, x9, eq
+; GISEL-NEXT:    str x4, [sp, #248] ; 8-byte Spill
+; GISEL-NEXT:    ldr x4, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, xzr, x13, eq
+; GISEL-NEXT:    ldr x13, [sp, #48] ; 8-byte Reload
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    orr x9, x12, x9
-; GISEL-NEXT:    ldr x12, [sp, #176] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x9, x11, eq
+; GISEL-NEXT:    orr x6, x13, x6
+; GISEL-NEXT:    ldr x13, [sp, #304] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, x6, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x3, eq
+; GISEL-NEXT:    csel x24, xzr, x2, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x20, x25, x20
-; GISEL-NEXT:    ldr x25, [sp, #272] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x20, x24
+; GISEL-NEXT:    ldp x20, x3, [sp, #312] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x13, eq
-; GISEL-NEXT:    ldp x3, x13, [sp, #288] ; 16-byte Folded Reload
-; GISEL-NEXT:    orr x20, x16, x20
+; GISEL-NEXT:    csel x24, xzr, x3, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x20, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x13, eq
+; GISEL-NEXT:    csel x24, xzr, x28, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x20, x24, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x13, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x3, eq
+; GISEL-NEXT:    csel x24, xzr, x9, eq
+; GISEL-NEXT:    ldp x2, x9, [sp, #32] ; 16-byte Folded Reload
 ; 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:    orr x24, x9, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x25, eq
+; GISEL-NEXT:    csel x24, xzr, x27, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x20, x0, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    mov x27, x12
+; GISEL-NEXT:    orr x24, x12, x24
+; GISEL-NEXT:    ldr x12, [sp, #328] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x2, eq
+; GISEL-NEXT:    csel x24, xzr, x2, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x20, x6, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x25, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x26, eq
+; GISEL-NEXT:    csel x24, xzr, x26, 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:    orr x24, x30, x24
+; GISEL-NEXT:    mov x30, x9
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x15, eq
+; GISEL-NEXT:    csel x24, xzr, x12, 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:    orr x24, x23, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x1, eq
+; GISEL-NEXT:    csel x24, xzr, x14, 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:    orr x24, x15, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x30, eq
+; GISEL-NEXT:    csel x24, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    ldr x30, [sp, #264] ; 8-byte Reload
-; GISEL-NEXT:    orr x20, x7, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x5, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x19, eq
+; GISEL-NEXT:    csel x24, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    orr x20, x22, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x7, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x23, eq
+; GISEL-NEXT:    csel x24, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    orr x20, x27, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x22, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    csel x4, x4, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x12, [sp, #160] ; 8-byte Reload
-; GISEL-NEXT:    str x9, [sp, #176] ; 8-byte Spill
-; GISEL-NEXT:    csel x9, xzr, x5, eq
+; GISEL-NEXT:    csel x6, xzr, x19, eq
 ; 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:    str x4, [sp, #224] ; 8-byte Spill
+; GISEL-NEXT:    orr x6, x16, x6
+; GISEL-NEXT:    ldr x16, [sp, #24] ; 8-byte Reload
+; GISEL-NEXT:    ldr x4, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, x6, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x5, eq
+; GISEL-NEXT:    mov x19, x12
+; GISEL-NEXT:    csel x24, xzr, x3, 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:    orr x24, x20, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x13, eq
+; GISEL-NEXT:    csel x24, xzr, x28, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x20, x24, x20
-; GISEL-NEXT:    ldr x24, [sp, #280] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x13, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x3, eq
+; GISEL-NEXT:    csel x24, xzr, x0, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x20, x24, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x9, x24
+; GISEL-NEXT:    mov x9, x27
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x25, eq
+; GISEL-NEXT:    csel x24, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x20, x0, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x27, x24
+; GISEL-NEXT:    ldr x27, [sp, #16] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x2, eq
+; GISEL-NEXT:    csel x24, xzr, x2, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x20, x6, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x25, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x30, eq
+; GISEL-NEXT:    csel x24, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x20, x26, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x27, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x14, eq
+; GISEL-NEXT:    csel x24, xzr, x12, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    orr x20, x15, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    mov x12, x30
+; GISEL-NEXT:    orr x24, x23, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x17, eq
+; GISEL-NEXT:    csel x24, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    orr x20, x1, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x15, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x4, eq
+; GISEL-NEXT:    csel x24, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    orr x20, x7, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x5, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x19, eq
+; GISEL-NEXT:    csel x24, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    orr x20, x22, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x7, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x23, eq
+; GISEL-NEXT:    csel x24, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    orr x20, x27, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x24, x22, x24
+; GISEL-NEXT:    csel x6, x24, x6, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    csel x24, x4, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x12, [sp, #136] ; 8-byte Reload
-; GISEL-NEXT:    str x9, [sp, #160] ; 8-byte Spill
-; GISEL-NEXT:    csel x9, xzr, x5, eq
+; GISEL-NEXT:    ldr x4, [sp, #192] ; 8-byte Reload
+; GISEL-NEXT:    csel x6, xzr, x3, 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:    orr x6, x20, x6
+; GISEL-NEXT:    csel x6, x6, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x13, eq
+; GISEL-NEXT:    csel x20, xzr, x28, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x20, x16, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x13, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x3, eq
+; GISEL-NEXT:    csel x20, xzr, x0, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x20, x24, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x30, x20
+; GISEL-NEXT:    mov x30, x9
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x25, eq
+; GISEL-NEXT:    csel x20, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x20, x0, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x9, x20
+; GISEL-NEXT:    mov x9, x2
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
 ; GISEL-NEXT:    csel x20, xzr, x2, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x20, x6, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x25, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x30, eq
+; GISEL-NEXT:    csel x20, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x20, x26, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x27, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x14, eq
+; GISEL-NEXT:    csel x20, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x20, x15, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x23, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x17, eq
+; GISEL-NEXT:    csel x20, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    orr x20, x1, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x15, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x4, eq
+; GISEL-NEXT:    csel x20, xzr, x17, 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:    orr x20, x5, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x19, eq
+; GISEL-NEXT:    csel x20, xzr, x1, 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:    orr x20, x7, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x20, xzr, x23, eq
+; GISEL-NEXT:    csel x20, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    orr x20, x27, x20
-; GISEL-NEXT:    csel x9, x20, x9, eq
+; GISEL-NEXT:    orr x20, x22, x20
+; GISEL-NEXT:    csel x6, x20, x6, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x6, x11, x6, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    csel x20, x4, x6, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x12, [sp, #144] ; 8-byte Reload
-; GISEL-NEXT:    str x9, [sp, #304] ; 8-byte Spill
-; GISEL-NEXT:    csel x9, xzr, x13, eq
+; GISEL-NEXT:    mov x4, x16
+; GISEL-NEXT:    csel x3, xzr, x28, 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:    mov x6, x26
+; GISEL-NEXT:    orr x2, x13, x3
+; GISEL-NEXT:    mov x13, x25
+; GISEL-NEXT:    csel x2, x2, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x3, eq
+; GISEL-NEXT:    csel x3, xzr, x0, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x3, x24, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x12, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x25, eq
+; GISEL-NEXT:    csel x3, xzr, x16, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x3, x21, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x30, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x2, eq
+; GISEL-NEXT:    csel x3, xzr, x9, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x3, x6, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x25, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x30, eq
+; GISEL-NEXT:    csel x3, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x3, x26, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x27, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x14, eq
+; GISEL-NEXT:    csel x3, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x3, x15, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x23, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x17, eq
+; GISEL-NEXT:    csel x3, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x3, x1, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x15, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #7
 ; GISEL-NEXT:    orr x3, x5, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x7, eq
+; GISEL-NEXT:    csel x3, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    orr x3, x19, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x7, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x23, eq
+; GISEL-NEXT:    csel x3, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    orr x3, x27, x3
-; GISEL-NEXT:    csel x9, x3, x9, eq
+; GISEL-NEXT:    orr x3, x22, x3
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    mov x3, x2
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    ldr x3, [sp, #200] ; 8-byte Reload
+; GISEL-NEXT:    csel x2, x11, x2, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x2, x11, x2, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x2, x11, x2, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x2, x11, x2, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x2, x11, x2, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x2, x11, x2, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x20, x12, x9, eq
+; GISEL-NEXT:    csel x2, x3, x2, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x12, [sp, #152] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, xzr, x28, eq
+; GISEL-NEXT:    mov x3, x13
+; GISEL-NEXT:    csel x0, xzr, x0, eq
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    orr x9, x24, x9
-; GISEL-NEXT:    csel x9, x9, x11, eq
+; GISEL-NEXT:    orr x16, x12, x0
+; GISEL-NEXT:    csel x16, x16, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x25, eq
+; GISEL-NEXT:    csel x0, xzr, x4, 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:    orr x0, x30, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x2, eq
+; GISEL-NEXT:    csel x0, xzr, x9, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x0, x6, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    orr x0, x13, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x30, eq
+; GISEL-NEXT:    csel x0, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x0, x26, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    orr x0, x27, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x14, eq
+; GISEL-NEXT:    csel x0, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x0, x15, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    orr x0, x23, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x17, eq
+; GISEL-NEXT:    csel x0, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x0, x1, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    orr x0, x15, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x4, eq
+; GISEL-NEXT:    csel x0, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #6
 ; GISEL-NEXT:    orr x0, x5, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x7, eq
+; GISEL-NEXT:    csel x0, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    orr x0, x19, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    orr x0, x7, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x23, eq
+; GISEL-NEXT:    csel x0, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    orr x0, x27, x0
-; GISEL-NEXT:    csel x9, x0, x9, eq
+; GISEL-NEXT:    orr x0, x22, x0
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    ldr x0, [sp, #208] ; 8-byte Reload
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x16, x11, x16, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x2, x12, x9, eq
+; GISEL-NEXT:    csel x16, x0, x16, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x12, [sp, #168] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, xzr, x25, eq
+; GISEL-NEXT:    csel x13, xzr, x4, eq
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    orr x9, x16, x9
-; GISEL-NEXT:    ldr x16, [sp, #208] ; 8-byte Reload
-; GISEL-NEXT:    csel x9, x9, x11, eq
+; GISEL-NEXT:    ldr x4, [sp, #264] ; 8-byte Reload
+; GISEL-NEXT:    orr x12, x30, x13
+; 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, x3, eq
+; GISEL-NEXT:    csel x13, xzr, x9, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x13, x6, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    orr x13, x3, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x30, eq
+; GISEL-NEXT:    csel x13, xzr, x6, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x13, x26, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    mov x6, x19
+; GISEL-NEXT:    orr x13, x27, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x14, eq
+; GISEL-NEXT:    csel x13, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x13, x15, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    orr x13, x23, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x17, eq
+; GISEL-NEXT:    csel x13, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x13, x1, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    orr x13, x15, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x4, eq
+; GISEL-NEXT:    csel x13, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #5
 ; GISEL-NEXT:    orr x13, x5, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x7, eq
+; GISEL-NEXT:    csel x13, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x13, x19, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    orr x13, x7, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x23, eq
+; GISEL-NEXT:    csel x13, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    orr x13, x27, x13
-; GISEL-NEXT:    csel x9, x13, x9, eq
+; GISEL-NEXT:    orr x13, x22, x13
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    ldr x13, [sp, #216] ; 8-byte Reload
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x9, x11, x9, eq
+; GISEL-NEXT:    csel x12, x11, x12, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x6, x12, x9, eq
+; GISEL-NEXT:    csel x12, x13, x12, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x9, xzr, x3, eq
+; GISEL-NEXT:    csel x13, xzr, x9, eq
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    orr x9, x21, x9
+; GISEL-NEXT:    orr x9, x3, x13
 ; GISEL-NEXT:    csel x9, x9, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x30, eq
+; GISEL-NEXT:    csel x13, xzr, x26, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x12, x26, x12
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    orr x13, x27, x13
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x14, eq
+; GISEL-NEXT:    csel x13, xzr, x19, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x12, x15, x12
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    orr x13, x23, x13
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x17, eq
+; GISEL-NEXT:    csel x13, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x12, x1, x12
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    orr x13, x15, x13
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x4, eq
+; GISEL-NEXT:    csel x13, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x12, x5, x12
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    orr x13, x5, x13
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x7, eq
+; GISEL-NEXT:    csel x13, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x12, x19, x12
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    orr x13, x7, x13
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x23, eq
+; GISEL-NEXT:    csel x13, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    orr x12, x27, x12
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    orr x13, x22, x13
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    ldr x12, [sp, #184] ; 8-byte Reload
+; GISEL-NEXT:    ldr x13, [sp, #232] ; 8-byte Reload
 ; GISEL-NEXT:    csel x9, x11, x9, eq
 ; GISEL-NEXT:    cmp x10, #8
 ; GISEL-NEXT:    csel x9, x11, x9, eq
@@ -4590,288 +4563,281 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x10, #15
 ; GISEL-NEXT:    csel x9, x11, x9, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x9, x12, x9, eq
+; GISEL-NEXT:    csel x9, x13, x9, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x30, eq
+; GISEL-NEXT:    csel x13, xzr, x26, 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:    orr x13, x27, x13
+; GISEL-NEXT:    ldp x26, x25, [sp, #352] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x13, x13, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x14, eq
+; GISEL-NEXT:    csel x0, xzr, x6, 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:    orr x0, x23, x0
+; GISEL-NEXT:    ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x13, x0, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x17, eq
+; GISEL-NEXT:    csel x0, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x13, x1, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x0, x15, x0
+; GISEL-NEXT:    csel x13, x0, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x4, eq
+; GISEL-NEXT:    csel x0, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x13, x5, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x0, x5, x0
+; GISEL-NEXT:    csel x13, x0, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x7, eq
+; GISEL-NEXT:    csel x0, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    orr x13, x19, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x0, x7, x0
+; GISEL-NEXT:    csel x13, x0, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x13, xzr, x23, eq
+; GISEL-NEXT:    csel x0, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    orr x13, x27, x13
-; GISEL-NEXT:    csel x12, x13, x12, eq
+; GISEL-NEXT:    orr x0, x22, x0
+; GISEL-NEXT:    csel x13, x0, x13, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    ldr x13, [sp, #192] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    ldr x0, [sp, #240] ; 8-byte Reload
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x13, x11, x13, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x13, x13, x12, eq
+; GISEL-NEXT:    csel x13, x0, x13, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x14, eq
+; GISEL-NEXT:    csel x0, xzr, x6, eq
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    ldr x14, [sp, #256] ; 8-byte Reload
-; GISEL-NEXT:    orr x12, x15, x12
-; GISEL-NEXT:    ldr x15, [sp, #128] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, x12, x11, eq
+; GISEL-NEXT:    orr x0, x23, x0
+; GISEL-NEXT:    csel x0, x0, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    stp x9, x13, [x14, #72]
-; GISEL-NEXT:    csel x0, xzr, x17, eq
+; GISEL-NEXT:    csel x3, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    str x15, [x14]
-; GISEL-NEXT:    orr x0, x1, x0
-; GISEL-NEXT:    ldr x15, [sp, #224] ; 8-byte Reload
-; GISEL-NEXT:    stp x2, x6, [x14, #56]
-; GISEL-NEXT:    csel x12, x0, x12, eq
+; GISEL-NEXT:    orr x3, x15, x3
+; GISEL-NEXT:    csel x0, x3, x0, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x4, eq
+; GISEL-NEXT:    csel x3, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    str x15, [x14, #8]
-; GISEL-NEXT:    orr x0, x5, x0
-; GISEL-NEXT:    ldr x15, [sp, #200] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, x0, x12, eq
+; GISEL-NEXT:    orr x3, x5, x3
+; GISEL-NEXT:    csel x0, x3, x0, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x7, eq
+; GISEL-NEXT:    csel x3, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    str x15, [x14, #16]
-; GISEL-NEXT:    orr x0, x19, x0
-; GISEL-NEXT:    ldr x15, [sp, #176] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, x0, x12, eq
+; GISEL-NEXT:    orr x3, x7, x3
+; GISEL-NEXT:    csel x0, x3, x0, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x0, xzr, x23, eq
+; GISEL-NEXT:    csel x3, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    str x15, [x14, #24]
-; GISEL-NEXT:    orr x0, x27, x0
-; GISEL-NEXT:    ldr x15, [sp, #160] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, x0, x12, eq
+; GISEL-NEXT:    orr x3, x22, x3
+; GISEL-NEXT:    csel x0, x3, x0, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    ldr x3, [sp, #256] ; 8-byte Reload
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    str x15, [x14, #32]
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, 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 x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    stp x15, x20, [x14, #40]
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x0, x11, x0, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x0, x16, x12, eq
+; GISEL-NEXT:    csel x0, x3, x0, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x16, [sp, #216] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, xzr, x17, eq
+; GISEL-NEXT:    csel x3, xzr, x14, eq
 ; GISEL-NEXT:    cmp x10, #0
-; GISEL-NEXT:    orr x12, x1, x12
-; GISEL-NEXT:    csel x12, x12, x11, eq
+; GISEL-NEXT:    orr x3, x15, x3
+; GISEL-NEXT:    ldr x15, [sp, #296] ; 8-byte Reload
+; GISEL-NEXT:    csel x3, x3, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x4, eq
+; GISEL-NEXT:    csel x6, xzr, x17, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x3, x5, x3
-; GISEL-NEXT:    csel x12, x3, x12, eq
+; GISEL-NEXT:    stp x12, x9, [x15, #64]
+; GISEL-NEXT:    orr x6, x5, x6
+; GISEL-NEXT:    stp x24, x20, [x15, #32]
+; GISEL-NEXT:    csel x3, x6, x3, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x7, eq
+; GISEL-NEXT:    stp x2, x16, [x15, #48]
+; GISEL-NEXT:    csel x6, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x3, x19, x3
-; GISEL-NEXT:    csel x12, x3, x12, eq
+; GISEL-NEXT:    stp x13, x0, [x15, #80]
+; GISEL-NEXT:    orr x6, x7, x6
+; GISEL-NEXT:    ldp x20, x19, [sp, #400] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x3, x6, x3, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x3, xzr, x23, eq
+; GISEL-NEXT:    csel x6, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    orr x3, x27, x3
+; GISEL-NEXT:    orr x6, x22, x6
 ; GISEL-NEXT:    ldp x24, x23, [sp, #368] ; 16-byte Folded Reload
-; GISEL-NEXT:    csel x12, x3, x12, eq
+; GISEL-NEXT:    csel x3, x6, x3, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; 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:    csel x3, x11, x3, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x3, x16, x12, eq
+; GISEL-NEXT:    csel x3, x4, x3, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x16, [sp, #232] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, xzr, x4, eq
+; GISEL-NEXT:    csel x4, xzr, x17, 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:    orr x4, x5, x4
+; GISEL-NEXT:    csel x4, x4, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x4, xzr, x7, eq
+; GISEL-NEXT:    csel x5, xzr, x1, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x4, x19, x4
-; GISEL-NEXT:    csel x12, x4, x12, eq
+; GISEL-NEXT:    orr x5, x7, x5
+; GISEL-NEXT:    csel x4, x5, x4, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x4, xzr, x22, eq
+; GISEL-NEXT:    csel x5, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    orr x4, x27, x4
-; GISEL-NEXT:    csel x12, x4, x12, eq
+; GISEL-NEXT:    orr x5, x22, x5
+; GISEL-NEXT:    csel x4, x5, x4, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    ldr x5, [sp, #272] ; 8-byte Reload
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #11
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #12
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #13
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #14
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x10, #15
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x4, x11, x4, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x4, x16, x12, eq
+; GISEL-NEXT:    csel x4, x5, x4, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    ldr x16, [sp, #240] ; 8-byte Reload
-; GISEL-NEXT:    csel x12, xzr, x7, eq
+; GISEL-NEXT:    csel x17, xzr, x1, 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:    stp x3, x4, [x15, #96]
+; GISEL-NEXT:    orr x17, x7, x17
+; GISEL-NEXT:    csel x17, x17, x11, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x17, xzr, x22, eq
+; GISEL-NEXT:    csel x1, xzr, x21, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    orr x17, x27, x17
-; GISEL-NEXT:    csel x12, x17, x12, eq
+; GISEL-NEXT:    orr x1, x22, x1
+; GISEL-NEXT:    csel x17, x1, x17, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    ldr x1, [sp, #280] ; 8-byte Reload
+; GISEL-NEXT:    csel x17, x11, x17, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x17, x11, x17, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x17, x11, x17, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x17, x11, x17, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x17, x11, x17, eq
 ; GISEL-NEXT:    cmp x10, #7
-; 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:    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:    csel x17, x11, x17, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    csel x17, x16, x12, eq
+; GISEL-NEXT:    csel x17, x1, x17, eq
 ; GISEL-NEXT:    tst x8, #0x3f
-; GISEL-NEXT:    csel x12, xzr, x22, eq
+; GISEL-NEXT:    csel x14, xzr, x21, 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:    csel x12, x12, x11, eq
+; GISEL-NEXT:    orr x14, x22, x14
+; GISEL-NEXT:    ldp x1, x5, [sp, #168] ; 16-byte Folded Reload
+; GISEL-NEXT:    csel x14, x14, x11, eq
 ; GISEL-NEXT:    cmp x10, #1
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #2
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #3
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    stp x5, x1, [x15]
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #4
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    ldr x5, [sp, #248] ; 8-byte Reload
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #5
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    ldr x1, [sp, #224] ; 8-byte Reload
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #6
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #7
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    stp x5, x1, [x15, #16]
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #8
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #9
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x14, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #10
-; GISEL-NEXT:    csel x12, x11, x12, eq
+; GISEL-NEXT:    csel x12, x11, x14, eq
 ; GISEL-NEXT:    cmp x10, #11
 ; GISEL-NEXT:    csel x9, x11, x12, eq
 ; GISEL-NEXT:    cmp x10, #12
@@ -4883,10 +4849,10 @@ define void @test_ashr_i1024(ptr %result, ptr %input, i32 %shift) {
 ; GISEL-NEXT:    cmp x10, #15
 ; GISEL-NEXT:    csel x9, x11, x9, eq
 ; GISEL-NEXT:    cmp x8, #0
-; GISEL-NEXT:    ldr x8, [sp, #248] ; 8-byte Reload
-; GISEL-NEXT:    ldp x28, x27, [sp, #336] ; 16-byte Folded Reload
+; GISEL-NEXT:    ldr x8, [sp, #288] ; 8-byte Reload
+; GISEL-NEXT:    ldp x22, x21, [sp, #384] ; 16-byte Folded Reload
 ; GISEL-NEXT:    csel x8, x8, x9, eq
-; GISEL-NEXT:    str x8, [x14, #120]
+; GISEL-NEXT:    stp x17, x8, [x15, #112]
 ; GISEL-NEXT:    add sp, sp, #432
 ; GISEL-NEXT:    ret
 entry:
diff --git a/llvm/test/CodeGen/AArch64/frem-power2.ll b/llvm/test/CodeGen/AArch64/frem-power2.ll
index 548079dc5c4aa..7314ee72e8d20 100644
--- a/llvm/test/CodeGen/AArch64/frem-power2.ll
+++ b/llvm/test/CodeGen/AArch64/frem-power2.ll
@@ -665,9 +665,8 @@ define float @frem2_const_sitofp(float %x, i32 %sa) {
 ; CHECK-GI-LABEL: frem2_const_sitofp:
 ; CHECK-GI:       // %bb.0: // %entry
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
-; CHECK-GI-NEXT:    and w9, w0, #0x1f
 ; CHECK-GI-NEXT:    fmov s0, #12.50000000
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w0
 ; CHECK-GI-NEXT:    scvtf s1, w8
 ; CHECK-GI-NEXT:    b fmodf
 entry:
@@ -695,9 +694,8 @@ define float @frem2_constneg_sitofp(float %x, i32 %sa) {
 ; CHECK-GI-LABEL: frem2_constneg_sitofp:
 ; CHECK-GI:       // %bb.0: // %entry
 ; CHECK-GI-NEXT:    mov w8, #1 // =0x1
-; CHECK-GI-NEXT:    and w9, w0, #0x1f
 ; CHECK-GI-NEXT:    fmov s0, #-12.50000000
-; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsl w8, w8, w0
 ; CHECK-GI-NEXT:    scvtf s1, w8
 ; CHECK-GI-NEXT:    b fmodf
 entry:
diff --git a/llvm/test/CodeGen/AArch64/fsh.ll b/llvm/test/CodeGen/AArch64/fsh.ll
index 312010904cf50..81b21db4b8aeb 100644
--- a/llvm/test/CodeGen/AArch64/fsh.ll
+++ b/llvm/test/CodeGen/AArch64/fsh.ll
@@ -183,33 +183,33 @@ define i128 @rotl_i128(i128 %a, i128 %c) {
 ; CHECK-GI-NEXT:    and x9, x2, #0x7f
 ; CHECK-GI-NEXT:    neg x10, x2
 ; CHECK-GI-NEXT:    sub x12, x8, x9
-; CHECK-GI-NEXT:    sub x11, x9, #64
-; CHECK-GI-NEXT:    lsl x14, x1, x9
+; CHECK-GI-NEXT:    lsl x13, x1, x2
+; CHECK-GI-NEXT:    sub x14, x9, #64
 ; CHECK-GI-NEXT:    lsr x12, x0, x12
-; 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:    orr x12, x12, x14
+; CHECK-GI-NEXT:    lsl x14, x0, x14
+; CHECK-GI-NEXT:    lsl x11, x0, x2
 ; 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:    orr x12, x12, x13
+; CHECK-GI-NEXT:    lsr x13, x0, x10
 ; CHECK-GI-NEXT:    lsl x8, x1, x8
-; CHECK-GI-NEXT:    csel x13, x13, xzr, lo
+; CHECK-GI-NEXT:    csel x12, x12, x14, lo
+; CHECK-GI-NEXT:    sub x14, x9, #64
+; CHECK-GI-NEXT:    csel x11, x11, xzr, lo
 ; CHECK-GI-NEXT:    tst x2, #0x7f
 ; CHECK-GI-NEXT:    lsr x14, x1, x14
-; CHECK-GI-NEXT:    csel x11, x1, x11, eq
-; CHECK-GI-NEXT:    orr x8, x12, x8
+; CHECK-GI-NEXT:    orr x8, x13, x8
+; CHECK-GI-NEXT:    csel x12, x1, x12, eq
 ; CHECK-GI-NEXT:    cmp x9, #64
-; CHECK-GI-NEXT:    lsr x12, x1, x9
+; CHECK-GI-NEXT:    lsr x13, x1, x10
 ; CHECK-GI-NEXT:    csel x8, x8, x14, lo
 ; CHECK-GI-NEXT:    tst x10, #0x7f
 ; CHECK-GI-NEXT:    csel x8, x0, x8, eq
 ; CHECK-GI-NEXT:    cmp x9, #64
-; CHECK-GI-NEXT:    csel x9, x12, xzr, lo
-; CHECK-GI-NEXT:    orr x0, x13, x8
-; CHECK-GI-NEXT:    orr x1, x11, x9
+; CHECK-GI-NEXT:    csel x9, x13, xzr, lo
+; CHECK-GI-NEXT:    orr x0, x11, x8
+; CHECK-GI-NEXT:    orr x1, x12, x9
 ; CHECK-GI-NEXT:    ret
 entry:
   %d = call i128 @llvm.fshl(i128 %a, i128 %a, i128 %c)
@@ -237,35 +237,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:    lsr x11, x0, 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:    sub x12, x9, #64
+; CHECK-GI-NEXT:    neg x13, x2
 ; CHECK-GI-NEXT:    lsl x10, x1, x10
-; CHECK-GI-NEXT:    lsr x11, x1, x11
+; CHECK-GI-NEXT:    lsr x12, x1, x12
 ; CHECK-GI-NEXT:    and x14, x13, #0x7f
 ; 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 x15, x14, #64
+; CHECK-GI-NEXT:    orr x10, x11, x10
+; CHECK-GI-NEXT:    lsr x11, x1, x2
 ; 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:    csel x10, x10, x12, lo
+; CHECK-GI-NEXT:    lsl x12, x1, x13
 ; CHECK-GI-NEXT:    tst x2, #0x7f
 ; CHECK-GI-NEXT:    csel x10, x0, x10, 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:    lsl x9, x0, x13
+; CHECK-GI-NEXT:    lsl x15, x0, x15
+; CHECK-GI-NEXT:    csel x11, x11, xzr, lo
+; CHECK-GI-NEXT:    orr x8, x8, x12
 ; CHECK-GI-NEXT:    cmp x14, #64
 ; CHECK-GI-NEXT:    csel x9, x9, xzr, lo
-; CHECK-GI-NEXT:    csel x8, x8, x11, lo
+; CHECK-GI-NEXT:    csel x8, x8, x15, lo
 ; CHECK-GI-NEXT:    tst x13, #0x7f
 ; 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 x1, x11, x8
 ; CHECK-GI-NEXT:    ret
 entry:
   %d = call i128 @llvm.fshr(i128 %a, i128 %a, i128 %c)
@@ -385,25 +385,14 @@ entry:
 }
 
 define i32 @fshl_i32(i32 %a, i32 %b, i32 %c) {
-; CHECK-SD-LABEL: fshl_i32:
-; CHECK-SD:       // %bb.0: // %entry
-; CHECK-SD-NEXT:    lsr w8, w1, #1
-; CHECK-SD-NEXT:    mvn w9, w2
-; CHECK-SD-NEXT:    lsl w10, w0, w2
-; CHECK-SD-NEXT:    lsr w8, w8, w9
-; CHECK-SD-NEXT:    orr w0, w10, w8
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: fshl_i32:
-; CHECK-GI:       // %bb.0: // %entry
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    lsr w9, w1, #1
-; CHECK-GI-NEXT:    and w10, w2, #0x1f
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w10, w0, w10
-; CHECK-GI-NEXT:    lsr w8, w9, w8
-; CHECK-GI-NEXT:    orr w0, w10, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: fshl_i32:
+; CHECK:       // %bb.0: // %entry
+; CHECK-NEXT:    lsr w8, w1, #1
+; CHECK-NEXT:    mvn w9, w2
+; CHECK-NEXT:    lsl w10, w0, w2
+; CHECK-NEXT:    lsr w8, w8, w9
+; CHECK-NEXT:    orr w0, w10, w8
+; CHECK-NEXT:    ret
 entry:
   %d = call i32 @llvm.fshl(i32 %a, i32 %b, i32 %c)
   ret i32 %d
@@ -421,12 +410,10 @@ define i32 @fshr_i32(i32 %a, i32 %b, i32 %c) {
 ;
 ; CHECK-GI-LABEL: fshr_i32:
 ; CHECK-GI:       // %bb.0: // %entry
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    lsl w9, w0, #1
-; CHECK-GI-NEXT:    and w10, w2, #0x1f
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w8, w9, w8
-; CHECK-GI-NEXT:    lsr w9, w1, w10
+; CHECK-GI-NEXT:    lsl w8, w0, #1
+; CHECK-GI-NEXT:    mvn w9, w2
+; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsr w9, w1, w2
 ; CHECK-GI-NEXT:    orr w0, w8, w9
 ; CHECK-GI-NEXT:    ret
 entry:
@@ -446,12 +433,10 @@ define i64 @fshl_i64(i64 %a, i64 %b, i64 %c) {
 ;
 ; CHECK-GI-LABEL: fshl_i64:
 ; CHECK-GI:       // %bb.0: // %entry
-; CHECK-GI-NEXT:    mov w8, #63 // =0x3f
-; CHECK-GI-NEXT:    lsr x9, x1, #1
-; CHECK-GI-NEXT:    and x10, x2, #0x3f
-; CHECK-GI-NEXT:    bic x8, x8, x2
-; CHECK-GI-NEXT:    lsl x10, x0, x10
-; CHECK-GI-NEXT:    lsr x8, x9, x8
+; CHECK-GI-NEXT:    lsr x8, x1, #1
+; CHECK-GI-NEXT:    mvn x9, x2
+; CHECK-GI-NEXT:    lsl x10, x0, x2
+; CHECK-GI-NEXT:    lsr x8, x8, x9
 ; CHECK-GI-NEXT:    orr x0, x10, x8
 ; CHECK-GI-NEXT:    ret
 entry:
@@ -471,12 +456,10 @@ define i64 @fshr_i64(i64 %a, i64 %b, i64 %c) {
 ;
 ; CHECK-GI-LABEL: fshr_i64:
 ; CHECK-GI:       // %bb.0: // %entry
-; CHECK-GI-NEXT:    mov w8, #63 // =0x3f
-; CHECK-GI-NEXT:    lsl x9, x0, #1
-; CHECK-GI-NEXT:    and x10, x2, #0x3f
-; CHECK-GI-NEXT:    bic x8, x8, x2
-; CHECK-GI-NEXT:    lsl x8, x9, x8
-; CHECK-GI-NEXT:    lsr x9, x1, x10
+; CHECK-GI-NEXT:    lsl x8, x0, #1
+; CHECK-GI-NEXT:    mvn x9, x2
+; CHECK-GI-NEXT:    lsl x8, x8, x9
+; CHECK-GI-NEXT:    lsr x9, x1, x2
 ; CHECK-GI-NEXT:    orr x0, x8, x9
 ; CHECK-GI-NEXT:    ret
 entry:
@@ -506,31 +489,31 @@ define i128 @fshl_i128(i128 %a, i128 %b, i128 %c) {
 ; CHECK-GI:       // %bb.0: // %entry
 ; CHECK-GI-NEXT:    mov w8, #64 // =0x40
 ; CHECK-GI-NEXT:    and x9, x4, #0x7f
-; CHECK-GI-NEXT:    mov w10, #127 // =0x7f
+; CHECK-GI-NEXT:    lsl x13, x1, x4
 ; CHECK-GI-NEXT:    sub x12, x8, x9
-; CHECK-GI-NEXT:    lsl x13, x1, x9
-; CHECK-GI-NEXT:    bic x10, x10, x4
+; CHECK-GI-NEXT:    mov w10, #127 // =0x7f
+; CHECK-GI-NEXT:    sub x15, x9, #64
 ; CHECK-GI-NEXT:    lsr x12, x0, x12
-; CHECK-GI-NEXT:    sub x14, x9, #64
-; CHECK-GI-NEXT:    lsl x15, x0, x9
+; CHECK-GI-NEXT:    bic x10, x10, x4
 ; CHECK-GI-NEXT:    extr x16, x3, x2, #1
 ; CHECK-GI-NEXT:    cmp x9, #64
-; CHECK-GI-NEXT:    sub x8, x8, x10
+; CHECK-GI-NEXT:    mvn x11, x4
+; CHECK-GI-NEXT:    lsl x14, x0, x4
 ; 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:    lsl x13, x0, x15
+; CHECK-GI-NEXT:    sub x8, x8, x10
 ; CHECK-GI-NEXT:    sub x15, x10, #64
-; CHECK-GI-NEXT:    lsr x17, x16, x10
+; CHECK-GI-NEXT:    lsr x17, x16, x11
 ; CHECK-GI-NEXT:    lsl x8, x12, x8
+; CHECK-GI-NEXT:    csel x14, x14, xzr, lo
 ; 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:    lsr x12, x12, x11
 ; CHECK-GI-NEXT:    csel x9, x1, x9, 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
@@ -569,32 +552,32 @@ define i128 @fshr_i128(i128 %a, i128 %b, i128 %c) {
 ; CHECK-GI-NEXT:    extr x10, x1, x0, #63
 ; CHECK-GI-NEXT:    bic x8, x8, x4
 ; CHECK-GI-NEXT:    mov w11, #64 // =0x40
-; 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:    lsr x12, x9, x12
+; CHECK-GI-NEXT:    mvn x12, x4
+; CHECK-GI-NEXT:    sub x13, x11, x8
+; CHECK-GI-NEXT:    lsl x14, x10, x12
+; CHECK-GI-NEXT:    and x15, x4, #0x7f
+; CHECK-GI-NEXT:    lsr x13, x9, x13
+; CHECK-GI-NEXT:    lsl x16, x9, x12
 ; CHECK-GI-NEXT:    sub x17, x8, #64
 ; CHECK-GI-NEXT:    cmp x8, #64
 ; CHECK-GI-NEXT:    lsl x8, x9, x17
-; CHECK-GI-NEXT:    sub x11, x11, x14
-; CHECK-GI-NEXT:    mvn x15, x4
-; CHECK-GI-NEXT:    orr x12, x12, x13
+; CHECK-GI-NEXT:    sub x11, x11, x15
+; CHECK-GI-NEXT:    orr x13, x13, x14
 ; 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:    sub x14, x15, #64
+; CHECK-GI-NEXT:    lsr x16, x2, x4
 ; 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, x13, x8, lo
+; CHECK-GI-NEXT:    tst x12, #0x7f
+; CHECK-GI-NEXT:    lsr x12, x3, x14
 ; CHECK-GI-NEXT:    csel x8, x10, x8, eq
 ; CHECK-GI-NEXT:    orr x10, x16, x11
-; CHECK-GI-NEXT:    cmp x14, #64
-; CHECK-GI-NEXT:    lsr x11, x3, x14
+; CHECK-GI-NEXT:    cmp x15, #64
+; CHECK-GI-NEXT:    lsr x11, x3, x4
 ; 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:    cmp x14, #64
+; CHECK-GI-NEXT:    cmp x15, #64
 ; CHECK-GI-NEXT:    csel x11, x11, xzr, lo
 ; CHECK-GI-NEXT:    orr x0, x9, x10
 ; CHECK-GI-NEXT:    orr x1, x8, x11
@@ -1762,63 +1745,63 @@ define <2 x i128> @rotl_v2i128(<2 x i128> %a, <2 x i128> %c) {
 ; CHECK-GI:       // %bb.0: // %entry
 ; CHECK-GI-NEXT:    and x8, x4, #0x7f
 ; CHECK-GI-NEXT:    mov w9, #64 // =0x40
-; CHECK-GI-NEXT:    neg x13, x4
+; CHECK-GI-NEXT:    lsl x11, x1, 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:    sub x12, x8, #64
+; CHECK-GI-NEXT:    lsl x14, x0, x4
 ; 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 x12, x0, x12
 ; CHECK-GI-NEXT:    cmp x8, #64
-; CHECK-GI-NEXT:    neg x15, x6
-; CHECK-GI-NEXT:    orr x8, x10, x12
+; CHECK-GI-NEXT:    lsl x16, x2, x6
+; CHECK-GI-NEXT:    lsl x17, x3, x6
+; CHECK-GI-NEXT:    neg x13, x4
+; CHECK-GI-NEXT:    orr x8, x10, x11
 ; CHECK-GI-NEXT:    and x10, x6, #0x7f
-; CHECK-GI-NEXT:    csel x12, x14, xzr, lo
+; CHECK-GI-NEXT:    csel x11, x14, xzr, lo
 ; CHECK-GI-NEXT:    sub x14, x9, x10
-; CHECK-GI-NEXT:    csel x8, x8, x11, lo
+; CHECK-GI-NEXT:    csel x8, x8, x12, lo
 ; CHECK-GI-NEXT:    tst x4, #0x7f
-; CHECK-GI-NEXT:    sub x11, x10, #64
-; CHECK-GI-NEXT:    lsl x16, x2, x10
+; CHECK-GI-NEXT:    sub x12, x10, #64
 ; 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:    lsl x12, x2, x12
 ; CHECK-GI-NEXT:    cmp x10, #64
-; CHECK-GI-NEXT:    and x4, x15, #0x7f
+; CHECK-GI-NEXT:    neg x15, x6
 ; 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:    csel x10, x10, x11, lo
-; CHECK-GI-NEXT:    sub x11, x9, x16
+; CHECK-GI-NEXT:    csel x10, x10, x12, lo
+; CHECK-GI-NEXT:    sub x12, x9, x16
 ; CHECK-GI-NEXT:    sub x17, x16, #64
-; CHECK-GI-NEXT:    lsr x18, x0, x16
-; CHECK-GI-NEXT:    lsl x11, x1, x11
+; CHECK-GI-NEXT:    lsr x18, x0, x13
+; CHECK-GI-NEXT:    lsl x12, x1, x12
 ; CHECK-GI-NEXT:    tst x6, #0x7f
+; CHECK-GI-NEXT:    and x4, x15, #0x7f
 ; CHECK-GI-NEXT:    lsr x17, x1, x17
 ; CHECK-GI-NEXT:    csel x10, x3, x10, eq
+; CHECK-GI-NEXT:    orr x12, x18, x12
 ; 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:    lsr x1, x1, x13
+; CHECK-GI-NEXT:    csel x12, x12, 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:    lsr x17, x2, x15
 ; CHECK-GI-NEXT:    lsl x9, x3, x9
-; CHECK-GI-NEXT:    csel x11, x0, x11, eq
+; CHECK-GI-NEXT:    csel x12, x0, x12, 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:    orr x9, x17, x9
 ; CHECK-GI-NEXT:    cmp x4, #64
-; CHECK-GI-NEXT:    lsr x17, x3, x4
+; CHECK-GI-NEXT:    lsr x17, x3, x15
 ; CHECK-GI-NEXT:    csel x9, x9, x13, lo
 ; CHECK-GI-NEXT:    tst x15, #0x7f
 ; CHECK-GI-NEXT:    csel x9, x2, x9, eq
 ; CHECK-GI-NEXT:    cmp x4, #64
-; CHECK-GI-NEXT:    orr x1, x8, x16
+; CHECK-GI-NEXT:    orr x0, x11, x12
 ; CHECK-GI-NEXT:    csel x13, x17, xzr, lo
+; CHECK-GI-NEXT:    orr x1, x8, x16
 ; CHECK-GI-NEXT:    orr x2, x14, x9
 ; CHECK-GI-NEXT:    orr x3, x10, x13
 ; CHECK-GI-NEXT:    ret
@@ -1860,63 +1843,63 @@ define <2 x i128> @rotr_v2i128(<2 x i128> %a, <2 x i128> %c) {
 ; CHECK-GI:       // %bb.0: // %entry
 ; CHECK-GI-NEXT:    and x8, x4, #0x7f
 ; CHECK-GI-NEXT:    mov w9, #64 // =0x40
-; CHECK-GI-NEXT:    and x14, x6, #0x7f
+; CHECK-GI-NEXT:    lsr x11, x0, x4
 ; CHECK-GI-NEXT:    sub x10, x9, x8
-; CHECK-GI-NEXT:    sub x11, x8, #64
-; CHECK-GI-NEXT:    lsr x12, x0, x8
+; CHECK-GI-NEXT:    sub x12, x8, #64
+; CHECK-GI-NEXT:    and x14, x6, #0x7f
 ; CHECK-GI-NEXT:    lsl x10, x1, x10
-; CHECK-GI-NEXT:    lsr x11, x1, x11
+; CHECK-GI-NEXT:    lsr x12, x1, x12
 ; 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:    orr x10, x12, x10
-; CHECK-GI-NEXT:    lsr x12, x1, x8
+; CHECK-GI-NEXT:    neg x16, x6
+; CHECK-GI-NEXT:    orr x10, x11, x10
+; CHECK-GI-NEXT:    lsr x11, x1, x4
 ; CHECK-GI-NEXT:    lsl x15, x3, x15
-; CHECK-GI-NEXT:    csel x10, x10, x11, lo
+; CHECK-GI-NEXT:    csel x10, x10, x12, lo
 ; CHECK-GI-NEXT:    tst x4, #0x7f
-; CHECK-GI-NEXT:    sub x11, x14, #64
+; CHECK-GI-NEXT:    sub x12, x14, #64
 ; CHECK-GI-NEXT:    csel x10, x0, x10, eq
 ; CHECK-GI-NEXT:    cmp x8, #64
-; CHECK-GI-NEXT:    lsr x8, x2, x14
-; CHECK-GI-NEXT:    lsr x11, x3, x11
-; CHECK-GI-NEXT:    csel x12, x12, xzr, lo
+; CHECK-GI-NEXT:    lsr x8, x2, x6
+; CHECK-GI-NEXT:    lsr x12, x3, x12
+; CHECK-GI-NEXT:    csel x11, x11, xzr, lo
 ; CHECK-GI-NEXT:    cmp x14, #64
 ; CHECK-GI-NEXT:    orr x8, x8, x15
-; CHECK-GI-NEXT:    neg x16, x6
-; CHECK-GI-NEXT:    csel x8, x8, x11, lo
+; CHECK-GI-NEXT:    lsr x17, x3, x6
+; CHECK-GI-NEXT:    lsl x18, x1, x13
+; CHECK-GI-NEXT:    csel x8, x8, x12, lo
 ; CHECK-GI-NEXT:    tst x6, #0x7f
-; CHECK-GI-NEXT:    and x11, x13, #0x7f
+; CHECK-GI-NEXT:    and x12, x13, #0x7f
 ; 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:    sub x14, x9, x12
+; CHECK-GI-NEXT:    sub x15, x12, #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 x4, x0, x13
 ; CHECK-GI-NEXT:    lsl x15, x0, x15
 ; CHECK-GI-NEXT:    and x0, x16, #0x7f
 ; CHECK-GI-NEXT:    csel x17, x17, xzr, lo
 ; CHECK-GI-NEXT:    orr x14, x14, x18
-; CHECK-GI-NEXT:    cmp x11, #64
+; CHECK-GI-NEXT:    cmp x12, #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:    lsr x9, x2, x9
-; CHECK-GI-NEXT:    lsl x18, x3, x0
-; CHECK-GI-NEXT:    csel x11, x4, xzr, lo
+; CHECK-GI-NEXT:    lsl x18, x3, x16
+; CHECK-GI-NEXT:    csel x12, x4, xzr, lo
 ; CHECK-GI-NEXT:    tst x13, #0x7f
-; CHECK-GI-NEXT:    lsl x13, x2, x0
+; CHECK-GI-NEXT:    lsl x13, x2, x16
 ; CHECK-GI-NEXT:    lsl x15, x2, x15
 ; CHECK-GI-NEXT:    csel x14, x1, x14, eq
 ; CHECK-GI-NEXT:    orr x9, x9, x18
 ; CHECK-GI-NEXT:    cmp x0, #64
+; CHECK-GI-NEXT:    orr x0, x10, x12
 ; 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:    csel x9, x3, x9, eq
-; CHECK-GI-NEXT:    orr x0, x10, x11
-; CHECK-GI-NEXT:    orr x1, x12, x14
+; CHECK-GI-NEXT:    orr x1, x11, x14
 ; CHECK-GI-NEXT:    orr x2, x8, x13
 ; CHECK-GI-NEXT:    orr x3, x17, x9
 ; CHECK-GI-NEXT:    ret
@@ -2870,67 +2853,67 @@ define <2 x i128> @fshl_v2i128(<2 x i128> %a, <2 x i128> %b, <2 x i128> %c) {
 ; CHECK-GI-NEXT:    ldr x12, [sp, #32]
 ; CHECK-GI-NEXT:    mov w13, #127 // =0x7f
 ; CHECK-GI-NEXT:    and x8, x11, #0x7f
+; CHECK-GI-NEXT:    lsl x17, x1, x11
 ; 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:    cmp x8, #64
 ; 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:    lsl x19, x0, x11
+; CHECK-GI-NEXT:    lsl x0, x3, x12
+; CHECK-GI-NEXT:    mvn x18, x11
 ; CHECK-GI-NEXT:    mvn x10, x12
 ; CHECK-GI-NEXT:    orr x16, x16, x17
 ; CHECK-GI-NEXT:    sub x17, x14, #64
+; CHECK-GI-NEXT:    csel x8, x19, xzr, lo
 ; 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:    lsr x16, x2, x16
+; CHECK-GI-NEXT:    lsl x19, x2, x12
 ; 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:    orr x16, x16, x0
 ; CHECK-GI-NEXT:    csel x14, x19, xzr, lo
+; CHECK-GI-NEXT:    extr x0, x5, x4, #1
 ; 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:    lsr x2, x0, x18
 ; CHECK-GI-NEXT:    lsl x16, x17, x16
+; CHECK-GI-NEXT:    lsr x3, x7, #1
 ; CHECK-GI-NEXT:    extr x4, x7, x6, #1
 ; CHECK-GI-NEXT:    lsr x1, x17, x1
+; CHECK-GI-NEXT:    orr x16, x2, x16
 ; 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:    lsr x17, x17, x18
 ; CHECK-GI-NEXT:    csel x16, x16, x1, lo
 ; CHECK-GI-NEXT:    tst x18, #0x7f
 ; CHECK-GI-NEXT:    sub x18, x12, #64
-; CHECK-GI-NEXT:    lsr x1, x4, x12
+; CHECK-GI-NEXT:    lsr x1, x4, x10
+; CHECK-GI-NEXT:    lsl x9, x3, x9
 ; 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:    cmp x12, #64
 ; CHECK-GI-NEXT:    orr x9, x1, x9
-; CHECK-GI-NEXT:    lsr x18, x3, x12
-; CHECK-GI-NEXT:    orr x0, x8, x16
+; CHECK-GI-NEXT:    cmp x12, #64
+; CHECK-GI-NEXT:    lsr x18, x3, x10
 ; 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:    cmp x12, #64
+; CHECK-GI-NEXT:    orr x0, x8, x16
 ; CHECK-GI-NEXT:    csel x10, x18, xzr, lo
+; CHECK-GI-NEXT:    orr x1, x15, x17
 ; 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
@@ -2982,65 +2965,65 @@ define <2 x i128> @fshr_v2i128(<2 x i128> %a, <2 x i128> %b, <2 x i128> %c) {
 ; 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:    mvn x15, x9
 ; CHECK-GI-NEXT:    sub x17, x12, x11
 ; CHECK-GI-NEXT:    sub x18, x11, #64
-; CHECK-GI-NEXT:    lsl x0, x14, x11
+; CHECK-GI-NEXT:    lsl x0, x14, x15
 ; CHECK-GI-NEXT:    lsr x17, x13, x17
-; CHECK-GI-NEXT:    lsl x1, x13, x11
+; CHECK-GI-NEXT:    lsl x1, x13, x15
 ; 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:    mvn x16, x8
 ; CHECK-GI-NEXT:    csel x13, x17, x13, lo
 ; CHECK-GI-NEXT:    sub x17, x12, x10
-; CHECK-GI-NEXT:    tst x16, #0x7f
-; CHECK-GI-NEXT:    sub x16, x10, #64
+; CHECK-GI-NEXT:    csel x0, x1, xzr, lo
+; CHECK-GI-NEXT:    tst x15, #0x7f
+; CHECK-GI-NEXT:    sub x15, 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:    lsl x2, x11, x16
 ; CHECK-GI-NEXT:    csel x13, x14, x13, eq
-; CHECK-GI-NEXT:    lsl x14, x18, x16
+; CHECK-GI-NEXT:    lsl x14, x18, x15
+; CHECK-GI-NEXT:    lsl x1, x18, x16
 ; CHECK-GI-NEXT:    cmp x10, #64
-; CHECK-GI-NEXT:    mvn x10, x8
-; CHECK-GI-NEXT:    orr x16, x17, x2
+; CHECK-GI-NEXT:    and x10, x9, #0x7f
+; CHECK-GI-NEXT:    orr x15, x17, x2
+; CHECK-GI-NEXT:    lsr x18, x4, x9
+; CHECK-GI-NEXT:    csel x14, x15, x14, lo
+; CHECK-GI-NEXT:    sub x15, x12, x10
 ; 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:    tst x16, #0x7f
+; CHECK-GI-NEXT:    sub x16, x10, #64
+; CHECK-GI-NEXT:    lsl x15, x5, x15
 ; 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:    orr x15, x18, x15
+; CHECK-GI-NEXT:    cmp x10, #64
+; CHECK-GI-NEXT:    lsr x16, x5, x9
+; CHECK-GI-NEXT:    csel x14, x15, 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:    lsr x15, x6, x8
 ; 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:    csel x14, x4, x14, eq
+; CHECK-GI-NEXT:    cmp x10, #64
+; CHECK-GI-NEXT:    lsr x10, x7, x12
+; CHECK-GI-NEXT:    csel x12, x16, xzr, lo
+; CHECK-GI-NEXT:    orr x9, x15, 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:    lsr x15, x7, x8
+; CHECK-GI-NEXT:    csel x9, x9, x10, 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 x0, x0, x14
+; CHECK-GI-NEXT:    csel x9, x15, xzr, lo
+; CHECK-GI-NEXT:    orr x1, x13, x12
 ; CHECK-GI-NEXT:    orr x2, x17, x8
 ; CHECK-GI-NEXT:    orr x3, x11, x9
 ; CHECK-GI-NEXT:    ret
diff --git a/llvm/test/CodeGen/AArch64/funnel-shift.ll b/llvm/test/CodeGen/AArch64/funnel-shift.ll
index c4e4d3c7dcd2b..f92d9af5ce6c1 100644
--- a/llvm/test/CodeGen/AArch64/funnel-shift.ll
+++ b/llvm/test/CodeGen/AArch64/funnel-shift.ll
@@ -18,25 +18,14 @@ declare <4 x i32> @llvm.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)
 ; General case - all operands can be variables.
 
 define i32 @fshl_i32(i32 %x, i32 %y, i32 %z) {
-; CHECK-SD-LABEL: fshl_i32:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    lsr w8, w1, #1
-; CHECK-SD-NEXT:    mvn w9, w2
-; CHECK-SD-NEXT:    lsl w10, w0, w2
-; CHECK-SD-NEXT:    lsr w8, w8, w9
-; CHECK-SD-NEXT:    orr w0, w10, w8
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: fshl_i32:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    lsr w9, w1, #1
-; CHECK-GI-NEXT:    and w10, w2, #0x1f
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w10, w0, w10
-; CHECK-GI-NEXT:    lsr w8, w9, w8
-; CHECK-GI-NEXT:    orr w0, w10, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: fshl_i32:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsr w8, w1, #1
+; CHECK-NEXT:    mvn w9, w2
+; CHECK-NEXT:    lsl w10, w0, w2
+; CHECK-NEXT:    lsr w8, w8, w9
+; CHECK-NEXT:    orr w0, w10, w8
+; CHECK-NEXT:    ret
   %f = call i32 @llvm.fshl.i32(i32 %x, i32 %y, i32 %z)
   ret i32 %f
 }
@@ -53,12 +42,10 @@ define i64 @fshl_i64(i64 %x, i64 %y, i64 %z) {
 ;
 ; CHECK-GI-LABEL: fshl_i64:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #63 // =0x3f
-; CHECK-GI-NEXT:    lsr x9, x1, #1
-; CHECK-GI-NEXT:    and x10, x2, #0x3f
-; CHECK-GI-NEXT:    bic x8, x8, x2
-; CHECK-GI-NEXT:    lsl x10, x0, x10
-; CHECK-GI-NEXT:    lsr x8, x9, x8
+; CHECK-GI-NEXT:    lsr x8, x1, #1
+; CHECK-GI-NEXT:    mvn x9, x2
+; CHECK-GI-NEXT:    lsl x10, x0, x2
+; CHECK-GI-NEXT:    lsr x8, x8, x9
 ; CHECK-GI-NEXT:    orr x0, x10, x8
 ; CHECK-GI-NEXT:    ret
   %f = call i64 @llvm.fshl.i64(i64 %x, i64 %y, i64 %z)
@@ -87,31 +74,31 @@ define i128 @fshl_i128(i128 %x, i128 %y, i128 %z) nounwind {
 ; CHECK-GI:       // %bb.0:
 ; CHECK-GI-NEXT:    mov w8, #64 // =0x40
 ; CHECK-GI-NEXT:    and x9, x4, #0x7f
-; CHECK-GI-NEXT:    mov w10, #127 // =0x7f
+; CHECK-GI-NEXT:    lsl x13, x1, x4
 ; CHECK-GI-NEXT:    sub x12, x8, x9
-; CHECK-GI-NEXT:    lsl x13, x1, x9
-; CHECK-GI-NEXT:    bic x10, x10, x4
+; CHECK-GI-NEXT:    mov w10, #127 // =0x7f
+; CHECK-GI-NEXT:    sub x15, x9, #64
 ; CHECK-GI-NEXT:    lsr x12, x0, x12
-; CHECK-GI-NEXT:    sub x14, x9, #64
-; CHECK-GI-NEXT:    lsl x15, x0, x9
+; CHECK-GI-NEXT:    bic x10, x10, x4
 ; CHECK-GI-NEXT:    extr x16, x3, x2, #1
 ; CHECK-GI-NEXT:    cmp x9, #64
-; CHECK-GI-NEXT:    sub x8, x8, x10
+; CHECK-GI-NEXT:    mvn x11, x4
+; CHECK-GI-NEXT:    lsl x14, x0, x4
 ; 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:    lsl x13, x0, x15
+; CHECK-GI-NEXT:    sub x8, x8, x10
 ; CHECK-GI-NEXT:    sub x15, x10, #64
-; CHECK-GI-NEXT:    lsr x17, x16, x10
+; CHECK-GI-NEXT:    lsr x17, x16, x11
 ; CHECK-GI-NEXT:    lsl x8, x12, x8
+; CHECK-GI-NEXT:    csel x14, x14, xzr, lo
 ; 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:    lsr x12, x12, x11
 ; CHECK-GI-NEXT:    csel x9, x1, x9, 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
@@ -153,8 +140,6 @@ define i37 @fshl_i37(i37 %x, i37 %y, i37 %z) {
 ; CHECK-GI-NEXT:    mov w9, #36 // =0x24
 ; CHECK-GI-NEXT:    ubfx x10, x1, #1, #36
 ; CHECK-GI-NEXT:    sub x9, x9, x8
-; CHECK-GI-NEXT:    and x8, x8, #0x1fffffffff
-; CHECK-GI-NEXT:    and x9, x9, #0x1fffffffff
 ; CHECK-GI-NEXT:    lsl x8, x0, x8
 ; CHECK-GI-NEXT:    lsr x9, x10, x9
 ; CHECK-GI-NEXT:    orr x0, x8, x9
@@ -300,12 +285,10 @@ define i32 @fshr_i32(i32 %x, i32 %y, i32 %z) {
 ;
 ; CHECK-GI-LABEL: fshr_i32:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    lsl w9, w0, #1
-; CHECK-GI-NEXT:    and w10, w2, #0x1f
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w8, w9, w8
-; CHECK-GI-NEXT:    lsr w9, w1, w10
+; CHECK-GI-NEXT:    lsl w8, w0, #1
+; CHECK-GI-NEXT:    mvn w9, w2
+; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsr w9, w1, w2
 ; CHECK-GI-NEXT:    orr w0, w8, w9
 ; CHECK-GI-NEXT:    ret
   %f = call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %z)
@@ -324,12 +307,10 @@ define i64 @fshr_i64(i64 %x, i64 %y, i64 %z) {
 ;
 ; CHECK-GI-LABEL: fshr_i64:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #63 // =0x3f
-; CHECK-GI-NEXT:    lsl x9, x0, #1
-; CHECK-GI-NEXT:    and x10, x2, #0x3f
-; CHECK-GI-NEXT:    bic x8, x8, x2
-; CHECK-GI-NEXT:    lsl x8, x9, x8
-; CHECK-GI-NEXT:    lsr x9, x1, x10
+; CHECK-GI-NEXT:    lsl x8, x0, #1
+; CHECK-GI-NEXT:    mvn x9, x2
+; CHECK-GI-NEXT:    lsl x8, x8, x9
+; CHECK-GI-NEXT:    lsr x9, x1, x2
 ; CHECK-GI-NEXT:    orr x0, x8, x9
 ; CHECK-GI-NEXT:    ret
   %f = call i64 @llvm.fshr.i64(i64 %x, i64 %y, i64 %z)
@@ -368,8 +349,6 @@ define i37 @fshr_i37(i37 %x, i37 %y, i37 %z) {
 ; CHECK-GI-NEXT:    mov w9, #36 // =0x24
 ; CHECK-GI-NEXT:    lsl x10, x0, #1
 ; CHECK-GI-NEXT:    sub x9, x9, x8
-; CHECK-GI-NEXT:    and x8, x8, #0x1fffffffff
-; CHECK-GI-NEXT:    and x9, x9, #0x1fffffffff
 ; CHECK-GI-NEXT:    lsr x8, x11, x8
 ; CHECK-GI-NEXT:    lsl x9, x10, x9
 ; CHECK-GI-NEXT:    orr x0, x9, x8
@@ -551,14 +530,12 @@ define i32 @or_shl_fshl(i32 %x, i32 %y, i32 %s) {
 ;
 ; CHECK-GI-LABEL: or_shl_fshl:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    and w9, w2, #0x1f
-; CHECK-GI-NEXT:    lsr w10, w1, #1
-; CHECK-GI-NEXT:    lsl w11, w1, w2
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w9, w0, w9
-; CHECK-GI-NEXT:    lsr w8, w10, w8
-; CHECK-GI-NEXT:    orr w9, w9, w11
+; CHECK-GI-NEXT:    lsr w8, w1, #1
+; CHECK-GI-NEXT:    lsl w9, w1, w2
+; CHECK-GI-NEXT:    mvn w10, w2
+; CHECK-GI-NEXT:    lsl w11, w0, w2
+; CHECK-GI-NEXT:    lsr w8, w8, w10
+; CHECK-GI-NEXT:    orr w9, w11, w9
 ; CHECK-GI-NEXT:    orr w0, w9, w8
 ; CHECK-GI-NEXT:    ret
   %shy = shl i32 %y, %s
@@ -594,14 +571,12 @@ define i32 @or_shl_fshl_commute(i32 %x, i32 %y, i32 %s) {
 ;
 ; CHECK-GI-LABEL: or_shl_fshl_commute:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    and w9, w2, #0x1f
-; CHECK-GI-NEXT:    lsr w10, w1, #1
-; CHECK-GI-NEXT:    lsl w11, w1, w2
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w9, w0, w9
-; CHECK-GI-NEXT:    lsr w8, w10, w8
-; CHECK-GI-NEXT:    orr w9, w11, w9
+; CHECK-GI-NEXT:    lsr w8, w1, #1
+; CHECK-GI-NEXT:    lsl w9, w1, w2
+; CHECK-GI-NEXT:    mvn w10, w2
+; CHECK-GI-NEXT:    lsl w11, w0, w2
+; CHECK-GI-NEXT:    lsr w8, w8, w10
+; CHECK-GI-NEXT:    orr w9, w9, w11
 ; CHECK-GI-NEXT:    orr w0, w9, w8
 ; CHECK-GI-NEXT:    ret
   %shy = shl i32 %y, %s
@@ -637,14 +612,12 @@ define i32 @or_lshr_fshr(i32 %x, i32 %y, i32 %s) {
 ;
 ; CHECK-GI-LABEL: or_lshr_fshr:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    and w9, w2, #0x1f
-; CHECK-GI-NEXT:    lsl w10, w1, #1
-; CHECK-GI-NEXT:    lsr w11, w1, w2
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsr w9, w0, w9
-; CHECK-GI-NEXT:    lsl w8, w10, w8
-; CHECK-GI-NEXT:    orr w9, w9, w11
+; CHECK-GI-NEXT:    lsl w8, w1, #1
+; CHECK-GI-NEXT:    lsr w9, w1, w2
+; CHECK-GI-NEXT:    mvn w10, w2
+; CHECK-GI-NEXT:    lsr w11, w0, w2
+; CHECK-GI-NEXT:    lsl w8, w8, w10
+; CHECK-GI-NEXT:    orr w9, w11, w9
 ; CHECK-GI-NEXT:    orr w0, w8, w9
 ; CHECK-GI-NEXT:    ret
   %shy = lshr i32 %y, %s
@@ -679,14 +652,12 @@ define i32 @or_lshr_fshr_commute(i32 %x, i32 %y, i32 %s) {
 ;
 ; CHECK-GI-LABEL: or_lshr_fshr_commute:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    and w9, w2, #0x1f
-; CHECK-GI-NEXT:    lsl w10, w1, #1
-; CHECK-GI-NEXT:    lsr w11, w1, w2
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsr w9, w0, w9
-; CHECK-GI-NEXT:    lsl w8, w10, w8
-; CHECK-GI-NEXT:    orr w9, w11, w9
+; CHECK-GI-NEXT:    lsl w8, w1, #1
+; CHECK-GI-NEXT:    lsr w9, w1, w2
+; CHECK-GI-NEXT:    mvn w10, w2
+; CHECK-GI-NEXT:    lsr w11, w0, w2
+; CHECK-GI-NEXT:    lsl w8, w8, w10
+; CHECK-GI-NEXT:    orr w9, w9, w11
 ; CHECK-GI-NEXT:    orr w0, w9, w8
 ; CHECK-GI-NEXT:    ret
   %shy = lshr i32 %y, %s
@@ -709,25 +680,14 @@ define i32 @or_lshr_rotr_commute(i32 %x, i32 %y, i32 %s) {
 }
 
 define i32 @or_shl_fshl_simplify(i32 %x, i32 %y, i32 %s) {
-; CHECK-SD-LABEL: or_shl_fshl_simplify:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    lsr w8, w0, #1
-; CHECK-SD-NEXT:    mvn w9, w2
-; CHECK-SD-NEXT:    lsl w10, w1, w2
-; CHECK-SD-NEXT:    lsr w8, w8, w9
-; CHECK-SD-NEXT:    orr w0, w10, w8
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: or_shl_fshl_simplify:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    lsr w9, w0, #1
-; CHECK-GI-NEXT:    and w10, w2, #0x1f
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w10, w1, w10
-; CHECK-GI-NEXT:    lsr w8, w9, w8
-; CHECK-GI-NEXT:    orr w0, w10, w8
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: or_shl_fshl_simplify:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    lsr w8, w0, #1
+; CHECK-NEXT:    mvn w9, w2
+; CHECK-NEXT:    lsl w10, w1, w2
+; CHECK-NEXT:    lsr w8, w8, w9
+; CHECK-NEXT:    orr w0, w10, w8
+; CHECK-NEXT:    ret
   %shy = shl i32 %y, %s
   %fun = call i32 @llvm.fshl.i32(i32 %y, i32 %x, i32 %s)
   %or = or i32 %fun, %shy
@@ -746,12 +706,10 @@ define i32 @or_lshr_fshr_simplify(i32 %x, i32 %y, i32 %s) {
 ;
 ; CHECK-GI-LABEL: or_lshr_fshr_simplify:
 ; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
-; CHECK-GI-NEXT:    lsl w9, w0, #1
-; CHECK-GI-NEXT:    and w10, w2, #0x1f
-; CHECK-GI-NEXT:    bic w8, w8, w2
-; CHECK-GI-NEXT:    lsl w8, w9, w8
-; CHECK-GI-NEXT:    lsr w9, w1, w10
+; CHECK-GI-NEXT:    lsl w8, w0, #1
+; CHECK-GI-NEXT:    mvn w9, w2
+; CHECK-GI-NEXT:    lsl w8, w8, w9
+; CHECK-GI-NEXT:    lsr w9, w1, w2
 ; CHECK-GI-NEXT:    orr w0, w8, w9
 ; CHECK-GI-NEXT:    ret
   %shy = lshr i32 %y, %s



More information about the llvm-commits mailing list