[llvm] [RISCV] Restrict when we fold an ADD_LO into a load/store address. (PR #93129)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Wed May 22 20:27:57 PDT 2024


https://github.com/topperc created https://github.com/llvm/llvm-project/pull/93129

Don't fold if there are loads/stores that use the ADD_LO with a non-zero immediate offset that can't be folded based on alignment.

This avoids cases where some loads/stores use the LUI directly and other loads/store uses the result of an ADDI that depends on the LUI.

This increases the latency to the load that we no longer fold, but reduces the need for a temporary register to hold the LUI result for multiple uses.

This is preparation for instroducing a rematerializable LUI+ADDI pseudoinstruction.

>From c5379195f4824e5e6d9739d790a9508feda6d2b9 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Wed, 22 May 2024 19:48:00 -0700
Subject: [PATCH] [RISCV] Restrict when we fold an ADD_LO into a load/store
 address.

Don't fold if there are loads/stores that use the ADD_LO with a
non-zero immediate offset that can't be folded based on alignment.

This avoids cases where some loads/stores use the LUI directly and
other loads/store uses the result of an ADDI that depends on the LUI.

This increases the latency to the load that we no longer fold, but
reduces the need for a temporary register to hold the LUI result
for multiple uses.

This is preparation for instroducing a rematerializable LUI+ADDI
pseudoinstruction.

Co-authored-by: Jesse Huang <jesse.huang at sifive.com>
---
 llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp   |   75 +-
 llvm/test/CodeGen/RISCV/bfloat-mem.ll         |   10 +-
 llvm/test/CodeGen/RISCV/byval.ll              |    8 +-
 .../test/CodeGen/RISCV/callee-saved-fpr32s.ll | 2404 +++++++-------
 .../test/CodeGen/RISCV/callee-saved-fpr64s.ll | 1468 +++++----
 llvm/test/CodeGen/RISCV/callee-saved-gprs.ll  | 2910 ++++++++---------
 llvm/test/CodeGen/RISCV/double-mem.ll         |   38 +-
 llvm/test/CodeGen/RISCV/float-mem.ll          |   20 +-
 .../test/CodeGen/RISCV/fold-addi-loadstore.ll |   32 +-
 .../test/CodeGen/RISCV/global-merge-offset.ll |   14 +-
 llvm/test/CodeGen/RISCV/global-merge.ll       |    2 +-
 llvm/test/CodeGen/RISCV/half-mem.ll           |   40 +-
 .../CodeGen/RISCV/hoist-global-addr-base.ll   |    4 +-
 llvm/test/CodeGen/RISCV/mem.ll                |   12 +-
 llvm/test/CodeGen/RISCV/mem64.ll              |   12 +-
 llvm/test/CodeGen/RISCV/memcpy.ll             |  140 +-
 llvm/test/CodeGen/RISCV/push-pop-popret.ll    | 2906 ++++++++--------
 .../CodeGen/RISCV/rv64-legal-i32/mem64.ll     |   12 +-
 .../rvv/fixed-vectors-store-merge-crash.ll    |   12 +-
 llvm/test/CodeGen/RISCV/saverestore.ll        | 2377 +++++++++++++-
 .../CodeGen/RISCV/zext-with-load-is-free.ll   |    8 +-
 21 files changed, 7295 insertions(+), 5209 deletions(-)

diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
index d965dd4fc9a95..7c0908f18e28b 100644
--- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
@@ -2457,6 +2457,61 @@ static bool isWorthFoldingAdd(SDValue Add) {
   return true;
 }
 
+// To prevent SelectAddrRegImm from folding offsets that conflicts with the
+// fusion of PseudoLIAddr, check if the offset of every use of a given address
+// is within the alignment
+static bool areUserOffsetsWithinAlignment(SDValue Addr, Align Alignment) {
+  for (auto *Use : Addr->uses()) {
+    if (!Use->isMachineOpcode()) {
+      // Don't allow stores of the value. It must be used as the address.
+      if (Use->getOpcode() == ISD::STORE &&
+          cast<StoreSDNode>(Use)->getValue() == Addr)
+        return false;
+      if (Use->getOpcode() == ISD::ATOMIC_STORE &&
+          cast<AtomicSDNode>(Use)->getVal() == Addr)
+        return false;
+      // If the user is direct load/store, there is no offset.
+      if (Use->getOpcode() == ISD::LOAD || Use->getOpcode() == ISD::STORE ||
+          Use->getOpcode() == ISD::ATOMIC_LOAD ||
+          Use->getOpcode() == ISD::ATOMIC_STORE)
+        continue;
+      if (Use->getOpcode() == ISD::ADD &&
+          isa<ConstantSDNode>(Use->getOperand(1)) &&
+          Alignment > cast<ConstantSDNode>(Use->getOperand(1))->getSExtValue())
+        continue;
+
+      return false;
+    }
+
+    // If user is already selected, get offsets from load/store instructions
+    unsigned int Opcode = Use->getMachineOpcode();
+    if (Opcode == RISCV::LB || Opcode == RISCV::LBU || Opcode == RISCV::LH ||
+        Opcode == RISCV::LHU || Opcode == RISCV::LW || Opcode == RISCV::LWU ||
+        Opcode == RISCV::LD || Opcode == RISCV::FLH || Opcode == RISCV::FLW ||
+        Opcode == RISCV::FLD) {
+      if (auto *Offset = dyn_cast<ConstantSDNode>(Use->getOperand(1))) {
+        if (Offset->isZero() || Alignment > Offset->getSExtValue())
+          continue;
+      }
+      return false;
+    }
+    if (Opcode == RISCV::SB || Opcode == RISCV::SH || Opcode == RISCV::SW ||
+        Opcode == RISCV::SD || Opcode == RISCV::FSH || Opcode == RISCV::FSW ||
+        Opcode == RISCV::FSD) {
+      // Also check if Addr is used as the value of store.
+      if (Use->getOperand(0) == Addr)
+        return false;
+      if (auto *Offset = dyn_cast<ConstantSDNode>(Use->getOperand(2))) {
+        if (Offset->isZero() || Alignment > Offset->getSExtValue())
+          continue;
+      }
+      return false;
+    }
+    return false;
+  }
+
+  return true;
+}
 bool RISCVDAGToDAGISel::SelectAddrRegRegScale(SDValue Addr,
                                               unsigned MaxShiftAmount,
                                               SDValue &Base, SDValue &Index,
@@ -2520,9 +2575,21 @@ bool RISCVDAGToDAGISel::SelectAddrRegImm(SDValue Addr, SDValue &Base,
   MVT VT = Addr.getSimpleValueType();
 
   if (Addr.getOpcode() == RISCVISD::ADD_LO) {
-    Base = Addr.getOperand(0);
-    Offset = Addr.getOperand(1);
-    return true;
+    bool CanFold = true;
+    // Unconditionally fold if operand 1 is not a global address (e.g.
+    // externsymbol)
+    if (auto *GA = dyn_cast<GlobalAddressSDNode>(Addr.getOperand(1))) {
+      const DataLayout &DL = CurDAG->getDataLayout();
+      Align Alignment = commonAlignment(
+          GA->getGlobal()->getPointerAlignment(DL), GA->getOffset());
+      if (!areUserOffsetsWithinAlignment(Addr, Alignment))
+        CanFold = false;
+    }
+    if (CanFold) {
+      Base = Addr.getOperand(0);
+      Offset = Addr.getOperand(1);
+      return true;
+    }
   }
 
   int64_t RV32ZdinxRange = IsINX ? 4 : 0;
@@ -2541,7 +2608,7 @@ bool RISCVDAGToDAGISel::SelectAddrRegImm(SDValue Addr, SDValue &Base,
           const DataLayout &DL = CurDAG->getDataLayout();
           Align Alignment = commonAlignment(
               GA->getGlobal()->getPointerAlignment(DL), GA->getOffset());
-          if (CVal == 0 || Alignment > CVal) {
+          if (areUserOffsetsWithinAlignment(Base, Alignment)) {
             int64_t CombinedOffset = CVal + GA->getOffset();
             Base = Base.getOperand(0);
             Offset = CurDAG->getTargetGlobalAddress(
diff --git a/llvm/test/CodeGen/RISCV/bfloat-mem.ll b/llvm/test/CodeGen/RISCV/bfloat-mem.ll
index 4b6c0c29d660b..39340c85cfadc 100644
--- a/llvm/test/CodeGen/RISCV/bfloat-mem.ll
+++ b/llvm/test/CodeGen/RISCV/bfloat-mem.ll
@@ -53,11 +53,11 @@ define bfloat @flh_fsh_global(bfloat %a, bfloat %b) nounwind {
 ; CHECK-NEXT:    fadd.s fa5, fa4, fa5
 ; CHECK-NEXT:    fcvt.bf16.s fa0, fa5
 ; CHECK-NEXT:    lui a0, %hi(G)
-; CHECK-NEXT:    flh fa5, %lo(G)(a0)
-; CHECK-NEXT:    addi a1, a0, %lo(G)
-; CHECK-NEXT:    fsh fa0, %lo(G)(a0)
-; CHECK-NEXT:    flh fa5, 18(a1)
-; CHECK-NEXT:    fsh fa0, 18(a1)
+; CHECK-NEXT:    addi a0, a0, %lo(G)
+; CHECK-NEXT:    flh fa5, 0(a0)
+; CHECK-NEXT:    fsh fa0, 0(a0)
+; CHECK-NEXT:    flh fa5, 18(a0)
+; CHECK-NEXT:    fsh fa0, 18(a0)
 ; CHECK-NEXT:    ret
   %1 = fadd bfloat %a, %b
   %2 = load volatile bfloat, ptr @G
diff --git a/llvm/test/CodeGen/RISCV/byval.ll b/llvm/test/CodeGen/RISCV/byval.ll
index 9151f3b03e7c2..c5e48ee75e482 100644
--- a/llvm/test/CodeGen/RISCV/byval.ll
+++ b/llvm/test/CodeGen/RISCV/byval.ll
@@ -22,15 +22,15 @@ define void @caller() nounwind {
 ; RV32I-NEXT:    addi sp, sp, -32
 ; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    lui a0, %hi(foo)
-; RV32I-NEXT:    lw a1, %lo(foo)(a0)
-; RV32I-NEXT:    sw a1, 12(sp)
 ; RV32I-NEXT:    addi a0, a0, %lo(foo)
 ; RV32I-NEXT:    lw a1, 12(a0)
 ; RV32I-NEXT:    sw a1, 24(sp)
 ; RV32I-NEXT:    lw a1, 8(a0)
 ; RV32I-NEXT:    sw a1, 20(sp)
-; RV32I-NEXT:    lw a0, 4(a0)
-; RV32I-NEXT:    sw a0, 16(sp)
+; RV32I-NEXT:    lw a1, 4(a0)
+; RV32I-NEXT:    sw a1, 16(sp)
+; RV32I-NEXT:    lw a0, 0(a0)
+; RV32I-NEXT:    sw a0, 12(sp)
 ; RV32I-NEXT:    addi a0, sp, 12
 ; RV32I-NEXT:    call callee
 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
diff --git a/llvm/test/CodeGen/RISCV/callee-saved-fpr32s.ll b/llvm/test/CodeGen/RISCV/callee-saved-fpr32s.ll
index 2122b3fd91788..b525f9aa59c09 100644
--- a/llvm/test/CodeGen/RISCV/callee-saved-fpr32s.ll
+++ b/llvm/test/CodeGen/RISCV/callee-saved-fpr32s.ll
@@ -28,281 +28,281 @@ define void @callee() nounwind {
 ; ILP32-LABEL: callee:
 ; ILP32:       # %bb.0:
 ; ILP32-NEXT:    lui a0, %hi(var)
-; ILP32-NEXT:    flw fa5, %lo(var)(a0)
-; ILP32-NEXT:    flw fa4, %lo(var+4)(a0)
-; ILP32-NEXT:    flw fa3, %lo(var+8)(a0)
-; ILP32-NEXT:    flw fa2, %lo(var+12)(a0)
-; ILP32-NEXT:    addi a1, a0, %lo(var)
-; ILP32-NEXT:    flw fa1, 16(a1)
-; ILP32-NEXT:    flw fa0, 20(a1)
-; ILP32-NEXT:    flw ft0, 24(a1)
-; ILP32-NEXT:    flw ft1, 28(a1)
-; ILP32-NEXT:    flw ft2, 32(a1)
-; ILP32-NEXT:    flw ft3, 36(a1)
-; ILP32-NEXT:    flw ft4, 40(a1)
-; ILP32-NEXT:    flw ft5, 44(a1)
-; ILP32-NEXT:    flw ft6, 48(a1)
-; ILP32-NEXT:    flw ft7, 52(a1)
-; ILP32-NEXT:    flw fa6, 56(a1)
-; ILP32-NEXT:    flw fa7, 60(a1)
-; ILP32-NEXT:    flw ft8, 64(a1)
-; ILP32-NEXT:    flw ft9, 68(a1)
-; ILP32-NEXT:    flw ft10, 72(a1)
-; ILP32-NEXT:    flw ft11, 76(a1)
-; ILP32-NEXT:    flw fs0, 80(a1)
-; ILP32-NEXT:    flw fs1, 84(a1)
-; ILP32-NEXT:    flw fs2, 88(a1)
-; ILP32-NEXT:    flw fs3, 92(a1)
-; ILP32-NEXT:    flw fs4, 96(a1)
-; ILP32-NEXT:    flw fs5, 100(a1)
-; ILP32-NEXT:    flw fs6, 104(a1)
-; ILP32-NEXT:    flw fs7, 108(a1)
-; ILP32-NEXT:    flw fs8, 124(a1)
-; ILP32-NEXT:    flw fs9, 120(a1)
-; ILP32-NEXT:    flw fs10, 116(a1)
-; ILP32-NEXT:    flw fs11, 112(a1)
-; ILP32-NEXT:    fsw fs8, 124(a1)
-; ILP32-NEXT:    fsw fs9, 120(a1)
-; ILP32-NEXT:    fsw fs10, 116(a1)
-; ILP32-NEXT:    fsw fs11, 112(a1)
-; ILP32-NEXT:    fsw fs7, 108(a1)
-; ILP32-NEXT:    fsw fs6, 104(a1)
-; ILP32-NEXT:    fsw fs5, 100(a1)
-; ILP32-NEXT:    fsw fs4, 96(a1)
-; ILP32-NEXT:    fsw fs3, 92(a1)
-; ILP32-NEXT:    fsw fs2, 88(a1)
-; ILP32-NEXT:    fsw fs1, 84(a1)
-; ILP32-NEXT:    fsw fs0, 80(a1)
-; ILP32-NEXT:    fsw ft11, 76(a1)
-; ILP32-NEXT:    fsw ft10, 72(a1)
-; ILP32-NEXT:    fsw ft9, 68(a1)
-; ILP32-NEXT:    fsw ft8, 64(a1)
-; ILP32-NEXT:    fsw fa7, 60(a1)
-; ILP32-NEXT:    fsw fa6, 56(a1)
-; ILP32-NEXT:    fsw ft7, 52(a1)
-; ILP32-NEXT:    fsw ft6, 48(a1)
-; ILP32-NEXT:    fsw ft5, 44(a1)
-; ILP32-NEXT:    fsw ft4, 40(a1)
-; ILP32-NEXT:    fsw ft3, 36(a1)
-; ILP32-NEXT:    fsw ft2, 32(a1)
-; ILP32-NEXT:    fsw ft1, 28(a1)
-; ILP32-NEXT:    fsw ft0, 24(a1)
-; ILP32-NEXT:    fsw fa0, 20(a1)
-; ILP32-NEXT:    fsw fa1, 16(a1)
-; ILP32-NEXT:    fsw fa2, %lo(var+12)(a0)
-; ILP32-NEXT:    fsw fa3, %lo(var+8)(a0)
-; ILP32-NEXT:    fsw fa4, %lo(var+4)(a0)
-; ILP32-NEXT:    fsw fa5, %lo(var)(a0)
+; ILP32-NEXT:    addi a0, a0, %lo(var)
+; ILP32-NEXT:    flw fa5, 0(a0)
+; ILP32-NEXT:    flw fa4, 4(a0)
+; ILP32-NEXT:    flw fa3, 8(a0)
+; ILP32-NEXT:    flw fa2, 12(a0)
+; ILP32-NEXT:    flw fa1, 16(a0)
+; ILP32-NEXT:    flw fa0, 20(a0)
+; ILP32-NEXT:    flw ft0, 24(a0)
+; ILP32-NEXT:    flw ft1, 28(a0)
+; ILP32-NEXT:    flw ft2, 32(a0)
+; ILP32-NEXT:    flw ft3, 36(a0)
+; ILP32-NEXT:    flw ft4, 40(a0)
+; ILP32-NEXT:    flw ft5, 44(a0)
+; ILP32-NEXT:    flw ft6, 48(a0)
+; ILP32-NEXT:    flw ft7, 52(a0)
+; ILP32-NEXT:    flw fa6, 56(a0)
+; ILP32-NEXT:    flw fa7, 60(a0)
+; ILP32-NEXT:    flw ft8, 64(a0)
+; ILP32-NEXT:    flw ft9, 68(a0)
+; ILP32-NEXT:    flw ft10, 72(a0)
+; ILP32-NEXT:    flw ft11, 76(a0)
+; ILP32-NEXT:    flw fs0, 80(a0)
+; ILP32-NEXT:    flw fs1, 84(a0)
+; ILP32-NEXT:    flw fs2, 88(a0)
+; ILP32-NEXT:    flw fs3, 92(a0)
+; ILP32-NEXT:    flw fs4, 96(a0)
+; ILP32-NEXT:    flw fs5, 100(a0)
+; ILP32-NEXT:    flw fs6, 104(a0)
+; ILP32-NEXT:    flw fs7, 108(a0)
+; ILP32-NEXT:    flw fs8, 124(a0)
+; ILP32-NEXT:    flw fs9, 120(a0)
+; ILP32-NEXT:    flw fs10, 116(a0)
+; ILP32-NEXT:    flw fs11, 112(a0)
+; ILP32-NEXT:    fsw fs8, 124(a0)
+; ILP32-NEXT:    fsw fs9, 120(a0)
+; ILP32-NEXT:    fsw fs10, 116(a0)
+; ILP32-NEXT:    fsw fs11, 112(a0)
+; ILP32-NEXT:    fsw fs7, 108(a0)
+; ILP32-NEXT:    fsw fs6, 104(a0)
+; ILP32-NEXT:    fsw fs5, 100(a0)
+; ILP32-NEXT:    fsw fs4, 96(a0)
+; ILP32-NEXT:    fsw fs3, 92(a0)
+; ILP32-NEXT:    fsw fs2, 88(a0)
+; ILP32-NEXT:    fsw fs1, 84(a0)
+; ILP32-NEXT:    fsw fs0, 80(a0)
+; ILP32-NEXT:    fsw ft11, 76(a0)
+; ILP32-NEXT:    fsw ft10, 72(a0)
+; ILP32-NEXT:    fsw ft9, 68(a0)
+; ILP32-NEXT:    fsw ft8, 64(a0)
+; ILP32-NEXT:    fsw fa7, 60(a0)
+; ILP32-NEXT:    fsw fa6, 56(a0)
+; ILP32-NEXT:    fsw ft7, 52(a0)
+; ILP32-NEXT:    fsw ft6, 48(a0)
+; ILP32-NEXT:    fsw ft5, 44(a0)
+; ILP32-NEXT:    fsw ft4, 40(a0)
+; ILP32-NEXT:    fsw ft3, 36(a0)
+; ILP32-NEXT:    fsw ft2, 32(a0)
+; ILP32-NEXT:    fsw ft1, 28(a0)
+; ILP32-NEXT:    fsw ft0, 24(a0)
+; ILP32-NEXT:    fsw fa0, 20(a0)
+; ILP32-NEXT:    fsw fa1, 16(a0)
+; ILP32-NEXT:    fsw fa2, 12(a0)
+; ILP32-NEXT:    fsw fa3, 8(a0)
+; ILP32-NEXT:    fsw fa4, 4(a0)
+; ILP32-NEXT:    fsw fa5, 0(a0)
 ; ILP32-NEXT:    ret
 ;
 ; ILP32E-LABEL: callee:
 ; ILP32E:       # %bb.0:
 ; ILP32E-NEXT:    lui a0, %hi(var)
-; ILP32E-NEXT:    flw fa5, %lo(var)(a0)
-; ILP32E-NEXT:    flw fa4, %lo(var+4)(a0)
-; ILP32E-NEXT:    flw fa3, %lo(var+8)(a0)
-; ILP32E-NEXT:    flw fa2, %lo(var+12)(a0)
-; ILP32E-NEXT:    addi a1, a0, %lo(var)
-; ILP32E-NEXT:    flw fa1, 16(a1)
-; ILP32E-NEXT:    flw fa0, 20(a1)
-; ILP32E-NEXT:    flw ft0, 24(a1)
-; ILP32E-NEXT:    flw ft1, 28(a1)
-; ILP32E-NEXT:    flw ft2, 32(a1)
-; ILP32E-NEXT:    flw ft3, 36(a1)
-; ILP32E-NEXT:    flw ft4, 40(a1)
-; ILP32E-NEXT:    flw ft5, 44(a1)
-; ILP32E-NEXT:    flw ft6, 48(a1)
-; ILP32E-NEXT:    flw ft7, 52(a1)
-; ILP32E-NEXT:    flw fa6, 56(a1)
-; ILP32E-NEXT:    flw fa7, 60(a1)
-; ILP32E-NEXT:    flw ft8, 64(a1)
-; ILP32E-NEXT:    flw ft9, 68(a1)
-; ILP32E-NEXT:    flw ft10, 72(a1)
-; ILP32E-NEXT:    flw ft11, 76(a1)
-; ILP32E-NEXT:    flw fs0, 80(a1)
-; ILP32E-NEXT:    flw fs1, 84(a1)
-; ILP32E-NEXT:    flw fs2, 88(a1)
-; ILP32E-NEXT:    flw fs3, 92(a1)
-; ILP32E-NEXT:    flw fs4, 96(a1)
-; ILP32E-NEXT:    flw fs5, 100(a1)
-; ILP32E-NEXT:    flw fs6, 104(a1)
-; ILP32E-NEXT:    flw fs7, 108(a1)
-; ILP32E-NEXT:    flw fs8, 124(a1)
-; ILP32E-NEXT:    flw fs9, 120(a1)
-; ILP32E-NEXT:    flw fs10, 116(a1)
-; ILP32E-NEXT:    flw fs11, 112(a1)
-; ILP32E-NEXT:    fsw fs8, 124(a1)
-; ILP32E-NEXT:    fsw fs9, 120(a1)
-; ILP32E-NEXT:    fsw fs10, 116(a1)
-; ILP32E-NEXT:    fsw fs11, 112(a1)
-; ILP32E-NEXT:    fsw fs7, 108(a1)
-; ILP32E-NEXT:    fsw fs6, 104(a1)
-; ILP32E-NEXT:    fsw fs5, 100(a1)
-; ILP32E-NEXT:    fsw fs4, 96(a1)
-; ILP32E-NEXT:    fsw fs3, 92(a1)
-; ILP32E-NEXT:    fsw fs2, 88(a1)
-; ILP32E-NEXT:    fsw fs1, 84(a1)
-; ILP32E-NEXT:    fsw fs0, 80(a1)
-; ILP32E-NEXT:    fsw ft11, 76(a1)
-; ILP32E-NEXT:    fsw ft10, 72(a1)
-; ILP32E-NEXT:    fsw ft9, 68(a1)
-; ILP32E-NEXT:    fsw ft8, 64(a1)
-; ILP32E-NEXT:    fsw fa7, 60(a1)
-; ILP32E-NEXT:    fsw fa6, 56(a1)
-; ILP32E-NEXT:    fsw ft7, 52(a1)
-; ILP32E-NEXT:    fsw ft6, 48(a1)
-; ILP32E-NEXT:    fsw ft5, 44(a1)
-; ILP32E-NEXT:    fsw ft4, 40(a1)
-; ILP32E-NEXT:    fsw ft3, 36(a1)
-; ILP32E-NEXT:    fsw ft2, 32(a1)
-; ILP32E-NEXT:    fsw ft1, 28(a1)
-; ILP32E-NEXT:    fsw ft0, 24(a1)
-; ILP32E-NEXT:    fsw fa0, 20(a1)
-; ILP32E-NEXT:    fsw fa1, 16(a1)
-; ILP32E-NEXT:    fsw fa2, %lo(var+12)(a0)
-; ILP32E-NEXT:    fsw fa3, %lo(var+8)(a0)
-; ILP32E-NEXT:    fsw fa4, %lo(var+4)(a0)
-; ILP32E-NEXT:    fsw fa5, %lo(var)(a0)
+; ILP32E-NEXT:    addi a0, a0, %lo(var)
+; ILP32E-NEXT:    flw fa5, 0(a0)
+; ILP32E-NEXT:    flw fa4, 4(a0)
+; ILP32E-NEXT:    flw fa3, 8(a0)
+; ILP32E-NEXT:    flw fa2, 12(a0)
+; ILP32E-NEXT:    flw fa1, 16(a0)
+; ILP32E-NEXT:    flw fa0, 20(a0)
+; ILP32E-NEXT:    flw ft0, 24(a0)
+; ILP32E-NEXT:    flw ft1, 28(a0)
+; ILP32E-NEXT:    flw ft2, 32(a0)
+; ILP32E-NEXT:    flw ft3, 36(a0)
+; ILP32E-NEXT:    flw ft4, 40(a0)
+; ILP32E-NEXT:    flw ft5, 44(a0)
+; ILP32E-NEXT:    flw ft6, 48(a0)
+; ILP32E-NEXT:    flw ft7, 52(a0)
+; ILP32E-NEXT:    flw fa6, 56(a0)
+; ILP32E-NEXT:    flw fa7, 60(a0)
+; ILP32E-NEXT:    flw ft8, 64(a0)
+; ILP32E-NEXT:    flw ft9, 68(a0)
+; ILP32E-NEXT:    flw ft10, 72(a0)
+; ILP32E-NEXT:    flw ft11, 76(a0)
+; ILP32E-NEXT:    flw fs0, 80(a0)
+; ILP32E-NEXT:    flw fs1, 84(a0)
+; ILP32E-NEXT:    flw fs2, 88(a0)
+; ILP32E-NEXT:    flw fs3, 92(a0)
+; ILP32E-NEXT:    flw fs4, 96(a0)
+; ILP32E-NEXT:    flw fs5, 100(a0)
+; ILP32E-NEXT:    flw fs6, 104(a0)
+; ILP32E-NEXT:    flw fs7, 108(a0)
+; ILP32E-NEXT:    flw fs8, 124(a0)
+; ILP32E-NEXT:    flw fs9, 120(a0)
+; ILP32E-NEXT:    flw fs10, 116(a0)
+; ILP32E-NEXT:    flw fs11, 112(a0)
+; ILP32E-NEXT:    fsw fs8, 124(a0)
+; ILP32E-NEXT:    fsw fs9, 120(a0)
+; ILP32E-NEXT:    fsw fs10, 116(a0)
+; ILP32E-NEXT:    fsw fs11, 112(a0)
+; ILP32E-NEXT:    fsw fs7, 108(a0)
+; ILP32E-NEXT:    fsw fs6, 104(a0)
+; ILP32E-NEXT:    fsw fs5, 100(a0)
+; ILP32E-NEXT:    fsw fs4, 96(a0)
+; ILP32E-NEXT:    fsw fs3, 92(a0)
+; ILP32E-NEXT:    fsw fs2, 88(a0)
+; ILP32E-NEXT:    fsw fs1, 84(a0)
+; ILP32E-NEXT:    fsw fs0, 80(a0)
+; ILP32E-NEXT:    fsw ft11, 76(a0)
+; ILP32E-NEXT:    fsw ft10, 72(a0)
+; ILP32E-NEXT:    fsw ft9, 68(a0)
+; ILP32E-NEXT:    fsw ft8, 64(a0)
+; ILP32E-NEXT:    fsw fa7, 60(a0)
+; ILP32E-NEXT:    fsw fa6, 56(a0)
+; ILP32E-NEXT:    fsw ft7, 52(a0)
+; ILP32E-NEXT:    fsw ft6, 48(a0)
+; ILP32E-NEXT:    fsw ft5, 44(a0)
+; ILP32E-NEXT:    fsw ft4, 40(a0)
+; ILP32E-NEXT:    fsw ft3, 36(a0)
+; ILP32E-NEXT:    fsw ft2, 32(a0)
+; ILP32E-NEXT:    fsw ft1, 28(a0)
+; ILP32E-NEXT:    fsw ft0, 24(a0)
+; ILP32E-NEXT:    fsw fa0, 20(a0)
+; ILP32E-NEXT:    fsw fa1, 16(a0)
+; ILP32E-NEXT:    fsw fa2, 12(a0)
+; ILP32E-NEXT:    fsw fa3, 8(a0)
+; ILP32E-NEXT:    fsw fa4, 4(a0)
+; ILP32E-NEXT:    fsw fa5, 0(a0)
 ; ILP32E-NEXT:    ret
 ;
 ; LP64-LABEL: callee:
 ; LP64:       # %bb.0:
 ; LP64-NEXT:    lui a0, %hi(var)
-; LP64-NEXT:    flw fa5, %lo(var)(a0)
-; LP64-NEXT:    flw fa4, %lo(var+4)(a0)
-; LP64-NEXT:    flw fa3, %lo(var+8)(a0)
-; LP64-NEXT:    flw fa2, %lo(var+12)(a0)
-; LP64-NEXT:    addi a1, a0, %lo(var)
-; LP64-NEXT:    flw fa1, 16(a1)
-; LP64-NEXT:    flw fa0, 20(a1)
-; LP64-NEXT:    flw ft0, 24(a1)
-; LP64-NEXT:    flw ft1, 28(a1)
-; LP64-NEXT:    flw ft2, 32(a1)
-; LP64-NEXT:    flw ft3, 36(a1)
-; LP64-NEXT:    flw ft4, 40(a1)
-; LP64-NEXT:    flw ft5, 44(a1)
-; LP64-NEXT:    flw ft6, 48(a1)
-; LP64-NEXT:    flw ft7, 52(a1)
-; LP64-NEXT:    flw fa6, 56(a1)
-; LP64-NEXT:    flw fa7, 60(a1)
-; LP64-NEXT:    flw ft8, 64(a1)
-; LP64-NEXT:    flw ft9, 68(a1)
-; LP64-NEXT:    flw ft10, 72(a1)
-; LP64-NEXT:    flw ft11, 76(a1)
-; LP64-NEXT:    flw fs0, 80(a1)
-; LP64-NEXT:    flw fs1, 84(a1)
-; LP64-NEXT:    flw fs2, 88(a1)
-; LP64-NEXT:    flw fs3, 92(a1)
-; LP64-NEXT:    flw fs4, 96(a1)
-; LP64-NEXT:    flw fs5, 100(a1)
-; LP64-NEXT:    flw fs6, 104(a1)
-; LP64-NEXT:    flw fs7, 108(a1)
-; LP64-NEXT:    flw fs8, 124(a1)
-; LP64-NEXT:    flw fs9, 120(a1)
-; LP64-NEXT:    flw fs10, 116(a1)
-; LP64-NEXT:    flw fs11, 112(a1)
-; LP64-NEXT:    fsw fs8, 124(a1)
-; LP64-NEXT:    fsw fs9, 120(a1)
-; LP64-NEXT:    fsw fs10, 116(a1)
-; LP64-NEXT:    fsw fs11, 112(a1)
-; LP64-NEXT:    fsw fs7, 108(a1)
-; LP64-NEXT:    fsw fs6, 104(a1)
-; LP64-NEXT:    fsw fs5, 100(a1)
-; LP64-NEXT:    fsw fs4, 96(a1)
-; LP64-NEXT:    fsw fs3, 92(a1)
-; LP64-NEXT:    fsw fs2, 88(a1)
-; LP64-NEXT:    fsw fs1, 84(a1)
-; LP64-NEXT:    fsw fs0, 80(a1)
-; LP64-NEXT:    fsw ft11, 76(a1)
-; LP64-NEXT:    fsw ft10, 72(a1)
-; LP64-NEXT:    fsw ft9, 68(a1)
-; LP64-NEXT:    fsw ft8, 64(a1)
-; LP64-NEXT:    fsw fa7, 60(a1)
-; LP64-NEXT:    fsw fa6, 56(a1)
-; LP64-NEXT:    fsw ft7, 52(a1)
-; LP64-NEXT:    fsw ft6, 48(a1)
-; LP64-NEXT:    fsw ft5, 44(a1)
-; LP64-NEXT:    fsw ft4, 40(a1)
-; LP64-NEXT:    fsw ft3, 36(a1)
-; LP64-NEXT:    fsw ft2, 32(a1)
-; LP64-NEXT:    fsw ft1, 28(a1)
-; LP64-NEXT:    fsw ft0, 24(a1)
-; LP64-NEXT:    fsw fa0, 20(a1)
-; LP64-NEXT:    fsw fa1, 16(a1)
-; LP64-NEXT:    fsw fa2, %lo(var+12)(a0)
-; LP64-NEXT:    fsw fa3, %lo(var+8)(a0)
-; LP64-NEXT:    fsw fa4, %lo(var+4)(a0)
-; LP64-NEXT:    fsw fa5, %lo(var)(a0)
+; LP64-NEXT:    addi a0, a0, %lo(var)
+; LP64-NEXT:    flw fa5, 0(a0)
+; LP64-NEXT:    flw fa4, 4(a0)
+; LP64-NEXT:    flw fa3, 8(a0)
+; LP64-NEXT:    flw fa2, 12(a0)
+; LP64-NEXT:    flw fa1, 16(a0)
+; LP64-NEXT:    flw fa0, 20(a0)
+; LP64-NEXT:    flw ft0, 24(a0)
+; LP64-NEXT:    flw ft1, 28(a0)
+; LP64-NEXT:    flw ft2, 32(a0)
+; LP64-NEXT:    flw ft3, 36(a0)
+; LP64-NEXT:    flw ft4, 40(a0)
+; LP64-NEXT:    flw ft5, 44(a0)
+; LP64-NEXT:    flw ft6, 48(a0)
+; LP64-NEXT:    flw ft7, 52(a0)
+; LP64-NEXT:    flw fa6, 56(a0)
+; LP64-NEXT:    flw fa7, 60(a0)
+; LP64-NEXT:    flw ft8, 64(a0)
+; LP64-NEXT:    flw ft9, 68(a0)
+; LP64-NEXT:    flw ft10, 72(a0)
+; LP64-NEXT:    flw ft11, 76(a0)
+; LP64-NEXT:    flw fs0, 80(a0)
+; LP64-NEXT:    flw fs1, 84(a0)
+; LP64-NEXT:    flw fs2, 88(a0)
+; LP64-NEXT:    flw fs3, 92(a0)
+; LP64-NEXT:    flw fs4, 96(a0)
+; LP64-NEXT:    flw fs5, 100(a0)
+; LP64-NEXT:    flw fs6, 104(a0)
+; LP64-NEXT:    flw fs7, 108(a0)
+; LP64-NEXT:    flw fs8, 124(a0)
+; LP64-NEXT:    flw fs9, 120(a0)
+; LP64-NEXT:    flw fs10, 116(a0)
+; LP64-NEXT:    flw fs11, 112(a0)
+; LP64-NEXT:    fsw fs8, 124(a0)
+; LP64-NEXT:    fsw fs9, 120(a0)
+; LP64-NEXT:    fsw fs10, 116(a0)
+; LP64-NEXT:    fsw fs11, 112(a0)
+; LP64-NEXT:    fsw fs7, 108(a0)
+; LP64-NEXT:    fsw fs6, 104(a0)
+; LP64-NEXT:    fsw fs5, 100(a0)
+; LP64-NEXT:    fsw fs4, 96(a0)
+; LP64-NEXT:    fsw fs3, 92(a0)
+; LP64-NEXT:    fsw fs2, 88(a0)
+; LP64-NEXT:    fsw fs1, 84(a0)
+; LP64-NEXT:    fsw fs0, 80(a0)
+; LP64-NEXT:    fsw ft11, 76(a0)
+; LP64-NEXT:    fsw ft10, 72(a0)
+; LP64-NEXT:    fsw ft9, 68(a0)
+; LP64-NEXT:    fsw ft8, 64(a0)
+; LP64-NEXT:    fsw fa7, 60(a0)
+; LP64-NEXT:    fsw fa6, 56(a0)
+; LP64-NEXT:    fsw ft7, 52(a0)
+; LP64-NEXT:    fsw ft6, 48(a0)
+; LP64-NEXT:    fsw ft5, 44(a0)
+; LP64-NEXT:    fsw ft4, 40(a0)
+; LP64-NEXT:    fsw ft3, 36(a0)
+; LP64-NEXT:    fsw ft2, 32(a0)
+; LP64-NEXT:    fsw ft1, 28(a0)
+; LP64-NEXT:    fsw ft0, 24(a0)
+; LP64-NEXT:    fsw fa0, 20(a0)
+; LP64-NEXT:    fsw fa1, 16(a0)
+; LP64-NEXT:    fsw fa2, 12(a0)
+; LP64-NEXT:    fsw fa3, 8(a0)
+; LP64-NEXT:    fsw fa4, 4(a0)
+; LP64-NEXT:    fsw fa5, 0(a0)
 ; LP64-NEXT:    ret
 ;
 ; LP64E-LABEL: callee:
 ; LP64E:       # %bb.0:
 ; LP64E-NEXT:    lui a0, %hi(var)
-; LP64E-NEXT:    flw fa5, %lo(var)(a0)
-; LP64E-NEXT:    flw fa4, %lo(var+4)(a0)
-; LP64E-NEXT:    flw fa3, %lo(var+8)(a0)
-; LP64E-NEXT:    flw fa2, %lo(var+12)(a0)
-; LP64E-NEXT:    addi a1, a0, %lo(var)
-; LP64E-NEXT:    flw fa1, 16(a1)
-; LP64E-NEXT:    flw fa0, 20(a1)
-; LP64E-NEXT:    flw ft0, 24(a1)
-; LP64E-NEXT:    flw ft1, 28(a1)
-; LP64E-NEXT:    flw ft2, 32(a1)
-; LP64E-NEXT:    flw ft3, 36(a1)
-; LP64E-NEXT:    flw ft4, 40(a1)
-; LP64E-NEXT:    flw ft5, 44(a1)
-; LP64E-NEXT:    flw ft6, 48(a1)
-; LP64E-NEXT:    flw ft7, 52(a1)
-; LP64E-NEXT:    flw fa6, 56(a1)
-; LP64E-NEXT:    flw fa7, 60(a1)
-; LP64E-NEXT:    flw ft8, 64(a1)
-; LP64E-NEXT:    flw ft9, 68(a1)
-; LP64E-NEXT:    flw ft10, 72(a1)
-; LP64E-NEXT:    flw ft11, 76(a1)
-; LP64E-NEXT:    flw fs0, 80(a1)
-; LP64E-NEXT:    flw fs1, 84(a1)
-; LP64E-NEXT:    flw fs2, 88(a1)
-; LP64E-NEXT:    flw fs3, 92(a1)
-; LP64E-NEXT:    flw fs4, 96(a1)
-; LP64E-NEXT:    flw fs5, 100(a1)
-; LP64E-NEXT:    flw fs6, 104(a1)
-; LP64E-NEXT:    flw fs7, 108(a1)
-; LP64E-NEXT:    flw fs8, 124(a1)
-; LP64E-NEXT:    flw fs9, 120(a1)
-; LP64E-NEXT:    flw fs10, 116(a1)
-; LP64E-NEXT:    flw fs11, 112(a1)
-; LP64E-NEXT:    fsw fs8, 124(a1)
-; LP64E-NEXT:    fsw fs9, 120(a1)
-; LP64E-NEXT:    fsw fs10, 116(a1)
-; LP64E-NEXT:    fsw fs11, 112(a1)
-; LP64E-NEXT:    fsw fs7, 108(a1)
-; LP64E-NEXT:    fsw fs6, 104(a1)
-; LP64E-NEXT:    fsw fs5, 100(a1)
-; LP64E-NEXT:    fsw fs4, 96(a1)
-; LP64E-NEXT:    fsw fs3, 92(a1)
-; LP64E-NEXT:    fsw fs2, 88(a1)
-; LP64E-NEXT:    fsw fs1, 84(a1)
-; LP64E-NEXT:    fsw fs0, 80(a1)
-; LP64E-NEXT:    fsw ft11, 76(a1)
-; LP64E-NEXT:    fsw ft10, 72(a1)
-; LP64E-NEXT:    fsw ft9, 68(a1)
-; LP64E-NEXT:    fsw ft8, 64(a1)
-; LP64E-NEXT:    fsw fa7, 60(a1)
-; LP64E-NEXT:    fsw fa6, 56(a1)
-; LP64E-NEXT:    fsw ft7, 52(a1)
-; LP64E-NEXT:    fsw ft6, 48(a1)
-; LP64E-NEXT:    fsw ft5, 44(a1)
-; LP64E-NEXT:    fsw ft4, 40(a1)
-; LP64E-NEXT:    fsw ft3, 36(a1)
-; LP64E-NEXT:    fsw ft2, 32(a1)
-; LP64E-NEXT:    fsw ft1, 28(a1)
-; LP64E-NEXT:    fsw ft0, 24(a1)
-; LP64E-NEXT:    fsw fa0, 20(a1)
-; LP64E-NEXT:    fsw fa1, 16(a1)
-; LP64E-NEXT:    fsw fa2, %lo(var+12)(a0)
-; LP64E-NEXT:    fsw fa3, %lo(var+8)(a0)
-; LP64E-NEXT:    fsw fa4, %lo(var+4)(a0)
-; LP64E-NEXT:    fsw fa5, %lo(var)(a0)
+; LP64E-NEXT:    addi a0, a0, %lo(var)
+; LP64E-NEXT:    flw fa5, 0(a0)
+; LP64E-NEXT:    flw fa4, 4(a0)
+; LP64E-NEXT:    flw fa3, 8(a0)
+; LP64E-NEXT:    flw fa2, 12(a0)
+; LP64E-NEXT:    flw fa1, 16(a0)
+; LP64E-NEXT:    flw fa0, 20(a0)
+; LP64E-NEXT:    flw ft0, 24(a0)
+; LP64E-NEXT:    flw ft1, 28(a0)
+; LP64E-NEXT:    flw ft2, 32(a0)
+; LP64E-NEXT:    flw ft3, 36(a0)
+; LP64E-NEXT:    flw ft4, 40(a0)
+; LP64E-NEXT:    flw ft5, 44(a0)
+; LP64E-NEXT:    flw ft6, 48(a0)
+; LP64E-NEXT:    flw ft7, 52(a0)
+; LP64E-NEXT:    flw fa6, 56(a0)
+; LP64E-NEXT:    flw fa7, 60(a0)
+; LP64E-NEXT:    flw ft8, 64(a0)
+; LP64E-NEXT:    flw ft9, 68(a0)
+; LP64E-NEXT:    flw ft10, 72(a0)
+; LP64E-NEXT:    flw ft11, 76(a0)
+; LP64E-NEXT:    flw fs0, 80(a0)
+; LP64E-NEXT:    flw fs1, 84(a0)
+; LP64E-NEXT:    flw fs2, 88(a0)
+; LP64E-NEXT:    flw fs3, 92(a0)
+; LP64E-NEXT:    flw fs4, 96(a0)
+; LP64E-NEXT:    flw fs5, 100(a0)
+; LP64E-NEXT:    flw fs6, 104(a0)
+; LP64E-NEXT:    flw fs7, 108(a0)
+; LP64E-NEXT:    flw fs8, 124(a0)
+; LP64E-NEXT:    flw fs9, 120(a0)
+; LP64E-NEXT:    flw fs10, 116(a0)
+; LP64E-NEXT:    flw fs11, 112(a0)
+; LP64E-NEXT:    fsw fs8, 124(a0)
+; LP64E-NEXT:    fsw fs9, 120(a0)
+; LP64E-NEXT:    fsw fs10, 116(a0)
+; LP64E-NEXT:    fsw fs11, 112(a0)
+; LP64E-NEXT:    fsw fs7, 108(a0)
+; LP64E-NEXT:    fsw fs6, 104(a0)
+; LP64E-NEXT:    fsw fs5, 100(a0)
+; LP64E-NEXT:    fsw fs4, 96(a0)
+; LP64E-NEXT:    fsw fs3, 92(a0)
+; LP64E-NEXT:    fsw fs2, 88(a0)
+; LP64E-NEXT:    fsw fs1, 84(a0)
+; LP64E-NEXT:    fsw fs0, 80(a0)
+; LP64E-NEXT:    fsw ft11, 76(a0)
+; LP64E-NEXT:    fsw ft10, 72(a0)
+; LP64E-NEXT:    fsw ft9, 68(a0)
+; LP64E-NEXT:    fsw ft8, 64(a0)
+; LP64E-NEXT:    fsw fa7, 60(a0)
+; LP64E-NEXT:    fsw fa6, 56(a0)
+; LP64E-NEXT:    fsw ft7, 52(a0)
+; LP64E-NEXT:    fsw ft6, 48(a0)
+; LP64E-NEXT:    fsw ft5, 44(a0)
+; LP64E-NEXT:    fsw ft4, 40(a0)
+; LP64E-NEXT:    fsw ft3, 36(a0)
+; LP64E-NEXT:    fsw ft2, 32(a0)
+; LP64E-NEXT:    fsw ft1, 28(a0)
+; LP64E-NEXT:    fsw ft0, 24(a0)
+; LP64E-NEXT:    fsw fa0, 20(a0)
+; LP64E-NEXT:    fsw fa1, 16(a0)
+; LP64E-NEXT:    fsw fa2, 12(a0)
+; LP64E-NEXT:    fsw fa3, 8(a0)
+; LP64E-NEXT:    fsw fa4, 4(a0)
+; LP64E-NEXT:    fsw fa5, 0(a0)
 ; LP64E-NEXT:    ret
 ;
 ; ILP32F-LABEL: callee:
@@ -321,71 +321,71 @@ define void @callee() nounwind {
 ; ILP32F-NEXT:    fsw fs10, 4(sp) # 4-byte Folded Spill
 ; ILP32F-NEXT:    fsw fs11, 0(sp) # 4-byte Folded Spill
 ; ILP32F-NEXT:    lui a0, %hi(var)
-; ILP32F-NEXT:    flw fa5, %lo(var)(a0)
-; ILP32F-NEXT:    flw fa4, %lo(var+4)(a0)
-; ILP32F-NEXT:    flw fa3, %lo(var+8)(a0)
-; ILP32F-NEXT:    flw fa2, %lo(var+12)(a0)
-; ILP32F-NEXT:    addi a1, a0, %lo(var)
-; ILP32F-NEXT:    flw fa1, 16(a1)
-; ILP32F-NEXT:    flw fa0, 20(a1)
-; ILP32F-NEXT:    flw ft0, 24(a1)
-; ILP32F-NEXT:    flw ft1, 28(a1)
-; ILP32F-NEXT:    flw ft2, 32(a1)
-; ILP32F-NEXT:    flw ft3, 36(a1)
-; ILP32F-NEXT:    flw ft4, 40(a1)
-; ILP32F-NEXT:    flw ft5, 44(a1)
-; ILP32F-NEXT:    flw ft6, 48(a1)
-; ILP32F-NEXT:    flw ft7, 52(a1)
-; ILP32F-NEXT:    flw fa6, 56(a1)
-; ILP32F-NEXT:    flw fa7, 60(a1)
-; ILP32F-NEXT:    flw ft8, 64(a1)
-; ILP32F-NEXT:    flw ft9, 68(a1)
-; ILP32F-NEXT:    flw ft10, 72(a1)
-; ILP32F-NEXT:    flw ft11, 76(a1)
-; ILP32F-NEXT:    flw fs0, 80(a1)
-; ILP32F-NEXT:    flw fs1, 84(a1)
-; ILP32F-NEXT:    flw fs2, 88(a1)
-; ILP32F-NEXT:    flw fs3, 92(a1)
-; ILP32F-NEXT:    flw fs4, 96(a1)
-; ILP32F-NEXT:    flw fs5, 100(a1)
-; ILP32F-NEXT:    flw fs6, 104(a1)
-; ILP32F-NEXT:    flw fs7, 108(a1)
-; ILP32F-NEXT:    flw fs8, 124(a1)
-; ILP32F-NEXT:    flw fs9, 120(a1)
-; ILP32F-NEXT:    flw fs10, 116(a1)
-; ILP32F-NEXT:    flw fs11, 112(a1)
-; ILP32F-NEXT:    fsw fs8, 124(a1)
-; ILP32F-NEXT:    fsw fs9, 120(a1)
-; ILP32F-NEXT:    fsw fs10, 116(a1)
-; ILP32F-NEXT:    fsw fs11, 112(a1)
-; ILP32F-NEXT:    fsw fs7, 108(a1)
-; ILP32F-NEXT:    fsw fs6, 104(a1)
-; ILP32F-NEXT:    fsw fs5, 100(a1)
-; ILP32F-NEXT:    fsw fs4, 96(a1)
-; ILP32F-NEXT:    fsw fs3, 92(a1)
-; ILP32F-NEXT:    fsw fs2, 88(a1)
-; ILP32F-NEXT:    fsw fs1, 84(a1)
-; ILP32F-NEXT:    fsw fs0, 80(a1)
-; ILP32F-NEXT:    fsw ft11, 76(a1)
-; ILP32F-NEXT:    fsw ft10, 72(a1)
-; ILP32F-NEXT:    fsw ft9, 68(a1)
-; ILP32F-NEXT:    fsw ft8, 64(a1)
-; ILP32F-NEXT:    fsw fa7, 60(a1)
-; ILP32F-NEXT:    fsw fa6, 56(a1)
-; ILP32F-NEXT:    fsw ft7, 52(a1)
-; ILP32F-NEXT:    fsw ft6, 48(a1)
-; ILP32F-NEXT:    fsw ft5, 44(a1)
-; ILP32F-NEXT:    fsw ft4, 40(a1)
-; ILP32F-NEXT:    fsw ft3, 36(a1)
-; ILP32F-NEXT:    fsw ft2, 32(a1)
-; ILP32F-NEXT:    fsw ft1, 28(a1)
-; ILP32F-NEXT:    fsw ft0, 24(a1)
-; ILP32F-NEXT:    fsw fa0, 20(a1)
-; ILP32F-NEXT:    fsw fa1, 16(a1)
-; ILP32F-NEXT:    fsw fa2, %lo(var+12)(a0)
-; ILP32F-NEXT:    fsw fa3, %lo(var+8)(a0)
-; ILP32F-NEXT:    fsw fa4, %lo(var+4)(a0)
-; ILP32F-NEXT:    fsw fa5, %lo(var)(a0)
+; ILP32F-NEXT:    addi a0, a0, %lo(var)
+; ILP32F-NEXT:    flw fa5, 0(a0)
+; ILP32F-NEXT:    flw fa4, 4(a0)
+; ILP32F-NEXT:    flw fa3, 8(a0)
+; ILP32F-NEXT:    flw fa2, 12(a0)
+; ILP32F-NEXT:    flw fa1, 16(a0)
+; ILP32F-NEXT:    flw fa0, 20(a0)
+; ILP32F-NEXT:    flw ft0, 24(a0)
+; ILP32F-NEXT:    flw ft1, 28(a0)
+; ILP32F-NEXT:    flw ft2, 32(a0)
+; ILP32F-NEXT:    flw ft3, 36(a0)
+; ILP32F-NEXT:    flw ft4, 40(a0)
+; ILP32F-NEXT:    flw ft5, 44(a0)
+; ILP32F-NEXT:    flw ft6, 48(a0)
+; ILP32F-NEXT:    flw ft7, 52(a0)
+; ILP32F-NEXT:    flw fa6, 56(a0)
+; ILP32F-NEXT:    flw fa7, 60(a0)
+; ILP32F-NEXT:    flw ft8, 64(a0)
+; ILP32F-NEXT:    flw ft9, 68(a0)
+; ILP32F-NEXT:    flw ft10, 72(a0)
+; ILP32F-NEXT:    flw ft11, 76(a0)
+; ILP32F-NEXT:    flw fs0, 80(a0)
+; ILP32F-NEXT:    flw fs1, 84(a0)
+; ILP32F-NEXT:    flw fs2, 88(a0)
+; ILP32F-NEXT:    flw fs3, 92(a0)
+; ILP32F-NEXT:    flw fs4, 96(a0)
+; ILP32F-NEXT:    flw fs5, 100(a0)
+; ILP32F-NEXT:    flw fs6, 104(a0)
+; ILP32F-NEXT:    flw fs7, 108(a0)
+; ILP32F-NEXT:    flw fs8, 124(a0)
+; ILP32F-NEXT:    flw fs9, 120(a0)
+; ILP32F-NEXT:    flw fs10, 116(a0)
+; ILP32F-NEXT:    flw fs11, 112(a0)
+; ILP32F-NEXT:    fsw fs8, 124(a0)
+; ILP32F-NEXT:    fsw fs9, 120(a0)
+; ILP32F-NEXT:    fsw fs10, 116(a0)
+; ILP32F-NEXT:    fsw fs11, 112(a0)
+; ILP32F-NEXT:    fsw fs7, 108(a0)
+; ILP32F-NEXT:    fsw fs6, 104(a0)
+; ILP32F-NEXT:    fsw fs5, 100(a0)
+; ILP32F-NEXT:    fsw fs4, 96(a0)
+; ILP32F-NEXT:    fsw fs3, 92(a0)
+; ILP32F-NEXT:    fsw fs2, 88(a0)
+; ILP32F-NEXT:    fsw fs1, 84(a0)
+; ILP32F-NEXT:    fsw fs0, 80(a0)
+; ILP32F-NEXT:    fsw ft11, 76(a0)
+; ILP32F-NEXT:    fsw ft10, 72(a0)
+; ILP32F-NEXT:    fsw ft9, 68(a0)
+; ILP32F-NEXT:    fsw ft8, 64(a0)
+; ILP32F-NEXT:    fsw fa7, 60(a0)
+; ILP32F-NEXT:    fsw fa6, 56(a0)
+; ILP32F-NEXT:    fsw ft7, 52(a0)
+; ILP32F-NEXT:    fsw ft6, 48(a0)
+; ILP32F-NEXT:    fsw ft5, 44(a0)
+; ILP32F-NEXT:    fsw ft4, 40(a0)
+; ILP32F-NEXT:    fsw ft3, 36(a0)
+; ILP32F-NEXT:    fsw ft2, 32(a0)
+; ILP32F-NEXT:    fsw ft1, 28(a0)
+; ILP32F-NEXT:    fsw ft0, 24(a0)
+; ILP32F-NEXT:    fsw fa0, 20(a0)
+; ILP32F-NEXT:    fsw fa1, 16(a0)
+; ILP32F-NEXT:    fsw fa2, 12(a0)
+; ILP32F-NEXT:    fsw fa3, 8(a0)
+; ILP32F-NEXT:    fsw fa4, 4(a0)
+; ILP32F-NEXT:    fsw fa5, 0(a0)
 ; ILP32F-NEXT:    flw fs0, 44(sp) # 4-byte Folded Reload
 ; ILP32F-NEXT:    flw fs1, 40(sp) # 4-byte Folded Reload
 ; ILP32F-NEXT:    flw fs2, 36(sp) # 4-byte Folded Reload
@@ -417,71 +417,71 @@ define void @callee() nounwind {
 ; LP64F-NEXT:    fsw fs10, 4(sp) # 4-byte Folded Spill
 ; LP64F-NEXT:    fsw fs11, 0(sp) # 4-byte Folded Spill
 ; LP64F-NEXT:    lui a0, %hi(var)
-; LP64F-NEXT:    flw fa5, %lo(var)(a0)
-; LP64F-NEXT:    flw fa4, %lo(var+4)(a0)
-; LP64F-NEXT:    flw fa3, %lo(var+8)(a0)
-; LP64F-NEXT:    flw fa2, %lo(var+12)(a0)
-; LP64F-NEXT:    addi a1, a0, %lo(var)
-; LP64F-NEXT:    flw fa1, 16(a1)
-; LP64F-NEXT:    flw fa0, 20(a1)
-; LP64F-NEXT:    flw ft0, 24(a1)
-; LP64F-NEXT:    flw ft1, 28(a1)
-; LP64F-NEXT:    flw ft2, 32(a1)
-; LP64F-NEXT:    flw ft3, 36(a1)
-; LP64F-NEXT:    flw ft4, 40(a1)
-; LP64F-NEXT:    flw ft5, 44(a1)
-; LP64F-NEXT:    flw ft6, 48(a1)
-; LP64F-NEXT:    flw ft7, 52(a1)
-; LP64F-NEXT:    flw fa6, 56(a1)
-; LP64F-NEXT:    flw fa7, 60(a1)
-; LP64F-NEXT:    flw ft8, 64(a1)
-; LP64F-NEXT:    flw ft9, 68(a1)
-; LP64F-NEXT:    flw ft10, 72(a1)
-; LP64F-NEXT:    flw ft11, 76(a1)
-; LP64F-NEXT:    flw fs0, 80(a1)
-; LP64F-NEXT:    flw fs1, 84(a1)
-; LP64F-NEXT:    flw fs2, 88(a1)
-; LP64F-NEXT:    flw fs3, 92(a1)
-; LP64F-NEXT:    flw fs4, 96(a1)
-; LP64F-NEXT:    flw fs5, 100(a1)
-; LP64F-NEXT:    flw fs6, 104(a1)
-; LP64F-NEXT:    flw fs7, 108(a1)
-; LP64F-NEXT:    flw fs8, 124(a1)
-; LP64F-NEXT:    flw fs9, 120(a1)
-; LP64F-NEXT:    flw fs10, 116(a1)
-; LP64F-NEXT:    flw fs11, 112(a1)
-; LP64F-NEXT:    fsw fs8, 124(a1)
-; LP64F-NEXT:    fsw fs9, 120(a1)
-; LP64F-NEXT:    fsw fs10, 116(a1)
-; LP64F-NEXT:    fsw fs11, 112(a1)
-; LP64F-NEXT:    fsw fs7, 108(a1)
-; LP64F-NEXT:    fsw fs6, 104(a1)
-; LP64F-NEXT:    fsw fs5, 100(a1)
-; LP64F-NEXT:    fsw fs4, 96(a1)
-; LP64F-NEXT:    fsw fs3, 92(a1)
-; LP64F-NEXT:    fsw fs2, 88(a1)
-; LP64F-NEXT:    fsw fs1, 84(a1)
-; LP64F-NEXT:    fsw fs0, 80(a1)
-; LP64F-NEXT:    fsw ft11, 76(a1)
-; LP64F-NEXT:    fsw ft10, 72(a1)
-; LP64F-NEXT:    fsw ft9, 68(a1)
-; LP64F-NEXT:    fsw ft8, 64(a1)
-; LP64F-NEXT:    fsw fa7, 60(a1)
-; LP64F-NEXT:    fsw fa6, 56(a1)
-; LP64F-NEXT:    fsw ft7, 52(a1)
-; LP64F-NEXT:    fsw ft6, 48(a1)
-; LP64F-NEXT:    fsw ft5, 44(a1)
-; LP64F-NEXT:    fsw ft4, 40(a1)
-; LP64F-NEXT:    fsw ft3, 36(a1)
-; LP64F-NEXT:    fsw ft2, 32(a1)
-; LP64F-NEXT:    fsw ft1, 28(a1)
-; LP64F-NEXT:    fsw ft0, 24(a1)
-; LP64F-NEXT:    fsw fa0, 20(a1)
-; LP64F-NEXT:    fsw fa1, 16(a1)
-; LP64F-NEXT:    fsw fa2, %lo(var+12)(a0)
-; LP64F-NEXT:    fsw fa3, %lo(var+8)(a0)
-; LP64F-NEXT:    fsw fa4, %lo(var+4)(a0)
-; LP64F-NEXT:    fsw fa5, %lo(var)(a0)
+; LP64F-NEXT:    addi a0, a0, %lo(var)
+; LP64F-NEXT:    flw fa5, 0(a0)
+; LP64F-NEXT:    flw fa4, 4(a0)
+; LP64F-NEXT:    flw fa3, 8(a0)
+; LP64F-NEXT:    flw fa2, 12(a0)
+; LP64F-NEXT:    flw fa1, 16(a0)
+; LP64F-NEXT:    flw fa0, 20(a0)
+; LP64F-NEXT:    flw ft0, 24(a0)
+; LP64F-NEXT:    flw ft1, 28(a0)
+; LP64F-NEXT:    flw ft2, 32(a0)
+; LP64F-NEXT:    flw ft3, 36(a0)
+; LP64F-NEXT:    flw ft4, 40(a0)
+; LP64F-NEXT:    flw ft5, 44(a0)
+; LP64F-NEXT:    flw ft6, 48(a0)
+; LP64F-NEXT:    flw ft7, 52(a0)
+; LP64F-NEXT:    flw fa6, 56(a0)
+; LP64F-NEXT:    flw fa7, 60(a0)
+; LP64F-NEXT:    flw ft8, 64(a0)
+; LP64F-NEXT:    flw ft9, 68(a0)
+; LP64F-NEXT:    flw ft10, 72(a0)
+; LP64F-NEXT:    flw ft11, 76(a0)
+; LP64F-NEXT:    flw fs0, 80(a0)
+; LP64F-NEXT:    flw fs1, 84(a0)
+; LP64F-NEXT:    flw fs2, 88(a0)
+; LP64F-NEXT:    flw fs3, 92(a0)
+; LP64F-NEXT:    flw fs4, 96(a0)
+; LP64F-NEXT:    flw fs5, 100(a0)
+; LP64F-NEXT:    flw fs6, 104(a0)
+; LP64F-NEXT:    flw fs7, 108(a0)
+; LP64F-NEXT:    flw fs8, 124(a0)
+; LP64F-NEXT:    flw fs9, 120(a0)
+; LP64F-NEXT:    flw fs10, 116(a0)
+; LP64F-NEXT:    flw fs11, 112(a0)
+; LP64F-NEXT:    fsw fs8, 124(a0)
+; LP64F-NEXT:    fsw fs9, 120(a0)
+; LP64F-NEXT:    fsw fs10, 116(a0)
+; LP64F-NEXT:    fsw fs11, 112(a0)
+; LP64F-NEXT:    fsw fs7, 108(a0)
+; LP64F-NEXT:    fsw fs6, 104(a0)
+; LP64F-NEXT:    fsw fs5, 100(a0)
+; LP64F-NEXT:    fsw fs4, 96(a0)
+; LP64F-NEXT:    fsw fs3, 92(a0)
+; LP64F-NEXT:    fsw fs2, 88(a0)
+; LP64F-NEXT:    fsw fs1, 84(a0)
+; LP64F-NEXT:    fsw fs0, 80(a0)
+; LP64F-NEXT:    fsw ft11, 76(a0)
+; LP64F-NEXT:    fsw ft10, 72(a0)
+; LP64F-NEXT:    fsw ft9, 68(a0)
+; LP64F-NEXT:    fsw ft8, 64(a0)
+; LP64F-NEXT:    fsw fa7, 60(a0)
+; LP64F-NEXT:    fsw fa6, 56(a0)
+; LP64F-NEXT:    fsw ft7, 52(a0)
+; LP64F-NEXT:    fsw ft6, 48(a0)
+; LP64F-NEXT:    fsw ft5, 44(a0)
+; LP64F-NEXT:    fsw ft4, 40(a0)
+; LP64F-NEXT:    fsw ft3, 36(a0)
+; LP64F-NEXT:    fsw ft2, 32(a0)
+; LP64F-NEXT:    fsw ft1, 28(a0)
+; LP64F-NEXT:    fsw ft0, 24(a0)
+; LP64F-NEXT:    fsw fa0, 20(a0)
+; LP64F-NEXT:    fsw fa1, 16(a0)
+; LP64F-NEXT:    fsw fa2, 12(a0)
+; LP64F-NEXT:    fsw fa3, 8(a0)
+; LP64F-NEXT:    fsw fa4, 4(a0)
+; LP64F-NEXT:    fsw fa5, 0(a0)
 ; LP64F-NEXT:    flw fs0, 44(sp) # 4-byte Folded Reload
 ; LP64F-NEXT:    flw fs1, 40(sp) # 4-byte Folded Reload
 ; LP64F-NEXT:    flw fs2, 36(sp) # 4-byte Folded Reload
@@ -513,71 +513,71 @@ define void @callee() nounwind {
 ; ILP32D-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill
 ; ILP32D-NEXT:    fsd fs11, 0(sp) # 8-byte Folded Spill
 ; ILP32D-NEXT:    lui a0, %hi(var)
-; ILP32D-NEXT:    flw fa5, %lo(var)(a0)
-; ILP32D-NEXT:    flw fa4, %lo(var+4)(a0)
-; ILP32D-NEXT:    flw fa3, %lo(var+8)(a0)
-; ILP32D-NEXT:    flw fa2, %lo(var+12)(a0)
-; ILP32D-NEXT:    addi a1, a0, %lo(var)
-; ILP32D-NEXT:    flw fa1, 16(a1)
-; ILP32D-NEXT:    flw fa0, 20(a1)
-; ILP32D-NEXT:    flw ft0, 24(a1)
-; ILP32D-NEXT:    flw ft1, 28(a1)
-; ILP32D-NEXT:    flw ft2, 32(a1)
-; ILP32D-NEXT:    flw ft3, 36(a1)
-; ILP32D-NEXT:    flw ft4, 40(a1)
-; ILP32D-NEXT:    flw ft5, 44(a1)
-; ILP32D-NEXT:    flw ft6, 48(a1)
-; ILP32D-NEXT:    flw ft7, 52(a1)
-; ILP32D-NEXT:    flw fa6, 56(a1)
-; ILP32D-NEXT:    flw fa7, 60(a1)
-; ILP32D-NEXT:    flw ft8, 64(a1)
-; ILP32D-NEXT:    flw ft9, 68(a1)
-; ILP32D-NEXT:    flw ft10, 72(a1)
-; ILP32D-NEXT:    flw ft11, 76(a1)
-; ILP32D-NEXT:    flw fs0, 80(a1)
-; ILP32D-NEXT:    flw fs1, 84(a1)
-; ILP32D-NEXT:    flw fs2, 88(a1)
-; ILP32D-NEXT:    flw fs3, 92(a1)
-; ILP32D-NEXT:    flw fs4, 96(a1)
-; ILP32D-NEXT:    flw fs5, 100(a1)
-; ILP32D-NEXT:    flw fs6, 104(a1)
-; ILP32D-NEXT:    flw fs7, 108(a1)
-; ILP32D-NEXT:    flw fs8, 124(a1)
-; ILP32D-NEXT:    flw fs9, 120(a1)
-; ILP32D-NEXT:    flw fs10, 116(a1)
-; ILP32D-NEXT:    flw fs11, 112(a1)
-; ILP32D-NEXT:    fsw fs8, 124(a1)
-; ILP32D-NEXT:    fsw fs9, 120(a1)
-; ILP32D-NEXT:    fsw fs10, 116(a1)
-; ILP32D-NEXT:    fsw fs11, 112(a1)
-; ILP32D-NEXT:    fsw fs7, 108(a1)
-; ILP32D-NEXT:    fsw fs6, 104(a1)
-; ILP32D-NEXT:    fsw fs5, 100(a1)
-; ILP32D-NEXT:    fsw fs4, 96(a1)
-; ILP32D-NEXT:    fsw fs3, 92(a1)
-; ILP32D-NEXT:    fsw fs2, 88(a1)
-; ILP32D-NEXT:    fsw fs1, 84(a1)
-; ILP32D-NEXT:    fsw fs0, 80(a1)
-; ILP32D-NEXT:    fsw ft11, 76(a1)
-; ILP32D-NEXT:    fsw ft10, 72(a1)
-; ILP32D-NEXT:    fsw ft9, 68(a1)
-; ILP32D-NEXT:    fsw ft8, 64(a1)
-; ILP32D-NEXT:    fsw fa7, 60(a1)
-; ILP32D-NEXT:    fsw fa6, 56(a1)
-; ILP32D-NEXT:    fsw ft7, 52(a1)
-; ILP32D-NEXT:    fsw ft6, 48(a1)
-; ILP32D-NEXT:    fsw ft5, 44(a1)
-; ILP32D-NEXT:    fsw ft4, 40(a1)
-; ILP32D-NEXT:    fsw ft3, 36(a1)
-; ILP32D-NEXT:    fsw ft2, 32(a1)
-; ILP32D-NEXT:    fsw ft1, 28(a1)
-; ILP32D-NEXT:    fsw ft0, 24(a1)
-; ILP32D-NEXT:    fsw fa0, 20(a1)
-; ILP32D-NEXT:    fsw fa1, 16(a1)
-; ILP32D-NEXT:    fsw fa2, %lo(var+12)(a0)
-; ILP32D-NEXT:    fsw fa3, %lo(var+8)(a0)
-; ILP32D-NEXT:    fsw fa4, %lo(var+4)(a0)
-; ILP32D-NEXT:    fsw fa5, %lo(var)(a0)
+; ILP32D-NEXT:    addi a0, a0, %lo(var)
+; ILP32D-NEXT:    flw fa5, 0(a0)
+; ILP32D-NEXT:    flw fa4, 4(a0)
+; ILP32D-NEXT:    flw fa3, 8(a0)
+; ILP32D-NEXT:    flw fa2, 12(a0)
+; ILP32D-NEXT:    flw fa1, 16(a0)
+; ILP32D-NEXT:    flw fa0, 20(a0)
+; ILP32D-NEXT:    flw ft0, 24(a0)
+; ILP32D-NEXT:    flw ft1, 28(a0)
+; ILP32D-NEXT:    flw ft2, 32(a0)
+; ILP32D-NEXT:    flw ft3, 36(a0)
+; ILP32D-NEXT:    flw ft4, 40(a0)
+; ILP32D-NEXT:    flw ft5, 44(a0)
+; ILP32D-NEXT:    flw ft6, 48(a0)
+; ILP32D-NEXT:    flw ft7, 52(a0)
+; ILP32D-NEXT:    flw fa6, 56(a0)
+; ILP32D-NEXT:    flw fa7, 60(a0)
+; ILP32D-NEXT:    flw ft8, 64(a0)
+; ILP32D-NEXT:    flw ft9, 68(a0)
+; ILP32D-NEXT:    flw ft10, 72(a0)
+; ILP32D-NEXT:    flw ft11, 76(a0)
+; ILP32D-NEXT:    flw fs0, 80(a0)
+; ILP32D-NEXT:    flw fs1, 84(a0)
+; ILP32D-NEXT:    flw fs2, 88(a0)
+; ILP32D-NEXT:    flw fs3, 92(a0)
+; ILP32D-NEXT:    flw fs4, 96(a0)
+; ILP32D-NEXT:    flw fs5, 100(a0)
+; ILP32D-NEXT:    flw fs6, 104(a0)
+; ILP32D-NEXT:    flw fs7, 108(a0)
+; ILP32D-NEXT:    flw fs8, 124(a0)
+; ILP32D-NEXT:    flw fs9, 120(a0)
+; ILP32D-NEXT:    flw fs10, 116(a0)
+; ILP32D-NEXT:    flw fs11, 112(a0)
+; ILP32D-NEXT:    fsw fs8, 124(a0)
+; ILP32D-NEXT:    fsw fs9, 120(a0)
+; ILP32D-NEXT:    fsw fs10, 116(a0)
+; ILP32D-NEXT:    fsw fs11, 112(a0)
+; ILP32D-NEXT:    fsw fs7, 108(a0)
+; ILP32D-NEXT:    fsw fs6, 104(a0)
+; ILP32D-NEXT:    fsw fs5, 100(a0)
+; ILP32D-NEXT:    fsw fs4, 96(a0)
+; ILP32D-NEXT:    fsw fs3, 92(a0)
+; ILP32D-NEXT:    fsw fs2, 88(a0)
+; ILP32D-NEXT:    fsw fs1, 84(a0)
+; ILP32D-NEXT:    fsw fs0, 80(a0)
+; ILP32D-NEXT:    fsw ft11, 76(a0)
+; ILP32D-NEXT:    fsw ft10, 72(a0)
+; ILP32D-NEXT:    fsw ft9, 68(a0)
+; ILP32D-NEXT:    fsw ft8, 64(a0)
+; ILP32D-NEXT:    fsw fa7, 60(a0)
+; ILP32D-NEXT:    fsw fa6, 56(a0)
+; ILP32D-NEXT:    fsw ft7, 52(a0)
+; ILP32D-NEXT:    fsw ft6, 48(a0)
+; ILP32D-NEXT:    fsw ft5, 44(a0)
+; ILP32D-NEXT:    fsw ft4, 40(a0)
+; ILP32D-NEXT:    fsw ft3, 36(a0)
+; ILP32D-NEXT:    fsw ft2, 32(a0)
+; ILP32D-NEXT:    fsw ft1, 28(a0)
+; ILP32D-NEXT:    fsw ft0, 24(a0)
+; ILP32D-NEXT:    fsw fa0, 20(a0)
+; ILP32D-NEXT:    fsw fa1, 16(a0)
+; ILP32D-NEXT:    fsw fa2, 12(a0)
+; ILP32D-NEXT:    fsw fa3, 8(a0)
+; ILP32D-NEXT:    fsw fa4, 4(a0)
+; ILP32D-NEXT:    fsw fa5, 0(a0)
 ; ILP32D-NEXT:    fld fs0, 88(sp) # 8-byte Folded Reload
 ; ILP32D-NEXT:    fld fs1, 80(sp) # 8-byte Folded Reload
 ; ILP32D-NEXT:    fld fs2, 72(sp) # 8-byte Folded Reload
@@ -609,71 +609,71 @@ define void @callee() nounwind {
 ; LP64D-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill
 ; LP64D-NEXT:    fsd fs11, 0(sp) # 8-byte Folded Spill
 ; LP64D-NEXT:    lui a0, %hi(var)
-; LP64D-NEXT:    flw fa5, %lo(var)(a0)
-; LP64D-NEXT:    flw fa4, %lo(var+4)(a0)
-; LP64D-NEXT:    flw fa3, %lo(var+8)(a0)
-; LP64D-NEXT:    flw fa2, %lo(var+12)(a0)
-; LP64D-NEXT:    addi a1, a0, %lo(var)
-; LP64D-NEXT:    flw fa1, 16(a1)
-; LP64D-NEXT:    flw fa0, 20(a1)
-; LP64D-NEXT:    flw ft0, 24(a1)
-; LP64D-NEXT:    flw ft1, 28(a1)
-; LP64D-NEXT:    flw ft2, 32(a1)
-; LP64D-NEXT:    flw ft3, 36(a1)
-; LP64D-NEXT:    flw ft4, 40(a1)
-; LP64D-NEXT:    flw ft5, 44(a1)
-; LP64D-NEXT:    flw ft6, 48(a1)
-; LP64D-NEXT:    flw ft7, 52(a1)
-; LP64D-NEXT:    flw fa6, 56(a1)
-; LP64D-NEXT:    flw fa7, 60(a1)
-; LP64D-NEXT:    flw ft8, 64(a1)
-; LP64D-NEXT:    flw ft9, 68(a1)
-; LP64D-NEXT:    flw ft10, 72(a1)
-; LP64D-NEXT:    flw ft11, 76(a1)
-; LP64D-NEXT:    flw fs0, 80(a1)
-; LP64D-NEXT:    flw fs1, 84(a1)
-; LP64D-NEXT:    flw fs2, 88(a1)
-; LP64D-NEXT:    flw fs3, 92(a1)
-; LP64D-NEXT:    flw fs4, 96(a1)
-; LP64D-NEXT:    flw fs5, 100(a1)
-; LP64D-NEXT:    flw fs6, 104(a1)
-; LP64D-NEXT:    flw fs7, 108(a1)
-; LP64D-NEXT:    flw fs8, 124(a1)
-; LP64D-NEXT:    flw fs9, 120(a1)
-; LP64D-NEXT:    flw fs10, 116(a1)
-; LP64D-NEXT:    flw fs11, 112(a1)
-; LP64D-NEXT:    fsw fs8, 124(a1)
-; LP64D-NEXT:    fsw fs9, 120(a1)
-; LP64D-NEXT:    fsw fs10, 116(a1)
-; LP64D-NEXT:    fsw fs11, 112(a1)
-; LP64D-NEXT:    fsw fs7, 108(a1)
-; LP64D-NEXT:    fsw fs6, 104(a1)
-; LP64D-NEXT:    fsw fs5, 100(a1)
-; LP64D-NEXT:    fsw fs4, 96(a1)
-; LP64D-NEXT:    fsw fs3, 92(a1)
-; LP64D-NEXT:    fsw fs2, 88(a1)
-; LP64D-NEXT:    fsw fs1, 84(a1)
-; LP64D-NEXT:    fsw fs0, 80(a1)
-; LP64D-NEXT:    fsw ft11, 76(a1)
-; LP64D-NEXT:    fsw ft10, 72(a1)
-; LP64D-NEXT:    fsw ft9, 68(a1)
-; LP64D-NEXT:    fsw ft8, 64(a1)
-; LP64D-NEXT:    fsw fa7, 60(a1)
-; LP64D-NEXT:    fsw fa6, 56(a1)
-; LP64D-NEXT:    fsw ft7, 52(a1)
-; LP64D-NEXT:    fsw ft6, 48(a1)
-; LP64D-NEXT:    fsw ft5, 44(a1)
-; LP64D-NEXT:    fsw ft4, 40(a1)
-; LP64D-NEXT:    fsw ft3, 36(a1)
-; LP64D-NEXT:    fsw ft2, 32(a1)
-; LP64D-NEXT:    fsw ft1, 28(a1)
-; LP64D-NEXT:    fsw ft0, 24(a1)
-; LP64D-NEXT:    fsw fa0, 20(a1)
-; LP64D-NEXT:    fsw fa1, 16(a1)
-; LP64D-NEXT:    fsw fa2, %lo(var+12)(a0)
-; LP64D-NEXT:    fsw fa3, %lo(var+8)(a0)
-; LP64D-NEXT:    fsw fa4, %lo(var+4)(a0)
-; LP64D-NEXT:    fsw fa5, %lo(var)(a0)
+; LP64D-NEXT:    addi a0, a0, %lo(var)
+; LP64D-NEXT:    flw fa5, 0(a0)
+; LP64D-NEXT:    flw fa4, 4(a0)
+; LP64D-NEXT:    flw fa3, 8(a0)
+; LP64D-NEXT:    flw fa2, 12(a0)
+; LP64D-NEXT:    flw fa1, 16(a0)
+; LP64D-NEXT:    flw fa0, 20(a0)
+; LP64D-NEXT:    flw ft0, 24(a0)
+; LP64D-NEXT:    flw ft1, 28(a0)
+; LP64D-NEXT:    flw ft2, 32(a0)
+; LP64D-NEXT:    flw ft3, 36(a0)
+; LP64D-NEXT:    flw ft4, 40(a0)
+; LP64D-NEXT:    flw ft5, 44(a0)
+; LP64D-NEXT:    flw ft6, 48(a0)
+; LP64D-NEXT:    flw ft7, 52(a0)
+; LP64D-NEXT:    flw fa6, 56(a0)
+; LP64D-NEXT:    flw fa7, 60(a0)
+; LP64D-NEXT:    flw ft8, 64(a0)
+; LP64D-NEXT:    flw ft9, 68(a0)
+; LP64D-NEXT:    flw ft10, 72(a0)
+; LP64D-NEXT:    flw ft11, 76(a0)
+; LP64D-NEXT:    flw fs0, 80(a0)
+; LP64D-NEXT:    flw fs1, 84(a0)
+; LP64D-NEXT:    flw fs2, 88(a0)
+; LP64D-NEXT:    flw fs3, 92(a0)
+; LP64D-NEXT:    flw fs4, 96(a0)
+; LP64D-NEXT:    flw fs5, 100(a0)
+; LP64D-NEXT:    flw fs6, 104(a0)
+; LP64D-NEXT:    flw fs7, 108(a0)
+; LP64D-NEXT:    flw fs8, 124(a0)
+; LP64D-NEXT:    flw fs9, 120(a0)
+; LP64D-NEXT:    flw fs10, 116(a0)
+; LP64D-NEXT:    flw fs11, 112(a0)
+; LP64D-NEXT:    fsw fs8, 124(a0)
+; LP64D-NEXT:    fsw fs9, 120(a0)
+; LP64D-NEXT:    fsw fs10, 116(a0)
+; LP64D-NEXT:    fsw fs11, 112(a0)
+; LP64D-NEXT:    fsw fs7, 108(a0)
+; LP64D-NEXT:    fsw fs6, 104(a0)
+; LP64D-NEXT:    fsw fs5, 100(a0)
+; LP64D-NEXT:    fsw fs4, 96(a0)
+; LP64D-NEXT:    fsw fs3, 92(a0)
+; LP64D-NEXT:    fsw fs2, 88(a0)
+; LP64D-NEXT:    fsw fs1, 84(a0)
+; LP64D-NEXT:    fsw fs0, 80(a0)
+; LP64D-NEXT:    fsw ft11, 76(a0)
+; LP64D-NEXT:    fsw ft10, 72(a0)
+; LP64D-NEXT:    fsw ft9, 68(a0)
+; LP64D-NEXT:    fsw ft8, 64(a0)
+; LP64D-NEXT:    fsw fa7, 60(a0)
+; LP64D-NEXT:    fsw fa6, 56(a0)
+; LP64D-NEXT:    fsw ft7, 52(a0)
+; LP64D-NEXT:    fsw ft6, 48(a0)
+; LP64D-NEXT:    fsw ft5, 44(a0)
+; LP64D-NEXT:    fsw ft4, 40(a0)
+; LP64D-NEXT:    fsw ft3, 36(a0)
+; LP64D-NEXT:    fsw ft2, 32(a0)
+; LP64D-NEXT:    fsw ft1, 28(a0)
+; LP64D-NEXT:    fsw ft0, 24(a0)
+; LP64D-NEXT:    fsw fa0, 20(a0)
+; LP64D-NEXT:    fsw fa1, 16(a0)
+; LP64D-NEXT:    fsw fa2, 12(a0)
+; LP64D-NEXT:    fsw fa3, 8(a0)
+; LP64D-NEXT:    fsw fa4, 4(a0)
+; LP64D-NEXT:    fsw fa5, 0(a0)
 ; LP64D-NEXT:    fld fs0, 88(sp) # 8-byte Folded Reload
 ; LP64D-NEXT:    fld fs1, 80(sp) # 8-byte Folded Reload
 ; LP64D-NEXT:    fld fs2, 72(sp) # 8-byte Folded Reload
@@ -706,571 +706,563 @@ define void @caller() nounwind {
 ; ILP32-NEXT:    addi sp, sp, -144
 ; ILP32-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
 ; ILP32-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    lui s0, %hi(var)
-; ILP32-NEXT:    flw fa5, %lo(var)(s0)
+; ILP32-NEXT:    lui a0, %hi(var)
+; ILP32-NEXT:    addi s0, a0, %lo(var)
+; ILP32-NEXT:    flw fa5, 0(s0)
+; ILP32-NEXT:    fsw fa5, 132(sp) # 4-byte Folded Spill
+; ILP32-NEXT:    flw fa5, 4(s0)
 ; ILP32-NEXT:    fsw fa5, 128(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, %lo(var+4)(s0)
+; ILP32-NEXT:    flw fa5, 8(s0)
 ; ILP32-NEXT:    fsw fa5, 124(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, %lo(var+8)(s0)
+; ILP32-NEXT:    flw fa5, 12(s0)
 ; ILP32-NEXT:    fsw fa5, 120(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, %lo(var+12)(s0)
+; ILP32-NEXT:    flw fa5, 16(s0)
 ; ILP32-NEXT:    fsw fa5, 116(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    addi s1, s0, %lo(var)
-; ILP32-NEXT:    flw fa5, 16(s1)
+; ILP32-NEXT:    flw fa5, 20(s0)
 ; ILP32-NEXT:    fsw fa5, 112(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 20(s1)
+; ILP32-NEXT:    flw fa5, 24(s0)
 ; ILP32-NEXT:    fsw fa5, 108(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 24(s1)
+; ILP32-NEXT:    flw fa5, 28(s0)
 ; ILP32-NEXT:    fsw fa5, 104(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 28(s1)
+; ILP32-NEXT:    flw fa5, 32(s0)
 ; ILP32-NEXT:    fsw fa5, 100(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 32(s1)
+; ILP32-NEXT:    flw fa5, 36(s0)
 ; ILP32-NEXT:    fsw fa5, 96(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 36(s1)
+; ILP32-NEXT:    flw fa5, 40(s0)
 ; ILP32-NEXT:    fsw fa5, 92(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 40(s1)
+; ILP32-NEXT:    flw fa5, 44(s0)
 ; ILP32-NEXT:    fsw fa5, 88(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 44(s1)
+; ILP32-NEXT:    flw fa5, 48(s0)
 ; ILP32-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 48(s1)
+; ILP32-NEXT:    flw fa5, 52(s0)
 ; ILP32-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 52(s1)
+; ILP32-NEXT:    flw fa5, 56(s0)
 ; ILP32-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 56(s1)
+; ILP32-NEXT:    flw fa5, 60(s0)
 ; ILP32-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 60(s1)
+; ILP32-NEXT:    flw fa5, 64(s0)
 ; ILP32-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 64(s1)
+; ILP32-NEXT:    flw fa5, 68(s0)
 ; ILP32-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 68(s1)
+; ILP32-NEXT:    flw fa5, 72(s0)
 ; ILP32-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 72(s1)
+; ILP32-NEXT:    flw fa5, 76(s0)
 ; ILP32-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 76(s1)
+; ILP32-NEXT:    flw fa5, 80(s0)
 ; ILP32-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 80(s1)
+; ILP32-NEXT:    flw fa5, 84(s0)
 ; ILP32-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 84(s1)
+; ILP32-NEXT:    flw fa5, 88(s0)
 ; ILP32-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 88(s1)
+; ILP32-NEXT:    flw fa5, 92(s0)
 ; ILP32-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 92(s1)
+; ILP32-NEXT:    flw fa5, 96(s0)
 ; ILP32-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 96(s1)
+; ILP32-NEXT:    flw fa5, 100(s0)
 ; ILP32-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 100(s1)
+; ILP32-NEXT:    flw fa5, 104(s0)
 ; ILP32-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 104(s1)
+; ILP32-NEXT:    flw fa5, 108(s0)
 ; ILP32-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 108(s1)
+; ILP32-NEXT:    flw fa5, 112(s0)
 ; ILP32-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 112(s1)
+; ILP32-NEXT:    flw fa5, 116(s0)
 ; ILP32-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 116(s1)
+; ILP32-NEXT:    flw fa5, 120(s0)
 ; ILP32-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 120(s1)
+; ILP32-NEXT:    flw fa5, 124(s0)
 ; ILP32-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    flw fa5, 124(s1)
-; ILP32-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
 ; ILP32-NEXT:    call callee
-; ILP32-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 124(s1)
 ; ILP32-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 120(s1)
+; ILP32-NEXT:    fsw fa5, 124(s0)
 ; ILP32-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 116(s1)
+; ILP32-NEXT:    fsw fa5, 120(s0)
 ; ILP32-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 112(s1)
+; ILP32-NEXT:    fsw fa5, 116(s0)
 ; ILP32-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 108(s1)
+; ILP32-NEXT:    fsw fa5, 112(s0)
 ; ILP32-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 104(s1)
+; ILP32-NEXT:    fsw fa5, 108(s0)
 ; ILP32-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 100(s1)
+; ILP32-NEXT:    fsw fa5, 104(s0)
 ; ILP32-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 96(s1)
+; ILP32-NEXT:    fsw fa5, 100(s0)
 ; ILP32-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 92(s1)
+; ILP32-NEXT:    fsw fa5, 96(s0)
 ; ILP32-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 88(s1)
+; ILP32-NEXT:    fsw fa5, 92(s0)
 ; ILP32-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 84(s1)
+; ILP32-NEXT:    fsw fa5, 88(s0)
 ; ILP32-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 80(s1)
+; ILP32-NEXT:    fsw fa5, 84(s0)
 ; ILP32-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 76(s1)
+; ILP32-NEXT:    fsw fa5, 80(s0)
 ; ILP32-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 72(s1)
+; ILP32-NEXT:    fsw fa5, 76(s0)
 ; ILP32-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 68(s1)
+; ILP32-NEXT:    fsw fa5, 72(s0)
 ; ILP32-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 64(s1)
+; ILP32-NEXT:    fsw fa5, 68(s0)
 ; ILP32-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 60(s1)
+; ILP32-NEXT:    fsw fa5, 64(s0)
 ; ILP32-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 56(s1)
+; ILP32-NEXT:    fsw fa5, 60(s0)
 ; ILP32-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 52(s1)
+; ILP32-NEXT:    fsw fa5, 56(s0)
 ; ILP32-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 48(s1)
+; ILP32-NEXT:    fsw fa5, 52(s0)
 ; ILP32-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 44(s1)
+; ILP32-NEXT:    fsw fa5, 48(s0)
 ; ILP32-NEXT:    flw fa5, 88(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 40(s1)
+; ILP32-NEXT:    fsw fa5, 44(s0)
 ; ILP32-NEXT:    flw fa5, 92(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 36(s1)
+; ILP32-NEXT:    fsw fa5, 40(s0)
 ; ILP32-NEXT:    flw fa5, 96(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 32(s1)
+; ILP32-NEXT:    fsw fa5, 36(s0)
 ; ILP32-NEXT:    flw fa5, 100(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 28(s1)
+; ILP32-NEXT:    fsw fa5, 32(s0)
 ; ILP32-NEXT:    flw fa5, 104(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 24(s1)
+; ILP32-NEXT:    fsw fa5, 28(s0)
 ; ILP32-NEXT:    flw fa5, 108(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 20(s1)
+; ILP32-NEXT:    fsw fa5, 24(s0)
 ; ILP32-NEXT:    flw fa5, 112(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, 16(s1)
+; ILP32-NEXT:    fsw fa5, 20(s0)
 ; ILP32-NEXT:    flw fa5, 116(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, %lo(var+12)(s0)
+; ILP32-NEXT:    fsw fa5, 16(s0)
 ; ILP32-NEXT:    flw fa5, 120(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, %lo(var+8)(s0)
+; ILP32-NEXT:    fsw fa5, 12(s0)
 ; ILP32-NEXT:    flw fa5, 124(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, %lo(var+4)(s0)
+; ILP32-NEXT:    fsw fa5, 8(s0)
 ; ILP32-NEXT:    flw fa5, 128(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    fsw fa5, %lo(var)(s0)
+; ILP32-NEXT:    fsw fa5, 4(s0)
+; ILP32-NEXT:    flw fa5, 132(sp) # 4-byte Folded Reload
+; ILP32-NEXT:    fsw fa5, 0(s0)
 ; ILP32-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
 ; ILP32-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
 ; ILP32-NEXT:    addi sp, sp, 144
 ; ILP32-NEXT:    ret
 ;
 ; ILP32E-LABEL: caller:
 ; ILP32E:       # %bb.0:
-; ILP32E-NEXT:    addi sp, sp, -140
-; ILP32E-NEXT:    sw ra, 136(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    sw s0, 132(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    sw s1, 128(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    lui s0, %hi(var)
-; ILP32E-NEXT:    flw fa5, %lo(var)(s0)
+; ILP32E-NEXT:    addi sp, sp, -136
+; ILP32E-NEXT:    sw ra, 132(sp) # 4-byte Folded Spill
+; ILP32E-NEXT:    sw s0, 128(sp) # 4-byte Folded Spill
+; ILP32E-NEXT:    lui a0, %hi(var)
+; ILP32E-NEXT:    addi s0, a0, %lo(var)
+; ILP32E-NEXT:    flw fa5, 0(s0)
 ; ILP32E-NEXT:    fsw fa5, 124(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, %lo(var+4)(s0)
+; ILP32E-NEXT:    flw fa5, 4(s0)
 ; ILP32E-NEXT:    fsw fa5, 120(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, %lo(var+8)(s0)
+; ILP32E-NEXT:    flw fa5, 8(s0)
 ; ILP32E-NEXT:    fsw fa5, 116(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, %lo(var+12)(s0)
+; ILP32E-NEXT:    flw fa5, 12(s0)
 ; ILP32E-NEXT:    fsw fa5, 112(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    addi s1, s0, %lo(var)
-; ILP32E-NEXT:    flw fa5, 16(s1)
+; ILP32E-NEXT:    flw fa5, 16(s0)
 ; ILP32E-NEXT:    fsw fa5, 108(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 20(s1)
+; ILP32E-NEXT:    flw fa5, 20(s0)
 ; ILP32E-NEXT:    fsw fa5, 104(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 24(s1)
+; ILP32E-NEXT:    flw fa5, 24(s0)
 ; ILP32E-NEXT:    fsw fa5, 100(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 28(s1)
+; ILP32E-NEXT:    flw fa5, 28(s0)
 ; ILP32E-NEXT:    fsw fa5, 96(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 32(s1)
+; ILP32E-NEXT:    flw fa5, 32(s0)
 ; ILP32E-NEXT:    fsw fa5, 92(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 36(s1)
+; ILP32E-NEXT:    flw fa5, 36(s0)
 ; ILP32E-NEXT:    fsw fa5, 88(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 40(s1)
+; ILP32E-NEXT:    flw fa5, 40(s0)
 ; ILP32E-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 44(s1)
+; ILP32E-NEXT:    flw fa5, 44(s0)
 ; ILP32E-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 48(s1)
+; ILP32E-NEXT:    flw fa5, 48(s0)
 ; ILP32E-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 52(s1)
+; ILP32E-NEXT:    flw fa5, 52(s0)
 ; ILP32E-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 56(s1)
+; ILP32E-NEXT:    flw fa5, 56(s0)
 ; ILP32E-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 60(s1)
+; ILP32E-NEXT:    flw fa5, 60(s0)
 ; ILP32E-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 64(s1)
+; ILP32E-NEXT:    flw fa5, 64(s0)
 ; ILP32E-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 68(s1)
+; ILP32E-NEXT:    flw fa5, 68(s0)
 ; ILP32E-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 72(s1)
+; ILP32E-NEXT:    flw fa5, 72(s0)
 ; ILP32E-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 76(s1)
+; ILP32E-NEXT:    flw fa5, 76(s0)
 ; ILP32E-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 80(s1)
+; ILP32E-NEXT:    flw fa5, 80(s0)
 ; ILP32E-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 84(s1)
+; ILP32E-NEXT:    flw fa5, 84(s0)
 ; ILP32E-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 88(s1)
+; ILP32E-NEXT:    flw fa5, 88(s0)
 ; ILP32E-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 92(s1)
+; ILP32E-NEXT:    flw fa5, 92(s0)
 ; ILP32E-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 96(s1)
+; ILP32E-NEXT:    flw fa5, 96(s0)
 ; ILP32E-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 100(s1)
+; ILP32E-NEXT:    flw fa5, 100(s0)
 ; ILP32E-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 104(s1)
+; ILP32E-NEXT:    flw fa5, 104(s0)
 ; ILP32E-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 108(s1)
+; ILP32E-NEXT:    flw fa5, 108(s0)
 ; ILP32E-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 112(s1)
+; ILP32E-NEXT:    flw fa5, 112(s0)
 ; ILP32E-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 116(s1)
+; ILP32E-NEXT:    flw fa5, 116(s0)
 ; ILP32E-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 120(s1)
+; ILP32E-NEXT:    flw fa5, 120(s0)
 ; ILP32E-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
-; ILP32E-NEXT:    flw fa5, 124(s1)
+; ILP32E-NEXT:    flw fa5, 124(s0)
 ; ILP32E-NEXT:    fsw fa5, 0(sp) # 4-byte Folded Spill
 ; ILP32E-NEXT:    call callee
 ; ILP32E-NEXT:    flw fa5, 0(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 124(s1)
+; ILP32E-NEXT:    fsw fa5, 124(s0)
 ; ILP32E-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 120(s1)
+; ILP32E-NEXT:    fsw fa5, 120(s0)
 ; ILP32E-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 116(s1)
+; ILP32E-NEXT:    fsw fa5, 116(s0)
 ; ILP32E-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 112(s1)
+; ILP32E-NEXT:    fsw fa5, 112(s0)
 ; ILP32E-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 108(s1)
+; ILP32E-NEXT:    fsw fa5, 108(s0)
 ; ILP32E-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 104(s1)
+; ILP32E-NEXT:    fsw fa5, 104(s0)
 ; ILP32E-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 100(s1)
+; ILP32E-NEXT:    fsw fa5, 100(s0)
 ; ILP32E-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 96(s1)
+; ILP32E-NEXT:    fsw fa5, 96(s0)
 ; ILP32E-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 92(s1)
+; ILP32E-NEXT:    fsw fa5, 92(s0)
 ; ILP32E-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 88(s1)
+; ILP32E-NEXT:    fsw fa5, 88(s0)
 ; ILP32E-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 84(s1)
+; ILP32E-NEXT:    fsw fa5, 84(s0)
 ; ILP32E-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 80(s1)
+; ILP32E-NEXT:    fsw fa5, 80(s0)
 ; ILP32E-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 76(s1)
+; ILP32E-NEXT:    fsw fa5, 76(s0)
 ; ILP32E-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 72(s1)
+; ILP32E-NEXT:    fsw fa5, 72(s0)
 ; ILP32E-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 68(s1)
+; ILP32E-NEXT:    fsw fa5, 68(s0)
 ; ILP32E-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 64(s1)
+; ILP32E-NEXT:    fsw fa5, 64(s0)
 ; ILP32E-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 60(s1)
+; ILP32E-NEXT:    fsw fa5, 60(s0)
 ; ILP32E-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 56(s1)
+; ILP32E-NEXT:    fsw fa5, 56(s0)
 ; ILP32E-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 52(s1)
+; ILP32E-NEXT:    fsw fa5, 52(s0)
 ; ILP32E-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 48(s1)
+; ILP32E-NEXT:    fsw fa5, 48(s0)
 ; ILP32E-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 44(s1)
+; ILP32E-NEXT:    fsw fa5, 44(s0)
 ; ILP32E-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 40(s1)
+; ILP32E-NEXT:    fsw fa5, 40(s0)
 ; ILP32E-NEXT:    flw fa5, 88(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 36(s1)
+; ILP32E-NEXT:    fsw fa5, 36(s0)
 ; ILP32E-NEXT:    flw fa5, 92(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 32(s1)
+; ILP32E-NEXT:    fsw fa5, 32(s0)
 ; ILP32E-NEXT:    flw fa5, 96(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 28(s1)
+; ILP32E-NEXT:    fsw fa5, 28(s0)
 ; ILP32E-NEXT:    flw fa5, 100(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 24(s1)
+; ILP32E-NEXT:    fsw fa5, 24(s0)
 ; ILP32E-NEXT:    flw fa5, 104(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 20(s1)
+; ILP32E-NEXT:    fsw fa5, 20(s0)
 ; ILP32E-NEXT:    flw fa5, 108(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, 16(s1)
+; ILP32E-NEXT:    fsw fa5, 16(s0)
 ; ILP32E-NEXT:    flw fa5, 112(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, %lo(var+12)(s0)
+; ILP32E-NEXT:    fsw fa5, 12(s0)
 ; ILP32E-NEXT:    flw fa5, 116(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, %lo(var+8)(s0)
+; ILP32E-NEXT:    fsw fa5, 8(s0)
 ; ILP32E-NEXT:    flw fa5, 120(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, %lo(var+4)(s0)
+; ILP32E-NEXT:    fsw fa5, 4(s0)
 ; ILP32E-NEXT:    flw fa5, 124(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    fsw fa5, %lo(var)(s0)
-; ILP32E-NEXT:    lw ra, 136(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    lw s0, 132(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    lw s1, 128(sp) # 4-byte Folded Reload
-; ILP32E-NEXT:    addi sp, sp, 140
+; ILP32E-NEXT:    fsw fa5, 0(s0)
+; ILP32E-NEXT:    lw ra, 132(sp) # 4-byte Folded Reload
+; ILP32E-NEXT:    lw s0, 128(sp) # 4-byte Folded Reload
+; ILP32E-NEXT:    addi sp, sp, 136
 ; ILP32E-NEXT:    ret
 ;
 ; LP64-LABEL: caller:
 ; LP64:       # %bb.0:
-; LP64-NEXT:    addi sp, sp, -160
-; LP64-NEXT:    sd ra, 152(sp) # 8-byte Folded Spill
-; LP64-NEXT:    sd s0, 144(sp) # 8-byte Folded Spill
-; LP64-NEXT:    sd s1, 136(sp) # 8-byte Folded Spill
-; LP64-NEXT:    lui s0, %hi(var)
-; LP64-NEXT:    flw fa5, %lo(var)(s0)
-; LP64-NEXT:    fsw fa5, 132(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, %lo(var+4)(s0)
-; LP64-NEXT:    fsw fa5, 128(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, %lo(var+8)(s0)
+; LP64-NEXT:    addi sp, sp, -144
+; LP64-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill
+; LP64-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill
+; LP64-NEXT:    lui a0, %hi(var)
+; LP64-NEXT:    addi s0, a0, %lo(var)
+; LP64-NEXT:    flw fa5, 0(s0)
 ; LP64-NEXT:    fsw fa5, 124(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, %lo(var+12)(s0)
+; LP64-NEXT:    flw fa5, 4(s0)
 ; LP64-NEXT:    fsw fa5, 120(sp) # 4-byte Folded Spill
-; LP64-NEXT:    addi s1, s0, %lo(var)
-; LP64-NEXT:    flw fa5, 16(s1)
+; LP64-NEXT:    flw fa5, 8(s0)
 ; LP64-NEXT:    fsw fa5, 116(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 20(s1)
+; LP64-NEXT:    flw fa5, 12(s0)
 ; LP64-NEXT:    fsw fa5, 112(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 24(s1)
+; LP64-NEXT:    flw fa5, 16(s0)
 ; LP64-NEXT:    fsw fa5, 108(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 28(s1)
+; LP64-NEXT:    flw fa5, 20(s0)
 ; LP64-NEXT:    fsw fa5, 104(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 32(s1)
+; LP64-NEXT:    flw fa5, 24(s0)
 ; LP64-NEXT:    fsw fa5, 100(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 36(s1)
+; LP64-NEXT:    flw fa5, 28(s0)
 ; LP64-NEXT:    fsw fa5, 96(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 40(s1)
+; LP64-NEXT:    flw fa5, 32(s0)
 ; LP64-NEXT:    fsw fa5, 92(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 44(s1)
+; LP64-NEXT:    flw fa5, 36(s0)
 ; LP64-NEXT:    fsw fa5, 88(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 48(s1)
+; LP64-NEXT:    flw fa5, 40(s0)
 ; LP64-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 52(s1)
+; LP64-NEXT:    flw fa5, 44(s0)
 ; LP64-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 56(s1)
+; LP64-NEXT:    flw fa5, 48(s0)
 ; LP64-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 60(s1)
+; LP64-NEXT:    flw fa5, 52(s0)
 ; LP64-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 64(s1)
+; LP64-NEXT:    flw fa5, 56(s0)
 ; LP64-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 68(s1)
+; LP64-NEXT:    flw fa5, 60(s0)
 ; LP64-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 72(s1)
+; LP64-NEXT:    flw fa5, 64(s0)
 ; LP64-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 76(s1)
+; LP64-NEXT:    flw fa5, 68(s0)
 ; LP64-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 80(s1)
+; LP64-NEXT:    flw fa5, 72(s0)
 ; LP64-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 84(s1)
+; LP64-NEXT:    flw fa5, 76(s0)
 ; LP64-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 88(s1)
+; LP64-NEXT:    flw fa5, 80(s0)
 ; LP64-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 92(s1)
+; LP64-NEXT:    flw fa5, 84(s0)
 ; LP64-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 96(s1)
+; LP64-NEXT:    flw fa5, 88(s0)
 ; LP64-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 100(s1)
+; LP64-NEXT:    flw fa5, 92(s0)
 ; LP64-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 104(s1)
+; LP64-NEXT:    flw fa5, 96(s0)
 ; LP64-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 108(s1)
+; LP64-NEXT:    flw fa5, 100(s0)
 ; LP64-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 112(s1)
+; LP64-NEXT:    flw fa5, 104(s0)
 ; LP64-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 116(s1)
+; LP64-NEXT:    flw fa5, 108(s0)
 ; LP64-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 120(s1)
+; LP64-NEXT:    flw fa5, 112(s0)
 ; LP64-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; LP64-NEXT:    flw fa5, 124(s1)
+; LP64-NEXT:    flw fa5, 116(s0)
 ; LP64-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
+; LP64-NEXT:    flw fa5, 120(s0)
+; LP64-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
+; LP64-NEXT:    flw fa5, 124(s0)
+; LP64-NEXT:    fsw fa5, 0(sp) # 4-byte Folded Spill
 ; LP64-NEXT:    call callee
+; LP64-NEXT:    flw fa5, 0(sp) # 4-byte Folded Reload
+; LP64-NEXT:    fsw fa5, 124(s0)
+; LP64-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
+; LP64-NEXT:    fsw fa5, 120(s0)
 ; LP64-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 124(s1)
+; LP64-NEXT:    fsw fa5, 116(s0)
 ; LP64-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 120(s1)
+; LP64-NEXT:    fsw fa5, 112(s0)
 ; LP64-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 116(s1)
+; LP64-NEXT:    fsw fa5, 108(s0)
 ; LP64-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 112(s1)
+; LP64-NEXT:    fsw fa5, 104(s0)
 ; LP64-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 108(s1)
+; LP64-NEXT:    fsw fa5, 100(s0)
 ; LP64-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 104(s1)
+; LP64-NEXT:    fsw fa5, 96(s0)
 ; LP64-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 100(s1)
+; LP64-NEXT:    fsw fa5, 92(s0)
 ; LP64-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 96(s1)
+; LP64-NEXT:    fsw fa5, 88(s0)
 ; LP64-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 92(s1)
+; LP64-NEXT:    fsw fa5, 84(s0)
 ; LP64-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 88(s1)
+; LP64-NEXT:    fsw fa5, 80(s0)
 ; LP64-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 84(s1)
+; LP64-NEXT:    fsw fa5, 76(s0)
 ; LP64-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 80(s1)
+; LP64-NEXT:    fsw fa5, 72(s0)
 ; LP64-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 76(s1)
+; LP64-NEXT:    fsw fa5, 68(s0)
 ; LP64-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 72(s1)
+; LP64-NEXT:    fsw fa5, 64(s0)
 ; LP64-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 68(s1)
+; LP64-NEXT:    fsw fa5, 60(s0)
 ; LP64-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 64(s1)
+; LP64-NEXT:    fsw fa5, 56(s0)
 ; LP64-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 60(s1)
+; LP64-NEXT:    fsw fa5, 52(s0)
 ; LP64-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 56(s1)
+; LP64-NEXT:    fsw fa5, 48(s0)
 ; LP64-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 52(s1)
+; LP64-NEXT:    fsw fa5, 44(s0)
 ; LP64-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 48(s1)
+; LP64-NEXT:    fsw fa5, 40(s0)
 ; LP64-NEXT:    flw fa5, 88(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 44(s1)
+; LP64-NEXT:    fsw fa5, 36(s0)
 ; LP64-NEXT:    flw fa5, 92(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 40(s1)
+; LP64-NEXT:    fsw fa5, 32(s0)
 ; LP64-NEXT:    flw fa5, 96(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 36(s1)
+; LP64-NEXT:    fsw fa5, 28(s0)
 ; LP64-NEXT:    flw fa5, 100(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 32(s1)
+; LP64-NEXT:    fsw fa5, 24(s0)
 ; LP64-NEXT:    flw fa5, 104(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 28(s1)
+; LP64-NEXT:    fsw fa5, 20(s0)
 ; LP64-NEXT:    flw fa5, 108(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 24(s1)
+; LP64-NEXT:    fsw fa5, 16(s0)
 ; LP64-NEXT:    flw fa5, 112(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 20(s1)
+; LP64-NEXT:    fsw fa5, 12(s0)
 ; LP64-NEXT:    flw fa5, 116(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, 16(s1)
+; LP64-NEXT:    fsw fa5, 8(s0)
 ; LP64-NEXT:    flw fa5, 120(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, %lo(var+12)(s0)
+; LP64-NEXT:    fsw fa5, 4(s0)
 ; LP64-NEXT:    flw fa5, 124(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, %lo(var+8)(s0)
-; LP64-NEXT:    flw fa5, 128(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, %lo(var+4)(s0)
-; LP64-NEXT:    flw fa5, 132(sp) # 4-byte Folded Reload
-; LP64-NEXT:    fsw fa5, %lo(var)(s0)
-; LP64-NEXT:    ld ra, 152(sp) # 8-byte Folded Reload
-; LP64-NEXT:    ld s0, 144(sp) # 8-byte Folded Reload
-; LP64-NEXT:    ld s1, 136(sp) # 8-byte Folded Reload
-; LP64-NEXT:    addi sp, sp, 160
+; LP64-NEXT:    fsw fa5, 0(s0)
+; LP64-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload
+; LP64-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload
+; LP64-NEXT:    addi sp, sp, 144
 ; LP64-NEXT:    ret
 ;
 ; LP64E-LABEL: caller:
 ; LP64E:       # %bb.0:
-; LP64E-NEXT:    addi sp, sp, -152
-; LP64E-NEXT:    sd ra, 144(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    sd s0, 136(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    sd s1, 128(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    lui s0, %hi(var)
-; LP64E-NEXT:    flw fa5, %lo(var)(s0)
+; LP64E-NEXT:    addi sp, sp, -144
+; LP64E-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill
+; LP64E-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill
+; LP64E-NEXT:    lui a0, %hi(var)
+; LP64E-NEXT:    addi s0, a0, %lo(var)
+; LP64E-NEXT:    flw fa5, 0(s0)
 ; LP64E-NEXT:    fsw fa5, 124(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, %lo(var+4)(s0)
+; LP64E-NEXT:    flw fa5, 4(s0)
 ; LP64E-NEXT:    fsw fa5, 120(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, %lo(var+8)(s0)
+; LP64E-NEXT:    flw fa5, 8(s0)
 ; LP64E-NEXT:    fsw fa5, 116(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, %lo(var+12)(s0)
+; LP64E-NEXT:    flw fa5, 12(s0)
 ; LP64E-NEXT:    fsw fa5, 112(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    addi s1, s0, %lo(var)
-; LP64E-NEXT:    flw fa5, 16(s1)
+; LP64E-NEXT:    flw fa5, 16(s0)
 ; LP64E-NEXT:    fsw fa5, 108(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 20(s1)
+; LP64E-NEXT:    flw fa5, 20(s0)
 ; LP64E-NEXT:    fsw fa5, 104(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 24(s1)
+; LP64E-NEXT:    flw fa5, 24(s0)
 ; LP64E-NEXT:    fsw fa5, 100(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 28(s1)
+; LP64E-NEXT:    flw fa5, 28(s0)
 ; LP64E-NEXT:    fsw fa5, 96(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 32(s1)
+; LP64E-NEXT:    flw fa5, 32(s0)
 ; LP64E-NEXT:    fsw fa5, 92(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 36(s1)
+; LP64E-NEXT:    flw fa5, 36(s0)
 ; LP64E-NEXT:    fsw fa5, 88(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 40(s1)
+; LP64E-NEXT:    flw fa5, 40(s0)
 ; LP64E-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 44(s1)
+; LP64E-NEXT:    flw fa5, 44(s0)
 ; LP64E-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 48(s1)
+; LP64E-NEXT:    flw fa5, 48(s0)
 ; LP64E-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 52(s1)
+; LP64E-NEXT:    flw fa5, 52(s0)
 ; LP64E-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 56(s1)
+; LP64E-NEXT:    flw fa5, 56(s0)
 ; LP64E-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 60(s1)
+; LP64E-NEXT:    flw fa5, 60(s0)
 ; LP64E-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 64(s1)
+; LP64E-NEXT:    flw fa5, 64(s0)
 ; LP64E-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 68(s1)
+; LP64E-NEXT:    flw fa5, 68(s0)
 ; LP64E-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 72(s1)
+; LP64E-NEXT:    flw fa5, 72(s0)
 ; LP64E-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 76(s1)
+; LP64E-NEXT:    flw fa5, 76(s0)
 ; LP64E-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 80(s1)
+; LP64E-NEXT:    flw fa5, 80(s0)
 ; LP64E-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 84(s1)
+; LP64E-NEXT:    flw fa5, 84(s0)
 ; LP64E-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 88(s1)
+; LP64E-NEXT:    flw fa5, 88(s0)
 ; LP64E-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 92(s1)
+; LP64E-NEXT:    flw fa5, 92(s0)
 ; LP64E-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 96(s1)
+; LP64E-NEXT:    flw fa5, 96(s0)
 ; LP64E-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 100(s1)
+; LP64E-NEXT:    flw fa5, 100(s0)
 ; LP64E-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 104(s1)
+; LP64E-NEXT:    flw fa5, 104(s0)
 ; LP64E-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 108(s1)
+; LP64E-NEXT:    flw fa5, 108(s0)
 ; LP64E-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 112(s1)
+; LP64E-NEXT:    flw fa5, 112(s0)
 ; LP64E-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 116(s1)
+; LP64E-NEXT:    flw fa5, 116(s0)
 ; LP64E-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 120(s1)
+; LP64E-NEXT:    flw fa5, 120(s0)
 ; LP64E-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
-; LP64E-NEXT:    flw fa5, 124(s1)
+; LP64E-NEXT:    flw fa5, 124(s0)
 ; LP64E-NEXT:    fsw fa5, 0(sp) # 4-byte Folded Spill
 ; LP64E-NEXT:    call callee
 ; LP64E-NEXT:    flw fa5, 0(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 124(s1)
+; LP64E-NEXT:    fsw fa5, 124(s0)
 ; LP64E-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 120(s1)
+; LP64E-NEXT:    fsw fa5, 120(s0)
 ; LP64E-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 116(s1)
+; LP64E-NEXT:    fsw fa5, 116(s0)
 ; LP64E-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 112(s1)
+; LP64E-NEXT:    fsw fa5, 112(s0)
 ; LP64E-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 108(s1)
+; LP64E-NEXT:    fsw fa5, 108(s0)
 ; LP64E-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 104(s1)
+; LP64E-NEXT:    fsw fa5, 104(s0)
 ; LP64E-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 100(s1)
+; LP64E-NEXT:    fsw fa5, 100(s0)
 ; LP64E-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 96(s1)
+; LP64E-NEXT:    fsw fa5, 96(s0)
 ; LP64E-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 92(s1)
+; LP64E-NEXT:    fsw fa5, 92(s0)
 ; LP64E-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 88(s1)
+; LP64E-NEXT:    fsw fa5, 88(s0)
 ; LP64E-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 84(s1)
+; LP64E-NEXT:    fsw fa5, 84(s0)
 ; LP64E-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 80(s1)
+; LP64E-NEXT:    fsw fa5, 80(s0)
 ; LP64E-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 76(s1)
+; LP64E-NEXT:    fsw fa5, 76(s0)
 ; LP64E-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 72(s1)
+; LP64E-NEXT:    fsw fa5, 72(s0)
 ; LP64E-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 68(s1)
+; LP64E-NEXT:    fsw fa5, 68(s0)
 ; LP64E-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 64(s1)
+; LP64E-NEXT:    fsw fa5, 64(s0)
 ; LP64E-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 60(s1)
+; LP64E-NEXT:    fsw fa5, 60(s0)
 ; LP64E-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 56(s1)
+; LP64E-NEXT:    fsw fa5, 56(s0)
 ; LP64E-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 52(s1)
+; LP64E-NEXT:    fsw fa5, 52(s0)
 ; LP64E-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 48(s1)
+; LP64E-NEXT:    fsw fa5, 48(s0)
 ; LP64E-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 44(s1)
+; LP64E-NEXT:    fsw fa5, 44(s0)
 ; LP64E-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 40(s1)
+; LP64E-NEXT:    fsw fa5, 40(s0)
 ; LP64E-NEXT:    flw fa5, 88(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 36(s1)
+; LP64E-NEXT:    fsw fa5, 36(s0)
 ; LP64E-NEXT:    flw fa5, 92(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 32(s1)
+; LP64E-NEXT:    fsw fa5, 32(s0)
 ; LP64E-NEXT:    flw fa5, 96(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 28(s1)
+; LP64E-NEXT:    fsw fa5, 28(s0)
 ; LP64E-NEXT:    flw fa5, 100(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 24(s1)
+; LP64E-NEXT:    fsw fa5, 24(s0)
 ; LP64E-NEXT:    flw fa5, 104(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 20(s1)
+; LP64E-NEXT:    fsw fa5, 20(s0)
 ; LP64E-NEXT:    flw fa5, 108(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, 16(s1)
+; LP64E-NEXT:    fsw fa5, 16(s0)
 ; LP64E-NEXT:    flw fa5, 112(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, %lo(var+12)(s0)
+; LP64E-NEXT:    fsw fa5, 12(s0)
 ; LP64E-NEXT:    flw fa5, 116(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, %lo(var+8)(s0)
+; LP64E-NEXT:    fsw fa5, 8(s0)
 ; LP64E-NEXT:    flw fa5, 120(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, %lo(var+4)(s0)
+; LP64E-NEXT:    fsw fa5, 4(s0)
 ; LP64E-NEXT:    flw fa5, 124(sp) # 4-byte Folded Reload
-; LP64E-NEXT:    fsw fa5, %lo(var)(s0)
-; LP64E-NEXT:    ld ra, 144(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    ld s0, 136(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    ld s1, 128(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    addi sp, sp, 152
+; LP64E-NEXT:    fsw fa5, 0(s0)
+; LP64E-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload
+; LP64E-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload
+; LP64E-NEXT:    addi sp, sp, 144
 ; LP64E-NEXT:    ret
 ;
 ; ILP32F-LABEL: caller:
@@ -1278,285 +1270,281 @@ define void @caller() nounwind {
 ; ILP32F-NEXT:    addi sp, sp, -144
 ; ILP32F-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
 ; ILP32F-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs0, 128(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs1, 124(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs2, 120(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs3, 116(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs4, 112(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs5, 108(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs6, 104(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs7, 100(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs8, 96(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs9, 92(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs10, 88(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    fsw fs11, 84(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    lui s0, %hi(var)
-; ILP32F-NEXT:    flw fa5, %lo(var)(s0)
+; ILP32F-NEXT:    fsw fs0, 132(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs1, 128(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs2, 124(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs3, 120(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs4, 116(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs5, 112(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs6, 108(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs7, 104(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs8, 100(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs9, 96(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs10, 92(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    fsw fs11, 88(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    lui a0, %hi(var)
+; ILP32F-NEXT:    addi s0, a0, %lo(var)
+; ILP32F-NEXT:    flw fa5, 0(s0)
+; ILP32F-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
+; ILP32F-NEXT:    flw fa5, 4(s0)
 ; ILP32F-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, %lo(var+4)(s0)
+; ILP32F-NEXT:    flw fa5, 8(s0)
 ; ILP32F-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, %lo(var+8)(s0)
+; ILP32F-NEXT:    flw fa5, 12(s0)
 ; ILP32F-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, %lo(var+12)(s0)
+; ILP32F-NEXT:    flw fa5, 16(s0)
 ; ILP32F-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    addi s1, s0, %lo(var)
-; ILP32F-NEXT:    flw fa5, 16(s1)
+; ILP32F-NEXT:    flw fa5, 20(s0)
 ; ILP32F-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 20(s1)
+; ILP32F-NEXT:    flw fa5, 24(s0)
 ; ILP32F-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 24(s1)
+; ILP32F-NEXT:    flw fa5, 28(s0)
 ; ILP32F-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 28(s1)
+; ILP32F-NEXT:    flw fa5, 32(s0)
 ; ILP32F-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 32(s1)
+; ILP32F-NEXT:    flw fa5, 36(s0)
 ; ILP32F-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 36(s1)
+; ILP32F-NEXT:    flw fa5, 40(s0)
 ; ILP32F-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 40(s1)
+; ILP32F-NEXT:    flw fa5, 44(s0)
 ; ILP32F-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 44(s1)
+; ILP32F-NEXT:    flw fa5, 48(s0)
 ; ILP32F-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 48(s1)
+; ILP32F-NEXT:    flw fa5, 52(s0)
 ; ILP32F-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 52(s1)
+; ILP32F-NEXT:    flw fa5, 56(s0)
 ; ILP32F-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 56(s1)
+; ILP32F-NEXT:    flw fa5, 60(s0)
 ; ILP32F-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 60(s1)
+; ILP32F-NEXT:    flw fa5, 64(s0)
 ; ILP32F-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 64(s1)
+; ILP32F-NEXT:    flw fa5, 68(s0)
 ; ILP32F-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 68(s1)
+; ILP32F-NEXT:    flw fa5, 72(s0)
 ; ILP32F-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 72(s1)
+; ILP32F-NEXT:    flw fa5, 76(s0)
 ; ILP32F-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fa5, 76(s1)
-; ILP32F-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
-; ILP32F-NEXT:    flw fs8, 80(s1)
-; ILP32F-NEXT:    flw fs9, 84(s1)
-; ILP32F-NEXT:    flw fs10, 88(s1)
-; ILP32F-NEXT:    flw fs11, 92(s1)
-; ILP32F-NEXT:    flw fs0, 96(s1)
-; ILP32F-NEXT:    flw fs1, 100(s1)
-; ILP32F-NEXT:    flw fs2, 104(s1)
-; ILP32F-NEXT:    flw fs3, 108(s1)
-; ILP32F-NEXT:    flw fs4, 112(s1)
-; ILP32F-NEXT:    flw fs5, 116(s1)
-; ILP32F-NEXT:    flw fs6, 120(s1)
-; ILP32F-NEXT:    flw fs7, 124(s1)
+; ILP32F-NEXT:    flw fs8, 80(s0)
+; ILP32F-NEXT:    flw fs9, 84(s0)
+; ILP32F-NEXT:    flw fs10, 88(s0)
+; ILP32F-NEXT:    flw fs11, 92(s0)
+; ILP32F-NEXT:    flw fs0, 96(s0)
+; ILP32F-NEXT:    flw fs1, 100(s0)
+; ILP32F-NEXT:    flw fs2, 104(s0)
+; ILP32F-NEXT:    flw fs3, 108(s0)
+; ILP32F-NEXT:    flw fs4, 112(s0)
+; ILP32F-NEXT:    flw fs5, 116(s0)
+; ILP32F-NEXT:    flw fs6, 120(s0)
+; ILP32F-NEXT:    flw fs7, 124(s0)
 ; ILP32F-NEXT:    call callee
-; ILP32F-NEXT:    fsw fs7, 124(s1)
-; ILP32F-NEXT:    fsw fs6, 120(s1)
-; ILP32F-NEXT:    fsw fs5, 116(s1)
-; ILP32F-NEXT:    fsw fs4, 112(s1)
-; ILP32F-NEXT:    fsw fs3, 108(s1)
-; ILP32F-NEXT:    fsw fs2, 104(s1)
-; ILP32F-NEXT:    fsw fs1, 100(s1)
-; ILP32F-NEXT:    fsw fs0, 96(s1)
-; ILP32F-NEXT:    fsw fs11, 92(s1)
-; ILP32F-NEXT:    fsw fs10, 88(s1)
-; ILP32F-NEXT:    fsw fs9, 84(s1)
-; ILP32F-NEXT:    fsw fs8, 80(s1)
-; ILP32F-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 76(s1)
+; ILP32F-NEXT:    fsw fs7, 124(s0)
+; ILP32F-NEXT:    fsw fs6, 120(s0)
+; ILP32F-NEXT:    fsw fs5, 116(s0)
+; ILP32F-NEXT:    fsw fs4, 112(s0)
+; ILP32F-NEXT:    fsw fs3, 108(s0)
+; ILP32F-NEXT:    fsw fs2, 104(s0)
+; ILP32F-NEXT:    fsw fs1, 100(s0)
+; ILP32F-NEXT:    fsw fs0, 96(s0)
+; ILP32F-NEXT:    fsw fs11, 92(s0)
+; ILP32F-NEXT:    fsw fs10, 88(s0)
+; ILP32F-NEXT:    fsw fs9, 84(s0)
+; ILP32F-NEXT:    fsw fs8, 80(s0)
 ; ILP32F-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 72(s1)
+; ILP32F-NEXT:    fsw fa5, 76(s0)
 ; ILP32F-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 68(s1)
+; ILP32F-NEXT:    fsw fa5, 72(s0)
 ; ILP32F-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 64(s1)
+; ILP32F-NEXT:    fsw fa5, 68(s0)
 ; ILP32F-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 60(s1)
+; ILP32F-NEXT:    fsw fa5, 64(s0)
 ; ILP32F-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 56(s1)
+; ILP32F-NEXT:    fsw fa5, 60(s0)
 ; ILP32F-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 52(s1)
+; ILP32F-NEXT:    fsw fa5, 56(s0)
 ; ILP32F-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 48(s1)
+; ILP32F-NEXT:    fsw fa5, 52(s0)
 ; ILP32F-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 44(s1)
+; ILP32F-NEXT:    fsw fa5, 48(s0)
 ; ILP32F-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 40(s1)
+; ILP32F-NEXT:    fsw fa5, 44(s0)
 ; ILP32F-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 36(s1)
+; ILP32F-NEXT:    fsw fa5, 40(s0)
 ; ILP32F-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 32(s1)
+; ILP32F-NEXT:    fsw fa5, 36(s0)
 ; ILP32F-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 28(s1)
+; ILP32F-NEXT:    fsw fa5, 32(s0)
 ; ILP32F-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 24(s1)
+; ILP32F-NEXT:    fsw fa5, 28(s0)
 ; ILP32F-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 20(s1)
+; ILP32F-NEXT:    fsw fa5, 24(s0)
 ; ILP32F-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, 16(s1)
+; ILP32F-NEXT:    fsw fa5, 20(s0)
 ; ILP32F-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, %lo(var+12)(s0)
+; ILP32F-NEXT:    fsw fa5, 16(s0)
 ; ILP32F-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, %lo(var+8)(s0)
+; ILP32F-NEXT:    fsw fa5, 12(s0)
 ; ILP32F-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, %lo(var+4)(s0)
+; ILP32F-NEXT:    fsw fa5, 8(s0)
 ; ILP32F-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    fsw fa5, %lo(var)(s0)
+; ILP32F-NEXT:    fsw fa5, 4(s0)
+; ILP32F-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    fsw fa5, 0(s0)
 ; ILP32F-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
 ; ILP32F-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs0, 128(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs1, 124(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs2, 120(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs3, 116(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs4, 112(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs5, 108(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs6, 104(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs7, 100(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs8, 96(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs9, 92(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs10, 88(sp) # 4-byte Folded Reload
-; ILP32F-NEXT:    flw fs11, 84(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs0, 132(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs1, 128(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs2, 124(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs3, 120(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs4, 116(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs5, 112(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs6, 108(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs7, 104(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs8, 100(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs9, 96(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs10, 92(sp) # 4-byte Folded Reload
+; ILP32F-NEXT:    flw fs11, 88(sp) # 4-byte Folded Reload
 ; ILP32F-NEXT:    addi sp, sp, 144
 ; ILP32F-NEXT:    ret
 ;
 ; LP64F-LABEL: caller:
 ; LP64F:       # %bb.0:
-; LP64F-NEXT:    addi sp, sp, -160
-; LP64F-NEXT:    sd ra, 152(sp) # 8-byte Folded Spill
-; LP64F-NEXT:    sd s0, 144(sp) # 8-byte Folded Spill
-; LP64F-NEXT:    sd s1, 136(sp) # 8-byte Folded Spill
-; LP64F-NEXT:    fsw fs0, 132(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs1, 128(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs2, 124(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs3, 120(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs4, 116(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs5, 112(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs6, 108(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs7, 104(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs8, 100(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs9, 96(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs10, 92(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    fsw fs11, 88(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    lui s0, %hi(var)
-; LP64F-NEXT:    flw fa5, %lo(var)(s0)
-; LP64F-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, %lo(var+4)(s0)
-; LP64F-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, %lo(var+8)(s0)
+; LP64F-NEXT:    addi sp, sp, -144
+; LP64F-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill
+; LP64F-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill
+; LP64F-NEXT:    fsw fs0, 124(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs1, 120(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs2, 116(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs3, 112(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs4, 108(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs5, 104(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs6, 100(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs7, 96(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs8, 92(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs9, 88(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs10, 84(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    fsw fs11, 80(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    lui a0, %hi(var)
+; LP64F-NEXT:    addi s0, a0, %lo(var)
+; LP64F-NEXT:    flw fa5, 0(s0)
 ; LP64F-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, %lo(var+12)(s0)
+; LP64F-NEXT:    flw fa5, 4(s0)
 ; LP64F-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    addi s1, s0, %lo(var)
-; LP64F-NEXT:    flw fa5, 16(s1)
+; LP64F-NEXT:    flw fa5, 8(s0)
 ; LP64F-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 20(s1)
+; LP64F-NEXT:    flw fa5, 12(s0)
 ; LP64F-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 24(s1)
+; LP64F-NEXT:    flw fa5, 16(s0)
 ; LP64F-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 28(s1)
+; LP64F-NEXT:    flw fa5, 20(s0)
 ; LP64F-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 32(s1)
+; LP64F-NEXT:    flw fa5, 24(s0)
 ; LP64F-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 36(s1)
+; LP64F-NEXT:    flw fa5, 28(s0)
 ; LP64F-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 40(s1)
+; LP64F-NEXT:    flw fa5, 32(s0)
 ; LP64F-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 44(s1)
+; LP64F-NEXT:    flw fa5, 36(s0)
 ; LP64F-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 48(s1)
+; LP64F-NEXT:    flw fa5, 40(s0)
 ; LP64F-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 52(s1)
+; LP64F-NEXT:    flw fa5, 44(s0)
 ; LP64F-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 56(s1)
+; LP64F-NEXT:    flw fa5, 48(s0)
 ; LP64F-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 60(s1)
+; LP64F-NEXT:    flw fa5, 52(s0)
 ; LP64F-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 64(s1)
+; LP64F-NEXT:    flw fa5, 56(s0)
 ; LP64F-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 68(s1)
+; LP64F-NEXT:    flw fa5, 60(s0)
 ; LP64F-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 72(s1)
+; LP64F-NEXT:    flw fa5, 64(s0)
 ; LP64F-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fa5, 76(s1)
+; LP64F-NEXT:    flw fa5, 68(s0)
 ; LP64F-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; LP64F-NEXT:    flw fs8, 80(s1)
-; LP64F-NEXT:    flw fs9, 84(s1)
-; LP64F-NEXT:    flw fs10, 88(s1)
-; LP64F-NEXT:    flw fs11, 92(s1)
-; LP64F-NEXT:    flw fs0, 96(s1)
-; LP64F-NEXT:    flw fs1, 100(s1)
-; LP64F-NEXT:    flw fs2, 104(s1)
-; LP64F-NEXT:    flw fs3, 108(s1)
-; LP64F-NEXT:    flw fs4, 112(s1)
-; LP64F-NEXT:    flw fs5, 116(s1)
-; LP64F-NEXT:    flw fs6, 120(s1)
-; LP64F-NEXT:    flw fs7, 124(s1)
+; LP64F-NEXT:    flw fa5, 72(s0)
+; LP64F-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    flw fa5, 76(s0)
+; LP64F-NEXT:    fsw fa5, 0(sp) # 4-byte Folded Spill
+; LP64F-NEXT:    flw fs8, 80(s0)
+; LP64F-NEXT:    flw fs9, 84(s0)
+; LP64F-NEXT:    flw fs10, 88(s0)
+; LP64F-NEXT:    flw fs11, 92(s0)
+; LP64F-NEXT:    flw fs0, 96(s0)
+; LP64F-NEXT:    flw fs1, 100(s0)
+; LP64F-NEXT:    flw fs2, 104(s0)
+; LP64F-NEXT:    flw fs3, 108(s0)
+; LP64F-NEXT:    flw fs4, 112(s0)
+; LP64F-NEXT:    flw fs5, 116(s0)
+; LP64F-NEXT:    flw fs6, 120(s0)
+; LP64F-NEXT:    flw fs7, 124(s0)
 ; LP64F-NEXT:    call callee
-; LP64F-NEXT:    fsw fs7, 124(s1)
-; LP64F-NEXT:    fsw fs6, 120(s1)
-; LP64F-NEXT:    fsw fs5, 116(s1)
-; LP64F-NEXT:    fsw fs4, 112(s1)
-; LP64F-NEXT:    fsw fs3, 108(s1)
-; LP64F-NEXT:    fsw fs2, 104(s1)
-; LP64F-NEXT:    fsw fs1, 100(s1)
-; LP64F-NEXT:    fsw fs0, 96(s1)
-; LP64F-NEXT:    fsw fs11, 92(s1)
-; LP64F-NEXT:    fsw fs10, 88(s1)
-; LP64F-NEXT:    fsw fs9, 84(s1)
-; LP64F-NEXT:    fsw fs8, 80(s1)
+; LP64F-NEXT:    fsw fs7, 124(s0)
+; LP64F-NEXT:    fsw fs6, 120(s0)
+; LP64F-NEXT:    fsw fs5, 116(s0)
+; LP64F-NEXT:    fsw fs4, 112(s0)
+; LP64F-NEXT:    fsw fs3, 108(s0)
+; LP64F-NEXT:    fsw fs2, 104(s0)
+; LP64F-NEXT:    fsw fs1, 100(s0)
+; LP64F-NEXT:    fsw fs0, 96(s0)
+; LP64F-NEXT:    fsw fs11, 92(s0)
+; LP64F-NEXT:    fsw fs10, 88(s0)
+; LP64F-NEXT:    fsw fs9, 84(s0)
+; LP64F-NEXT:    fsw fs8, 80(s0)
+; LP64F-NEXT:    flw fa5, 0(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    fsw fa5, 76(s0)
+; LP64F-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    fsw fa5, 72(s0)
 ; LP64F-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 76(s1)
+; LP64F-NEXT:    fsw fa5, 68(s0)
 ; LP64F-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 72(s1)
+; LP64F-NEXT:    fsw fa5, 64(s0)
 ; LP64F-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 68(s1)
+; LP64F-NEXT:    fsw fa5, 60(s0)
 ; LP64F-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 64(s1)
+; LP64F-NEXT:    fsw fa5, 56(s0)
 ; LP64F-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 60(s1)
+; LP64F-NEXT:    fsw fa5, 52(s0)
 ; LP64F-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 56(s1)
+; LP64F-NEXT:    fsw fa5, 48(s0)
 ; LP64F-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 52(s1)
+; LP64F-NEXT:    fsw fa5, 44(s0)
 ; LP64F-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 48(s1)
+; LP64F-NEXT:    fsw fa5, 40(s0)
 ; LP64F-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 44(s1)
+; LP64F-NEXT:    fsw fa5, 36(s0)
 ; LP64F-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 40(s1)
+; LP64F-NEXT:    fsw fa5, 32(s0)
 ; LP64F-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 36(s1)
+; LP64F-NEXT:    fsw fa5, 28(s0)
 ; LP64F-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 32(s1)
+; LP64F-NEXT:    fsw fa5, 24(s0)
 ; LP64F-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 28(s1)
+; LP64F-NEXT:    fsw fa5, 20(s0)
 ; LP64F-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 24(s1)
+; LP64F-NEXT:    fsw fa5, 16(s0)
 ; LP64F-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 20(s1)
+; LP64F-NEXT:    fsw fa5, 12(s0)
 ; LP64F-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, 16(s1)
+; LP64F-NEXT:    fsw fa5, 8(s0)
 ; LP64F-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, %lo(var+12)(s0)
+; LP64F-NEXT:    fsw fa5, 4(s0)
 ; LP64F-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, %lo(var+8)(s0)
-; LP64F-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, %lo(var+4)(s0)
-; LP64F-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    fsw fa5, %lo(var)(s0)
-; LP64F-NEXT:    ld ra, 152(sp) # 8-byte Folded Reload
-; LP64F-NEXT:    ld s0, 144(sp) # 8-byte Folded Reload
-; LP64F-NEXT:    ld s1, 136(sp) # 8-byte Folded Reload
-; LP64F-NEXT:    flw fs0, 132(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs1, 128(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs2, 124(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs3, 120(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs4, 116(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs5, 112(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs6, 108(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs7, 104(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs8, 100(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs9, 96(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs10, 92(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    flw fs11, 88(sp) # 4-byte Folded Reload
-; LP64F-NEXT:    addi sp, sp, 160
+; LP64F-NEXT:    fsw fa5, 0(s0)
+; LP64F-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload
+; LP64F-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload
+; LP64F-NEXT:    flw fs0, 124(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs1, 120(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs2, 116(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs3, 112(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs4, 108(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs5, 104(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs6, 100(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs7, 96(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs8, 92(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs9, 88(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs10, 84(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    flw fs11, 80(sp) # 4-byte Folded Reload
+; LP64F-NEXT:    addi sp, sp, 144
 ; LP64F-NEXT:    ret
 ;
 ; ILP32D-LABEL: caller:
@@ -1564,285 +1552,281 @@ define void @caller() nounwind {
 ; ILP32D-NEXT:    addi sp, sp, -192
 ; ILP32D-NEXT:    sw ra, 188(sp) # 4-byte Folded Spill
 ; ILP32D-NEXT:    sw s0, 184(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    sw s1, 180(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    fsd fs0, 168(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs1, 160(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs2, 152(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs3, 144(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs4, 136(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs5, 128(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs6, 120(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs7, 112(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs8, 104(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs9, 96(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs10, 88(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs11, 80(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    lui s0, %hi(var)
-; ILP32D-NEXT:    flw fa5, %lo(var)(s0)
+; ILP32D-NEXT:    fsd fs0, 176(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs1, 168(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs2, 160(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs3, 152(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs4, 144(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs5, 136(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs6, 128(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs7, 120(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs8, 112(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs9, 104(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs10, 96(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs11, 88(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    lui a0, %hi(var)
+; ILP32D-NEXT:    addi s0, a0, %lo(var)
+; ILP32D-NEXT:    flw fa5, 0(s0)
+; ILP32D-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
+; ILP32D-NEXT:    flw fa5, 4(s0)
+; ILP32D-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
+; ILP32D-NEXT:    flw fa5, 8(s0)
 ; ILP32D-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, %lo(var+4)(s0)
+; ILP32D-NEXT:    flw fa5, 12(s0)
 ; ILP32D-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, %lo(var+8)(s0)
+; ILP32D-NEXT:    flw fa5, 16(s0)
 ; ILP32D-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, %lo(var+12)(s0)
+; ILP32D-NEXT:    flw fa5, 20(s0)
 ; ILP32D-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    addi s1, s0, %lo(var)
-; ILP32D-NEXT:    flw fa5, 16(s1)
+; ILP32D-NEXT:    flw fa5, 24(s0)
 ; ILP32D-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 20(s1)
+; ILP32D-NEXT:    flw fa5, 28(s0)
 ; ILP32D-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 24(s1)
+; ILP32D-NEXT:    flw fa5, 32(s0)
 ; ILP32D-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 28(s1)
+; ILP32D-NEXT:    flw fa5, 36(s0)
 ; ILP32D-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 32(s1)
+; ILP32D-NEXT:    flw fa5, 40(s0)
 ; ILP32D-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 36(s1)
+; ILP32D-NEXT:    flw fa5, 44(s0)
 ; ILP32D-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 40(s1)
+; ILP32D-NEXT:    flw fa5, 48(s0)
 ; ILP32D-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 44(s1)
+; ILP32D-NEXT:    flw fa5, 52(s0)
 ; ILP32D-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 48(s1)
+; ILP32D-NEXT:    flw fa5, 56(s0)
 ; ILP32D-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 52(s1)
+; ILP32D-NEXT:    flw fa5, 60(s0)
 ; ILP32D-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 56(s1)
+; ILP32D-NEXT:    flw fa5, 64(s0)
 ; ILP32D-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 60(s1)
+; ILP32D-NEXT:    flw fa5, 68(s0)
 ; ILP32D-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 64(s1)
+; ILP32D-NEXT:    flw fa5, 72(s0)
 ; ILP32D-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 68(s1)
+; ILP32D-NEXT:    flw fa5, 76(s0)
 ; ILP32D-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 72(s1)
-; ILP32D-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fa5, 76(s1)
-; ILP32D-NEXT:    fsw fa5, 0(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    flw fs8, 80(s1)
-; ILP32D-NEXT:    flw fs9, 84(s1)
-; ILP32D-NEXT:    flw fs10, 88(s1)
-; ILP32D-NEXT:    flw fs11, 92(s1)
-; ILP32D-NEXT:    flw fs0, 96(s1)
-; ILP32D-NEXT:    flw fs1, 100(s1)
-; ILP32D-NEXT:    flw fs2, 104(s1)
-; ILP32D-NEXT:    flw fs3, 108(s1)
-; ILP32D-NEXT:    flw fs4, 112(s1)
-; ILP32D-NEXT:    flw fs5, 116(s1)
-; ILP32D-NEXT:    flw fs6, 120(s1)
-; ILP32D-NEXT:    flw fs7, 124(s1)
+; ILP32D-NEXT:    flw fs8, 80(s0)
+; ILP32D-NEXT:    flw fs9, 84(s0)
+; ILP32D-NEXT:    flw fs10, 88(s0)
+; ILP32D-NEXT:    flw fs11, 92(s0)
+; ILP32D-NEXT:    flw fs0, 96(s0)
+; ILP32D-NEXT:    flw fs1, 100(s0)
+; ILP32D-NEXT:    flw fs2, 104(s0)
+; ILP32D-NEXT:    flw fs3, 108(s0)
+; ILP32D-NEXT:    flw fs4, 112(s0)
+; ILP32D-NEXT:    flw fs5, 116(s0)
+; ILP32D-NEXT:    flw fs6, 120(s0)
+; ILP32D-NEXT:    flw fs7, 124(s0)
 ; ILP32D-NEXT:    call callee
-; ILP32D-NEXT:    fsw fs7, 124(s1)
-; ILP32D-NEXT:    fsw fs6, 120(s1)
-; ILP32D-NEXT:    fsw fs5, 116(s1)
-; ILP32D-NEXT:    fsw fs4, 112(s1)
-; ILP32D-NEXT:    fsw fs3, 108(s1)
-; ILP32D-NEXT:    fsw fs2, 104(s1)
-; ILP32D-NEXT:    fsw fs1, 100(s1)
-; ILP32D-NEXT:    fsw fs0, 96(s1)
-; ILP32D-NEXT:    fsw fs11, 92(s1)
-; ILP32D-NEXT:    fsw fs10, 88(s1)
-; ILP32D-NEXT:    fsw fs9, 84(s1)
-; ILP32D-NEXT:    fsw fs8, 80(s1)
-; ILP32D-NEXT:    flw fa5, 0(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 76(s1)
-; ILP32D-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 72(s1)
+; ILP32D-NEXT:    fsw fs7, 124(s0)
+; ILP32D-NEXT:    fsw fs6, 120(s0)
+; ILP32D-NEXT:    fsw fs5, 116(s0)
+; ILP32D-NEXT:    fsw fs4, 112(s0)
+; ILP32D-NEXT:    fsw fs3, 108(s0)
+; ILP32D-NEXT:    fsw fs2, 104(s0)
+; ILP32D-NEXT:    fsw fs1, 100(s0)
+; ILP32D-NEXT:    fsw fs0, 96(s0)
+; ILP32D-NEXT:    fsw fs11, 92(s0)
+; ILP32D-NEXT:    fsw fs10, 88(s0)
+; ILP32D-NEXT:    fsw fs9, 84(s0)
+; ILP32D-NEXT:    fsw fs8, 80(s0)
 ; ILP32D-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 68(s1)
+; ILP32D-NEXT:    fsw fa5, 76(s0)
 ; ILP32D-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 64(s1)
+; ILP32D-NEXT:    fsw fa5, 72(s0)
 ; ILP32D-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 60(s1)
+; ILP32D-NEXT:    fsw fa5, 68(s0)
 ; ILP32D-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 56(s1)
+; ILP32D-NEXT:    fsw fa5, 64(s0)
 ; ILP32D-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 52(s1)
+; ILP32D-NEXT:    fsw fa5, 60(s0)
 ; ILP32D-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 48(s1)
+; ILP32D-NEXT:    fsw fa5, 56(s0)
 ; ILP32D-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 44(s1)
+; ILP32D-NEXT:    fsw fa5, 52(s0)
 ; ILP32D-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 40(s1)
+; ILP32D-NEXT:    fsw fa5, 48(s0)
 ; ILP32D-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 36(s1)
+; ILP32D-NEXT:    fsw fa5, 44(s0)
 ; ILP32D-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 32(s1)
+; ILP32D-NEXT:    fsw fa5, 40(s0)
 ; ILP32D-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 28(s1)
+; ILP32D-NEXT:    fsw fa5, 36(s0)
 ; ILP32D-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 24(s1)
+; ILP32D-NEXT:    fsw fa5, 32(s0)
 ; ILP32D-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 20(s1)
+; ILP32D-NEXT:    fsw fa5, 28(s0)
 ; ILP32D-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, 16(s1)
+; ILP32D-NEXT:    fsw fa5, 24(s0)
 ; ILP32D-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, %lo(var+12)(s0)
+; ILP32D-NEXT:    fsw fa5, 20(s0)
 ; ILP32D-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, %lo(var+8)(s0)
+; ILP32D-NEXT:    fsw fa5, 16(s0)
 ; ILP32D-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, %lo(var+4)(s0)
+; ILP32D-NEXT:    fsw fa5, 12(s0)
 ; ILP32D-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fsw fa5, %lo(var)(s0)
+; ILP32D-NEXT:    fsw fa5, 8(s0)
+; ILP32D-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
+; ILP32D-NEXT:    fsw fa5, 4(s0)
+; ILP32D-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
+; ILP32D-NEXT:    fsw fa5, 0(s0)
 ; ILP32D-NEXT:    lw ra, 188(sp) # 4-byte Folded Reload
 ; ILP32D-NEXT:    lw s0, 184(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    lw s1, 180(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fld fs0, 168(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs1, 160(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs2, 152(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs3, 144(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs4, 136(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs5, 128(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs6, 120(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs7, 112(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs8, 104(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs9, 96(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs10, 88(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs11, 80(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs0, 176(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs1, 168(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs2, 160(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs3, 152(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs4, 144(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs5, 136(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs6, 128(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs7, 120(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs8, 112(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs9, 104(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs10, 96(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs11, 88(sp) # 8-byte Folded Reload
 ; ILP32D-NEXT:    addi sp, sp, 192
 ; ILP32D-NEXT:    ret
 ;
 ; LP64D-LABEL: caller:
 ; LP64D:       # %bb.0:
-; LP64D-NEXT:    addi sp, sp, -208
-; LP64D-NEXT:    sd ra, 200(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    sd s0, 192(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    sd s1, 184(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs0, 176(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs1, 168(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs2, 160(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs3, 152(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs4, 144(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs5, 136(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs6, 128(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs7, 120(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs8, 112(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs9, 104(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs10, 96(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs11, 88(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    lui s0, %hi(var)
-; LP64D-NEXT:    flw fa5, %lo(var)(s0)
-; LP64D-NEXT:    fsw fa5, 84(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, %lo(var+4)(s0)
-; LP64D-NEXT:    fsw fa5, 80(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, %lo(var+8)(s0)
+; LP64D-NEXT:    addi sp, sp, -192
+; LP64D-NEXT:    sd ra, 184(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    sd s0, 176(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs0, 168(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs1, 160(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs2, 152(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs3, 144(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs4, 136(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs5, 128(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs6, 120(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs7, 112(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs8, 104(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs9, 96(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs10, 88(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs11, 80(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    lui a0, %hi(var)
+; LP64D-NEXT:    addi s0, a0, %lo(var)
+; LP64D-NEXT:    flw fa5, 0(s0)
 ; LP64D-NEXT:    fsw fa5, 76(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, %lo(var+12)(s0)
+; LP64D-NEXT:    flw fa5, 4(s0)
 ; LP64D-NEXT:    fsw fa5, 72(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    addi s1, s0, %lo(var)
-; LP64D-NEXT:    flw fa5, 16(s1)
+; LP64D-NEXT:    flw fa5, 8(s0)
 ; LP64D-NEXT:    fsw fa5, 68(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 20(s1)
+; LP64D-NEXT:    flw fa5, 12(s0)
 ; LP64D-NEXT:    fsw fa5, 64(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 24(s1)
+; LP64D-NEXT:    flw fa5, 16(s0)
 ; LP64D-NEXT:    fsw fa5, 60(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 28(s1)
+; LP64D-NEXT:    flw fa5, 20(s0)
 ; LP64D-NEXT:    fsw fa5, 56(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 32(s1)
+; LP64D-NEXT:    flw fa5, 24(s0)
 ; LP64D-NEXT:    fsw fa5, 52(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 36(s1)
+; LP64D-NEXT:    flw fa5, 28(s0)
 ; LP64D-NEXT:    fsw fa5, 48(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 40(s1)
+; LP64D-NEXT:    flw fa5, 32(s0)
 ; LP64D-NEXT:    fsw fa5, 44(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 44(s1)
+; LP64D-NEXT:    flw fa5, 36(s0)
 ; LP64D-NEXT:    fsw fa5, 40(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 48(s1)
+; LP64D-NEXT:    flw fa5, 40(s0)
 ; LP64D-NEXT:    fsw fa5, 36(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 52(s1)
+; LP64D-NEXT:    flw fa5, 44(s0)
 ; LP64D-NEXT:    fsw fa5, 32(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 56(s1)
+; LP64D-NEXT:    flw fa5, 48(s0)
 ; LP64D-NEXT:    fsw fa5, 28(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 60(s1)
+; LP64D-NEXT:    flw fa5, 52(s0)
 ; LP64D-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 64(s1)
+; LP64D-NEXT:    flw fa5, 56(s0)
 ; LP64D-NEXT:    fsw fa5, 20(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 68(s1)
+; LP64D-NEXT:    flw fa5, 60(s0)
 ; LP64D-NEXT:    fsw fa5, 16(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 72(s1)
+; LP64D-NEXT:    flw fa5, 64(s0)
 ; LP64D-NEXT:    fsw fa5, 12(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fa5, 76(s1)
+; LP64D-NEXT:    flw fa5, 68(s0)
 ; LP64D-NEXT:    fsw fa5, 8(sp) # 4-byte Folded Spill
-; LP64D-NEXT:    flw fs8, 80(s1)
-; LP64D-NEXT:    flw fs9, 84(s1)
-; LP64D-NEXT:    flw fs10, 88(s1)
-; LP64D-NEXT:    flw fs11, 92(s1)
-; LP64D-NEXT:    flw fs0, 96(s1)
-; LP64D-NEXT:    flw fs1, 100(s1)
-; LP64D-NEXT:    flw fs2, 104(s1)
-; LP64D-NEXT:    flw fs3, 108(s1)
-; LP64D-NEXT:    flw fs4, 112(s1)
-; LP64D-NEXT:    flw fs5, 116(s1)
-; LP64D-NEXT:    flw fs6, 120(s1)
-; LP64D-NEXT:    flw fs7, 124(s1)
+; LP64D-NEXT:    flw fa5, 72(s0)
+; LP64D-NEXT:    fsw fa5, 4(sp) # 4-byte Folded Spill
+; LP64D-NEXT:    flw fa5, 76(s0)
+; LP64D-NEXT:    fsw fa5, 0(sp) # 4-byte Folded Spill
+; LP64D-NEXT:    flw fs8, 80(s0)
+; LP64D-NEXT:    flw fs9, 84(s0)
+; LP64D-NEXT:    flw fs10, 88(s0)
+; LP64D-NEXT:    flw fs11, 92(s0)
+; LP64D-NEXT:    flw fs0, 96(s0)
+; LP64D-NEXT:    flw fs1, 100(s0)
+; LP64D-NEXT:    flw fs2, 104(s0)
+; LP64D-NEXT:    flw fs3, 108(s0)
+; LP64D-NEXT:    flw fs4, 112(s0)
+; LP64D-NEXT:    flw fs5, 116(s0)
+; LP64D-NEXT:    flw fs6, 120(s0)
+; LP64D-NEXT:    flw fs7, 124(s0)
 ; LP64D-NEXT:    call callee
-; LP64D-NEXT:    fsw fs7, 124(s1)
-; LP64D-NEXT:    fsw fs6, 120(s1)
-; LP64D-NEXT:    fsw fs5, 116(s1)
-; LP64D-NEXT:    fsw fs4, 112(s1)
-; LP64D-NEXT:    fsw fs3, 108(s1)
-; LP64D-NEXT:    fsw fs2, 104(s1)
-; LP64D-NEXT:    fsw fs1, 100(s1)
-; LP64D-NEXT:    fsw fs0, 96(s1)
-; LP64D-NEXT:    fsw fs11, 92(s1)
-; LP64D-NEXT:    fsw fs10, 88(s1)
-; LP64D-NEXT:    fsw fs9, 84(s1)
-; LP64D-NEXT:    fsw fs8, 80(s1)
+; LP64D-NEXT:    fsw fs7, 124(s0)
+; LP64D-NEXT:    fsw fs6, 120(s0)
+; LP64D-NEXT:    fsw fs5, 116(s0)
+; LP64D-NEXT:    fsw fs4, 112(s0)
+; LP64D-NEXT:    fsw fs3, 108(s0)
+; LP64D-NEXT:    fsw fs2, 104(s0)
+; LP64D-NEXT:    fsw fs1, 100(s0)
+; LP64D-NEXT:    fsw fs0, 96(s0)
+; LP64D-NEXT:    fsw fs11, 92(s0)
+; LP64D-NEXT:    fsw fs10, 88(s0)
+; LP64D-NEXT:    fsw fs9, 84(s0)
+; LP64D-NEXT:    fsw fs8, 80(s0)
+; LP64D-NEXT:    flw fa5, 0(sp) # 4-byte Folded Reload
+; LP64D-NEXT:    fsw fa5, 76(s0)
+; LP64D-NEXT:    flw fa5, 4(sp) # 4-byte Folded Reload
+; LP64D-NEXT:    fsw fa5, 72(s0)
 ; LP64D-NEXT:    flw fa5, 8(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 76(s1)
+; LP64D-NEXT:    fsw fa5, 68(s0)
 ; LP64D-NEXT:    flw fa5, 12(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 72(s1)
+; LP64D-NEXT:    fsw fa5, 64(s0)
 ; LP64D-NEXT:    flw fa5, 16(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 68(s1)
+; LP64D-NEXT:    fsw fa5, 60(s0)
 ; LP64D-NEXT:    flw fa5, 20(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 64(s1)
+; LP64D-NEXT:    fsw fa5, 56(s0)
 ; LP64D-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 60(s1)
+; LP64D-NEXT:    fsw fa5, 52(s0)
 ; LP64D-NEXT:    flw fa5, 28(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 56(s1)
+; LP64D-NEXT:    fsw fa5, 48(s0)
 ; LP64D-NEXT:    flw fa5, 32(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 52(s1)
+; LP64D-NEXT:    fsw fa5, 44(s0)
 ; LP64D-NEXT:    flw fa5, 36(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 48(s1)
+; LP64D-NEXT:    fsw fa5, 40(s0)
 ; LP64D-NEXT:    flw fa5, 40(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 44(s1)
+; LP64D-NEXT:    fsw fa5, 36(s0)
 ; LP64D-NEXT:    flw fa5, 44(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 40(s1)
+; LP64D-NEXT:    fsw fa5, 32(s0)
 ; LP64D-NEXT:    flw fa5, 48(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 36(s1)
+; LP64D-NEXT:    fsw fa5, 28(s0)
 ; LP64D-NEXT:    flw fa5, 52(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 32(s1)
+; LP64D-NEXT:    fsw fa5, 24(s0)
 ; LP64D-NEXT:    flw fa5, 56(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 28(s1)
+; LP64D-NEXT:    fsw fa5, 20(s0)
 ; LP64D-NEXT:    flw fa5, 60(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 24(s1)
+; LP64D-NEXT:    fsw fa5, 16(s0)
 ; LP64D-NEXT:    flw fa5, 64(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 20(s1)
+; LP64D-NEXT:    fsw fa5, 12(s0)
 ; LP64D-NEXT:    flw fa5, 68(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, 16(s1)
+; LP64D-NEXT:    fsw fa5, 8(s0)
 ; LP64D-NEXT:    flw fa5, 72(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, %lo(var+12)(s0)
+; LP64D-NEXT:    fsw fa5, 4(s0)
 ; LP64D-NEXT:    flw fa5, 76(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, %lo(var+8)(s0)
-; LP64D-NEXT:    flw fa5, 80(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, %lo(var+4)(s0)
-; LP64D-NEXT:    flw fa5, 84(sp) # 4-byte Folded Reload
-; LP64D-NEXT:    fsw fa5, %lo(var)(s0)
-; LP64D-NEXT:    ld ra, 200(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    ld s0, 192(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    ld s1, 184(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs0, 176(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs1, 168(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs2, 160(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs3, 152(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs4, 144(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs5, 136(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs6, 128(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs7, 120(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs8, 112(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs9, 104(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs10, 96(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs11, 88(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    addi sp, sp, 208
+; LP64D-NEXT:    fsw fa5, 0(s0)
+; LP64D-NEXT:    ld ra, 184(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    ld s0, 176(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs0, 168(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs1, 160(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs2, 152(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs3, 144(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs4, 136(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs5, 128(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs6, 120(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs7, 112(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs8, 104(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs9, 96(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs10, 88(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs11, 80(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    addi sp, sp, 192
 ; LP64D-NEXT:    ret
   %val = load [32 x float], ptr @var
   call void @callee()
diff --git a/llvm/test/CodeGen/RISCV/callee-saved-fpr64s.ll b/llvm/test/CodeGen/RISCV/callee-saved-fpr64s.ll
index 38e3c2d9256cd..0b761e354d442 100644
--- a/llvm/test/CodeGen/RISCV/callee-saved-fpr64s.ll
+++ b/llvm/test/CodeGen/RISCV/callee-saved-fpr64s.ll
@@ -22,211 +22,211 @@ define void @callee() nounwind {
 ; ILP32-LABEL: callee:
 ; ILP32:       # %bb.0:
 ; ILP32-NEXT:    lui a0, %hi(var)
-; ILP32-NEXT:    fld fa5, %lo(var)(a0)
-; ILP32-NEXT:    fld fa4, %lo(var+8)(a0)
-; ILP32-NEXT:    addi a1, a0, %lo(var)
-; ILP32-NEXT:    fld fa3, 16(a1)
-; ILP32-NEXT:    fld fa2, 24(a1)
-; ILP32-NEXT:    fld fa1, 32(a1)
-; ILP32-NEXT:    fld fa0, 40(a1)
-; ILP32-NEXT:    fld ft0, 48(a1)
-; ILP32-NEXT:    fld ft1, 56(a1)
-; ILP32-NEXT:    fld ft2, 64(a1)
-; ILP32-NEXT:    fld ft3, 72(a1)
-; ILP32-NEXT:    fld ft4, 80(a1)
-; ILP32-NEXT:    fld ft5, 88(a1)
-; ILP32-NEXT:    fld ft6, 96(a1)
-; ILP32-NEXT:    fld ft7, 104(a1)
-; ILP32-NEXT:    fld fa6, 112(a1)
-; ILP32-NEXT:    fld fa7, 120(a1)
-; ILP32-NEXT:    fld ft8, 128(a1)
-; ILP32-NEXT:    fld ft9, 136(a1)
-; ILP32-NEXT:    fld ft10, 144(a1)
-; ILP32-NEXT:    fld ft11, 152(a1)
-; ILP32-NEXT:    fld fs0, 160(a1)
-; ILP32-NEXT:    fld fs1, 168(a1)
-; ILP32-NEXT:    fld fs2, 176(a1)
-; ILP32-NEXT:    fld fs3, 184(a1)
-; ILP32-NEXT:    fld fs4, 192(a1)
-; ILP32-NEXT:    fld fs5, 200(a1)
-; ILP32-NEXT:    fld fs6, 208(a1)
-; ILP32-NEXT:    fld fs7, 216(a1)
-; ILP32-NEXT:    fld fs8, 248(a1)
-; ILP32-NEXT:    fld fs9, 240(a1)
-; ILP32-NEXT:    fld fs10, 232(a1)
-; ILP32-NEXT:    fld fs11, 224(a1)
-; ILP32-NEXT:    fsd fs8, 248(a1)
-; ILP32-NEXT:    fsd fs9, 240(a1)
-; ILP32-NEXT:    fsd fs10, 232(a1)
-; ILP32-NEXT:    fsd fs11, 224(a1)
-; ILP32-NEXT:    fsd fs7, 216(a1)
-; ILP32-NEXT:    fsd fs6, 208(a1)
-; ILP32-NEXT:    fsd fs5, 200(a1)
-; ILP32-NEXT:    fsd fs4, 192(a1)
-; ILP32-NEXT:    fsd fs3, 184(a1)
-; ILP32-NEXT:    fsd fs2, 176(a1)
-; ILP32-NEXT:    fsd fs1, 168(a1)
-; ILP32-NEXT:    fsd fs0, 160(a1)
-; ILP32-NEXT:    fsd ft11, 152(a1)
-; ILP32-NEXT:    fsd ft10, 144(a1)
-; ILP32-NEXT:    fsd ft9, 136(a1)
-; ILP32-NEXT:    fsd ft8, 128(a1)
-; ILP32-NEXT:    fsd fa7, 120(a1)
-; ILP32-NEXT:    fsd fa6, 112(a1)
-; ILP32-NEXT:    fsd ft7, 104(a1)
-; ILP32-NEXT:    fsd ft6, 96(a1)
-; ILP32-NEXT:    fsd ft5, 88(a1)
-; ILP32-NEXT:    fsd ft4, 80(a1)
-; ILP32-NEXT:    fsd ft3, 72(a1)
-; ILP32-NEXT:    fsd ft2, 64(a1)
-; ILP32-NEXT:    fsd ft1, 56(a1)
-; ILP32-NEXT:    fsd ft0, 48(a1)
-; ILP32-NEXT:    fsd fa0, 40(a1)
-; ILP32-NEXT:    fsd fa1, 32(a1)
-; ILP32-NEXT:    fsd fa2, 24(a1)
-; ILP32-NEXT:    fsd fa3, 16(a1)
-; ILP32-NEXT:    fsd fa4, %lo(var+8)(a0)
-; ILP32-NEXT:    fsd fa5, %lo(var)(a0)
+; ILP32-NEXT:    addi a0, a0, %lo(var)
+; ILP32-NEXT:    fld fa5, 0(a0)
+; ILP32-NEXT:    fld fa4, 8(a0)
+; ILP32-NEXT:    fld fa3, 16(a0)
+; ILP32-NEXT:    fld fa2, 24(a0)
+; ILP32-NEXT:    fld fa1, 32(a0)
+; ILP32-NEXT:    fld fa0, 40(a0)
+; ILP32-NEXT:    fld ft0, 48(a0)
+; ILP32-NEXT:    fld ft1, 56(a0)
+; ILP32-NEXT:    fld ft2, 64(a0)
+; ILP32-NEXT:    fld ft3, 72(a0)
+; ILP32-NEXT:    fld ft4, 80(a0)
+; ILP32-NEXT:    fld ft5, 88(a0)
+; ILP32-NEXT:    fld ft6, 96(a0)
+; ILP32-NEXT:    fld ft7, 104(a0)
+; ILP32-NEXT:    fld fa6, 112(a0)
+; ILP32-NEXT:    fld fa7, 120(a0)
+; ILP32-NEXT:    fld ft8, 128(a0)
+; ILP32-NEXT:    fld ft9, 136(a0)
+; ILP32-NEXT:    fld ft10, 144(a0)
+; ILP32-NEXT:    fld ft11, 152(a0)
+; ILP32-NEXT:    fld fs0, 160(a0)
+; ILP32-NEXT:    fld fs1, 168(a0)
+; ILP32-NEXT:    fld fs2, 176(a0)
+; ILP32-NEXT:    fld fs3, 184(a0)
+; ILP32-NEXT:    fld fs4, 192(a0)
+; ILP32-NEXT:    fld fs5, 200(a0)
+; ILP32-NEXT:    fld fs6, 208(a0)
+; ILP32-NEXT:    fld fs7, 216(a0)
+; ILP32-NEXT:    fld fs8, 248(a0)
+; ILP32-NEXT:    fld fs9, 240(a0)
+; ILP32-NEXT:    fld fs10, 232(a0)
+; ILP32-NEXT:    fld fs11, 224(a0)
+; ILP32-NEXT:    fsd fs8, 248(a0)
+; ILP32-NEXT:    fsd fs9, 240(a0)
+; ILP32-NEXT:    fsd fs10, 232(a0)
+; ILP32-NEXT:    fsd fs11, 224(a0)
+; ILP32-NEXT:    fsd fs7, 216(a0)
+; ILP32-NEXT:    fsd fs6, 208(a0)
+; ILP32-NEXT:    fsd fs5, 200(a0)
+; ILP32-NEXT:    fsd fs4, 192(a0)
+; ILP32-NEXT:    fsd fs3, 184(a0)
+; ILP32-NEXT:    fsd fs2, 176(a0)
+; ILP32-NEXT:    fsd fs1, 168(a0)
+; ILP32-NEXT:    fsd fs0, 160(a0)
+; ILP32-NEXT:    fsd ft11, 152(a0)
+; ILP32-NEXT:    fsd ft10, 144(a0)
+; ILP32-NEXT:    fsd ft9, 136(a0)
+; ILP32-NEXT:    fsd ft8, 128(a0)
+; ILP32-NEXT:    fsd fa7, 120(a0)
+; ILP32-NEXT:    fsd fa6, 112(a0)
+; ILP32-NEXT:    fsd ft7, 104(a0)
+; ILP32-NEXT:    fsd ft6, 96(a0)
+; ILP32-NEXT:    fsd ft5, 88(a0)
+; ILP32-NEXT:    fsd ft4, 80(a0)
+; ILP32-NEXT:    fsd ft3, 72(a0)
+; ILP32-NEXT:    fsd ft2, 64(a0)
+; ILP32-NEXT:    fsd ft1, 56(a0)
+; ILP32-NEXT:    fsd ft0, 48(a0)
+; ILP32-NEXT:    fsd fa0, 40(a0)
+; ILP32-NEXT:    fsd fa1, 32(a0)
+; ILP32-NEXT:    fsd fa2, 24(a0)
+; ILP32-NEXT:    fsd fa3, 16(a0)
+; ILP32-NEXT:    fsd fa4, 8(a0)
+; ILP32-NEXT:    fsd fa5, 0(a0)
 ; ILP32-NEXT:    ret
 ;
 ; LP64-LABEL: callee:
 ; LP64:       # %bb.0:
 ; LP64-NEXT:    lui a0, %hi(var)
-; LP64-NEXT:    fld fa5, %lo(var)(a0)
-; LP64-NEXT:    fld fa4, %lo(var+8)(a0)
-; LP64-NEXT:    addi a1, a0, %lo(var)
-; LP64-NEXT:    fld fa3, 16(a1)
-; LP64-NEXT:    fld fa2, 24(a1)
-; LP64-NEXT:    fld fa1, 32(a1)
-; LP64-NEXT:    fld fa0, 40(a1)
-; LP64-NEXT:    fld ft0, 48(a1)
-; LP64-NEXT:    fld ft1, 56(a1)
-; LP64-NEXT:    fld ft2, 64(a1)
-; LP64-NEXT:    fld ft3, 72(a1)
-; LP64-NEXT:    fld ft4, 80(a1)
-; LP64-NEXT:    fld ft5, 88(a1)
-; LP64-NEXT:    fld ft6, 96(a1)
-; LP64-NEXT:    fld ft7, 104(a1)
-; LP64-NEXT:    fld fa6, 112(a1)
-; LP64-NEXT:    fld fa7, 120(a1)
-; LP64-NEXT:    fld ft8, 128(a1)
-; LP64-NEXT:    fld ft9, 136(a1)
-; LP64-NEXT:    fld ft10, 144(a1)
-; LP64-NEXT:    fld ft11, 152(a1)
-; LP64-NEXT:    fld fs0, 160(a1)
-; LP64-NEXT:    fld fs1, 168(a1)
-; LP64-NEXT:    fld fs2, 176(a1)
-; LP64-NEXT:    fld fs3, 184(a1)
-; LP64-NEXT:    fld fs4, 192(a1)
-; LP64-NEXT:    fld fs5, 200(a1)
-; LP64-NEXT:    fld fs6, 208(a1)
-; LP64-NEXT:    fld fs7, 216(a1)
-; LP64-NEXT:    fld fs8, 248(a1)
-; LP64-NEXT:    fld fs9, 240(a1)
-; LP64-NEXT:    fld fs10, 232(a1)
-; LP64-NEXT:    fld fs11, 224(a1)
-; LP64-NEXT:    fsd fs8, 248(a1)
-; LP64-NEXT:    fsd fs9, 240(a1)
-; LP64-NEXT:    fsd fs10, 232(a1)
-; LP64-NEXT:    fsd fs11, 224(a1)
-; LP64-NEXT:    fsd fs7, 216(a1)
-; LP64-NEXT:    fsd fs6, 208(a1)
-; LP64-NEXT:    fsd fs5, 200(a1)
-; LP64-NEXT:    fsd fs4, 192(a1)
-; LP64-NEXT:    fsd fs3, 184(a1)
-; LP64-NEXT:    fsd fs2, 176(a1)
-; LP64-NEXT:    fsd fs1, 168(a1)
-; LP64-NEXT:    fsd fs0, 160(a1)
-; LP64-NEXT:    fsd ft11, 152(a1)
-; LP64-NEXT:    fsd ft10, 144(a1)
-; LP64-NEXT:    fsd ft9, 136(a1)
-; LP64-NEXT:    fsd ft8, 128(a1)
-; LP64-NEXT:    fsd fa7, 120(a1)
-; LP64-NEXT:    fsd fa6, 112(a1)
-; LP64-NEXT:    fsd ft7, 104(a1)
-; LP64-NEXT:    fsd ft6, 96(a1)
-; LP64-NEXT:    fsd ft5, 88(a1)
-; LP64-NEXT:    fsd ft4, 80(a1)
-; LP64-NEXT:    fsd ft3, 72(a1)
-; LP64-NEXT:    fsd ft2, 64(a1)
-; LP64-NEXT:    fsd ft1, 56(a1)
-; LP64-NEXT:    fsd ft0, 48(a1)
-; LP64-NEXT:    fsd fa0, 40(a1)
-; LP64-NEXT:    fsd fa1, 32(a1)
-; LP64-NEXT:    fsd fa2, 24(a1)
-; LP64-NEXT:    fsd fa3, 16(a1)
-; LP64-NEXT:    fsd fa4, %lo(var+8)(a0)
-; LP64-NEXT:    fsd fa5, %lo(var)(a0)
+; LP64-NEXT:    addi a0, a0, %lo(var)
+; LP64-NEXT:    fld fa5, 0(a0)
+; LP64-NEXT:    fld fa4, 8(a0)
+; LP64-NEXT:    fld fa3, 16(a0)
+; LP64-NEXT:    fld fa2, 24(a0)
+; LP64-NEXT:    fld fa1, 32(a0)
+; LP64-NEXT:    fld fa0, 40(a0)
+; LP64-NEXT:    fld ft0, 48(a0)
+; LP64-NEXT:    fld ft1, 56(a0)
+; LP64-NEXT:    fld ft2, 64(a0)
+; LP64-NEXT:    fld ft3, 72(a0)
+; LP64-NEXT:    fld ft4, 80(a0)
+; LP64-NEXT:    fld ft5, 88(a0)
+; LP64-NEXT:    fld ft6, 96(a0)
+; LP64-NEXT:    fld ft7, 104(a0)
+; LP64-NEXT:    fld fa6, 112(a0)
+; LP64-NEXT:    fld fa7, 120(a0)
+; LP64-NEXT:    fld ft8, 128(a0)
+; LP64-NEXT:    fld ft9, 136(a0)
+; LP64-NEXT:    fld ft10, 144(a0)
+; LP64-NEXT:    fld ft11, 152(a0)
+; LP64-NEXT:    fld fs0, 160(a0)
+; LP64-NEXT:    fld fs1, 168(a0)
+; LP64-NEXT:    fld fs2, 176(a0)
+; LP64-NEXT:    fld fs3, 184(a0)
+; LP64-NEXT:    fld fs4, 192(a0)
+; LP64-NEXT:    fld fs5, 200(a0)
+; LP64-NEXT:    fld fs6, 208(a0)
+; LP64-NEXT:    fld fs7, 216(a0)
+; LP64-NEXT:    fld fs8, 248(a0)
+; LP64-NEXT:    fld fs9, 240(a0)
+; LP64-NEXT:    fld fs10, 232(a0)
+; LP64-NEXT:    fld fs11, 224(a0)
+; LP64-NEXT:    fsd fs8, 248(a0)
+; LP64-NEXT:    fsd fs9, 240(a0)
+; LP64-NEXT:    fsd fs10, 232(a0)
+; LP64-NEXT:    fsd fs11, 224(a0)
+; LP64-NEXT:    fsd fs7, 216(a0)
+; LP64-NEXT:    fsd fs6, 208(a0)
+; LP64-NEXT:    fsd fs5, 200(a0)
+; LP64-NEXT:    fsd fs4, 192(a0)
+; LP64-NEXT:    fsd fs3, 184(a0)
+; LP64-NEXT:    fsd fs2, 176(a0)
+; LP64-NEXT:    fsd fs1, 168(a0)
+; LP64-NEXT:    fsd fs0, 160(a0)
+; LP64-NEXT:    fsd ft11, 152(a0)
+; LP64-NEXT:    fsd ft10, 144(a0)
+; LP64-NEXT:    fsd ft9, 136(a0)
+; LP64-NEXT:    fsd ft8, 128(a0)
+; LP64-NEXT:    fsd fa7, 120(a0)
+; LP64-NEXT:    fsd fa6, 112(a0)
+; LP64-NEXT:    fsd ft7, 104(a0)
+; LP64-NEXT:    fsd ft6, 96(a0)
+; LP64-NEXT:    fsd ft5, 88(a0)
+; LP64-NEXT:    fsd ft4, 80(a0)
+; LP64-NEXT:    fsd ft3, 72(a0)
+; LP64-NEXT:    fsd ft2, 64(a0)
+; LP64-NEXT:    fsd ft1, 56(a0)
+; LP64-NEXT:    fsd ft0, 48(a0)
+; LP64-NEXT:    fsd fa0, 40(a0)
+; LP64-NEXT:    fsd fa1, 32(a0)
+; LP64-NEXT:    fsd fa2, 24(a0)
+; LP64-NEXT:    fsd fa3, 16(a0)
+; LP64-NEXT:    fsd fa4, 8(a0)
+; LP64-NEXT:    fsd fa5, 0(a0)
 ; LP64-NEXT:    ret
 ;
 ; LP64E-LABEL: callee:
 ; LP64E:       # %bb.0:
 ; LP64E-NEXT:    lui a0, %hi(var)
-; LP64E-NEXT:    fld fa5, %lo(var)(a0)
-; LP64E-NEXT:    fld fa4, %lo(var+8)(a0)
-; LP64E-NEXT:    addi a1, a0, %lo(var)
-; LP64E-NEXT:    fld fa3, 16(a1)
-; LP64E-NEXT:    fld fa2, 24(a1)
-; LP64E-NEXT:    fld fa1, 32(a1)
-; LP64E-NEXT:    fld fa0, 40(a1)
-; LP64E-NEXT:    fld ft0, 48(a1)
-; LP64E-NEXT:    fld ft1, 56(a1)
-; LP64E-NEXT:    fld ft2, 64(a1)
-; LP64E-NEXT:    fld ft3, 72(a1)
-; LP64E-NEXT:    fld ft4, 80(a1)
-; LP64E-NEXT:    fld ft5, 88(a1)
-; LP64E-NEXT:    fld ft6, 96(a1)
-; LP64E-NEXT:    fld ft7, 104(a1)
-; LP64E-NEXT:    fld fa6, 112(a1)
-; LP64E-NEXT:    fld fa7, 120(a1)
-; LP64E-NEXT:    fld ft8, 128(a1)
-; LP64E-NEXT:    fld ft9, 136(a1)
-; LP64E-NEXT:    fld ft10, 144(a1)
-; LP64E-NEXT:    fld ft11, 152(a1)
-; LP64E-NEXT:    fld fs0, 160(a1)
-; LP64E-NEXT:    fld fs1, 168(a1)
-; LP64E-NEXT:    fld fs2, 176(a1)
-; LP64E-NEXT:    fld fs3, 184(a1)
-; LP64E-NEXT:    fld fs4, 192(a1)
-; LP64E-NEXT:    fld fs5, 200(a1)
-; LP64E-NEXT:    fld fs6, 208(a1)
-; LP64E-NEXT:    fld fs7, 216(a1)
-; LP64E-NEXT:    fld fs8, 248(a1)
-; LP64E-NEXT:    fld fs9, 240(a1)
-; LP64E-NEXT:    fld fs10, 232(a1)
-; LP64E-NEXT:    fld fs11, 224(a1)
-; LP64E-NEXT:    fsd fs8, 248(a1)
-; LP64E-NEXT:    fsd fs9, 240(a1)
-; LP64E-NEXT:    fsd fs10, 232(a1)
-; LP64E-NEXT:    fsd fs11, 224(a1)
-; LP64E-NEXT:    fsd fs7, 216(a1)
-; LP64E-NEXT:    fsd fs6, 208(a1)
-; LP64E-NEXT:    fsd fs5, 200(a1)
-; LP64E-NEXT:    fsd fs4, 192(a1)
-; LP64E-NEXT:    fsd fs3, 184(a1)
-; LP64E-NEXT:    fsd fs2, 176(a1)
-; LP64E-NEXT:    fsd fs1, 168(a1)
-; LP64E-NEXT:    fsd fs0, 160(a1)
-; LP64E-NEXT:    fsd ft11, 152(a1)
-; LP64E-NEXT:    fsd ft10, 144(a1)
-; LP64E-NEXT:    fsd ft9, 136(a1)
-; LP64E-NEXT:    fsd ft8, 128(a1)
-; LP64E-NEXT:    fsd fa7, 120(a1)
-; LP64E-NEXT:    fsd fa6, 112(a1)
-; LP64E-NEXT:    fsd ft7, 104(a1)
-; LP64E-NEXT:    fsd ft6, 96(a1)
-; LP64E-NEXT:    fsd ft5, 88(a1)
-; LP64E-NEXT:    fsd ft4, 80(a1)
-; LP64E-NEXT:    fsd ft3, 72(a1)
-; LP64E-NEXT:    fsd ft2, 64(a1)
-; LP64E-NEXT:    fsd ft1, 56(a1)
-; LP64E-NEXT:    fsd ft0, 48(a1)
-; LP64E-NEXT:    fsd fa0, 40(a1)
-; LP64E-NEXT:    fsd fa1, 32(a1)
-; LP64E-NEXT:    fsd fa2, 24(a1)
-; LP64E-NEXT:    fsd fa3, 16(a1)
-; LP64E-NEXT:    fsd fa4, %lo(var+8)(a0)
-; LP64E-NEXT:    fsd fa5, %lo(var)(a0)
+; LP64E-NEXT:    addi a0, a0, %lo(var)
+; LP64E-NEXT:    fld fa5, 0(a0)
+; LP64E-NEXT:    fld fa4, 8(a0)
+; LP64E-NEXT:    fld fa3, 16(a0)
+; LP64E-NEXT:    fld fa2, 24(a0)
+; LP64E-NEXT:    fld fa1, 32(a0)
+; LP64E-NEXT:    fld fa0, 40(a0)
+; LP64E-NEXT:    fld ft0, 48(a0)
+; LP64E-NEXT:    fld ft1, 56(a0)
+; LP64E-NEXT:    fld ft2, 64(a0)
+; LP64E-NEXT:    fld ft3, 72(a0)
+; LP64E-NEXT:    fld ft4, 80(a0)
+; LP64E-NEXT:    fld ft5, 88(a0)
+; LP64E-NEXT:    fld ft6, 96(a0)
+; LP64E-NEXT:    fld ft7, 104(a0)
+; LP64E-NEXT:    fld fa6, 112(a0)
+; LP64E-NEXT:    fld fa7, 120(a0)
+; LP64E-NEXT:    fld ft8, 128(a0)
+; LP64E-NEXT:    fld ft9, 136(a0)
+; LP64E-NEXT:    fld ft10, 144(a0)
+; LP64E-NEXT:    fld ft11, 152(a0)
+; LP64E-NEXT:    fld fs0, 160(a0)
+; LP64E-NEXT:    fld fs1, 168(a0)
+; LP64E-NEXT:    fld fs2, 176(a0)
+; LP64E-NEXT:    fld fs3, 184(a0)
+; LP64E-NEXT:    fld fs4, 192(a0)
+; LP64E-NEXT:    fld fs5, 200(a0)
+; LP64E-NEXT:    fld fs6, 208(a0)
+; LP64E-NEXT:    fld fs7, 216(a0)
+; LP64E-NEXT:    fld fs8, 248(a0)
+; LP64E-NEXT:    fld fs9, 240(a0)
+; LP64E-NEXT:    fld fs10, 232(a0)
+; LP64E-NEXT:    fld fs11, 224(a0)
+; LP64E-NEXT:    fsd fs8, 248(a0)
+; LP64E-NEXT:    fsd fs9, 240(a0)
+; LP64E-NEXT:    fsd fs10, 232(a0)
+; LP64E-NEXT:    fsd fs11, 224(a0)
+; LP64E-NEXT:    fsd fs7, 216(a0)
+; LP64E-NEXT:    fsd fs6, 208(a0)
+; LP64E-NEXT:    fsd fs5, 200(a0)
+; LP64E-NEXT:    fsd fs4, 192(a0)
+; LP64E-NEXT:    fsd fs3, 184(a0)
+; LP64E-NEXT:    fsd fs2, 176(a0)
+; LP64E-NEXT:    fsd fs1, 168(a0)
+; LP64E-NEXT:    fsd fs0, 160(a0)
+; LP64E-NEXT:    fsd ft11, 152(a0)
+; LP64E-NEXT:    fsd ft10, 144(a0)
+; LP64E-NEXT:    fsd ft9, 136(a0)
+; LP64E-NEXT:    fsd ft8, 128(a0)
+; LP64E-NEXT:    fsd fa7, 120(a0)
+; LP64E-NEXT:    fsd fa6, 112(a0)
+; LP64E-NEXT:    fsd ft7, 104(a0)
+; LP64E-NEXT:    fsd ft6, 96(a0)
+; LP64E-NEXT:    fsd ft5, 88(a0)
+; LP64E-NEXT:    fsd ft4, 80(a0)
+; LP64E-NEXT:    fsd ft3, 72(a0)
+; LP64E-NEXT:    fsd ft2, 64(a0)
+; LP64E-NEXT:    fsd ft1, 56(a0)
+; LP64E-NEXT:    fsd ft0, 48(a0)
+; LP64E-NEXT:    fsd fa0, 40(a0)
+; LP64E-NEXT:    fsd fa1, 32(a0)
+; LP64E-NEXT:    fsd fa2, 24(a0)
+; LP64E-NEXT:    fsd fa3, 16(a0)
+; LP64E-NEXT:    fsd fa4, 8(a0)
+; LP64E-NEXT:    fsd fa5, 0(a0)
 ; LP64E-NEXT:    ret
 ;
 ; ILP32D-LABEL: callee:
@@ -245,71 +245,71 @@ define void @callee() nounwind {
 ; ILP32D-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill
 ; ILP32D-NEXT:    fsd fs11, 0(sp) # 8-byte Folded Spill
 ; ILP32D-NEXT:    lui a0, %hi(var)
-; ILP32D-NEXT:    fld fa5, %lo(var)(a0)
-; ILP32D-NEXT:    fld fa4, %lo(var+8)(a0)
-; ILP32D-NEXT:    addi a1, a0, %lo(var)
-; ILP32D-NEXT:    fld fa3, 16(a1)
-; ILP32D-NEXT:    fld fa2, 24(a1)
-; ILP32D-NEXT:    fld fa1, 32(a1)
-; ILP32D-NEXT:    fld fa0, 40(a1)
-; ILP32D-NEXT:    fld ft0, 48(a1)
-; ILP32D-NEXT:    fld ft1, 56(a1)
-; ILP32D-NEXT:    fld ft2, 64(a1)
-; ILP32D-NEXT:    fld ft3, 72(a1)
-; ILP32D-NEXT:    fld ft4, 80(a1)
-; ILP32D-NEXT:    fld ft5, 88(a1)
-; ILP32D-NEXT:    fld ft6, 96(a1)
-; ILP32D-NEXT:    fld ft7, 104(a1)
-; ILP32D-NEXT:    fld fa6, 112(a1)
-; ILP32D-NEXT:    fld fa7, 120(a1)
-; ILP32D-NEXT:    fld ft8, 128(a1)
-; ILP32D-NEXT:    fld ft9, 136(a1)
-; ILP32D-NEXT:    fld ft10, 144(a1)
-; ILP32D-NEXT:    fld ft11, 152(a1)
-; ILP32D-NEXT:    fld fs0, 160(a1)
-; ILP32D-NEXT:    fld fs1, 168(a1)
-; ILP32D-NEXT:    fld fs2, 176(a1)
-; ILP32D-NEXT:    fld fs3, 184(a1)
-; ILP32D-NEXT:    fld fs4, 192(a1)
-; ILP32D-NEXT:    fld fs5, 200(a1)
-; ILP32D-NEXT:    fld fs6, 208(a1)
-; ILP32D-NEXT:    fld fs7, 216(a1)
-; ILP32D-NEXT:    fld fs8, 248(a1)
-; ILP32D-NEXT:    fld fs9, 240(a1)
-; ILP32D-NEXT:    fld fs10, 232(a1)
-; ILP32D-NEXT:    fld fs11, 224(a1)
-; ILP32D-NEXT:    fsd fs8, 248(a1)
-; ILP32D-NEXT:    fsd fs9, 240(a1)
-; ILP32D-NEXT:    fsd fs10, 232(a1)
-; ILP32D-NEXT:    fsd fs11, 224(a1)
-; ILP32D-NEXT:    fsd fs7, 216(a1)
-; ILP32D-NEXT:    fsd fs6, 208(a1)
-; ILP32D-NEXT:    fsd fs5, 200(a1)
-; ILP32D-NEXT:    fsd fs4, 192(a1)
-; ILP32D-NEXT:    fsd fs3, 184(a1)
-; ILP32D-NEXT:    fsd fs2, 176(a1)
-; ILP32D-NEXT:    fsd fs1, 168(a1)
-; ILP32D-NEXT:    fsd fs0, 160(a1)
-; ILP32D-NEXT:    fsd ft11, 152(a1)
-; ILP32D-NEXT:    fsd ft10, 144(a1)
-; ILP32D-NEXT:    fsd ft9, 136(a1)
-; ILP32D-NEXT:    fsd ft8, 128(a1)
-; ILP32D-NEXT:    fsd fa7, 120(a1)
-; ILP32D-NEXT:    fsd fa6, 112(a1)
-; ILP32D-NEXT:    fsd ft7, 104(a1)
-; ILP32D-NEXT:    fsd ft6, 96(a1)
-; ILP32D-NEXT:    fsd ft5, 88(a1)
-; ILP32D-NEXT:    fsd ft4, 80(a1)
-; ILP32D-NEXT:    fsd ft3, 72(a1)
-; ILP32D-NEXT:    fsd ft2, 64(a1)
-; ILP32D-NEXT:    fsd ft1, 56(a1)
-; ILP32D-NEXT:    fsd ft0, 48(a1)
-; ILP32D-NEXT:    fsd fa0, 40(a1)
-; ILP32D-NEXT:    fsd fa1, 32(a1)
-; ILP32D-NEXT:    fsd fa2, 24(a1)
-; ILP32D-NEXT:    fsd fa3, 16(a1)
-; ILP32D-NEXT:    fsd fa4, %lo(var+8)(a0)
-; ILP32D-NEXT:    fsd fa5, %lo(var)(a0)
+; ILP32D-NEXT:    addi a0, a0, %lo(var)
+; ILP32D-NEXT:    fld fa5, 0(a0)
+; ILP32D-NEXT:    fld fa4, 8(a0)
+; ILP32D-NEXT:    fld fa3, 16(a0)
+; ILP32D-NEXT:    fld fa2, 24(a0)
+; ILP32D-NEXT:    fld fa1, 32(a0)
+; ILP32D-NEXT:    fld fa0, 40(a0)
+; ILP32D-NEXT:    fld ft0, 48(a0)
+; ILP32D-NEXT:    fld ft1, 56(a0)
+; ILP32D-NEXT:    fld ft2, 64(a0)
+; ILP32D-NEXT:    fld ft3, 72(a0)
+; ILP32D-NEXT:    fld ft4, 80(a0)
+; ILP32D-NEXT:    fld ft5, 88(a0)
+; ILP32D-NEXT:    fld ft6, 96(a0)
+; ILP32D-NEXT:    fld ft7, 104(a0)
+; ILP32D-NEXT:    fld fa6, 112(a0)
+; ILP32D-NEXT:    fld fa7, 120(a0)
+; ILP32D-NEXT:    fld ft8, 128(a0)
+; ILP32D-NEXT:    fld ft9, 136(a0)
+; ILP32D-NEXT:    fld ft10, 144(a0)
+; ILP32D-NEXT:    fld ft11, 152(a0)
+; ILP32D-NEXT:    fld fs0, 160(a0)
+; ILP32D-NEXT:    fld fs1, 168(a0)
+; ILP32D-NEXT:    fld fs2, 176(a0)
+; ILP32D-NEXT:    fld fs3, 184(a0)
+; ILP32D-NEXT:    fld fs4, 192(a0)
+; ILP32D-NEXT:    fld fs5, 200(a0)
+; ILP32D-NEXT:    fld fs6, 208(a0)
+; ILP32D-NEXT:    fld fs7, 216(a0)
+; ILP32D-NEXT:    fld fs8, 248(a0)
+; ILP32D-NEXT:    fld fs9, 240(a0)
+; ILP32D-NEXT:    fld fs10, 232(a0)
+; ILP32D-NEXT:    fld fs11, 224(a0)
+; ILP32D-NEXT:    fsd fs8, 248(a0)
+; ILP32D-NEXT:    fsd fs9, 240(a0)
+; ILP32D-NEXT:    fsd fs10, 232(a0)
+; ILP32D-NEXT:    fsd fs11, 224(a0)
+; ILP32D-NEXT:    fsd fs7, 216(a0)
+; ILP32D-NEXT:    fsd fs6, 208(a0)
+; ILP32D-NEXT:    fsd fs5, 200(a0)
+; ILP32D-NEXT:    fsd fs4, 192(a0)
+; ILP32D-NEXT:    fsd fs3, 184(a0)
+; ILP32D-NEXT:    fsd fs2, 176(a0)
+; ILP32D-NEXT:    fsd fs1, 168(a0)
+; ILP32D-NEXT:    fsd fs0, 160(a0)
+; ILP32D-NEXT:    fsd ft11, 152(a0)
+; ILP32D-NEXT:    fsd ft10, 144(a0)
+; ILP32D-NEXT:    fsd ft9, 136(a0)
+; ILP32D-NEXT:    fsd ft8, 128(a0)
+; ILP32D-NEXT:    fsd fa7, 120(a0)
+; ILP32D-NEXT:    fsd fa6, 112(a0)
+; ILP32D-NEXT:    fsd ft7, 104(a0)
+; ILP32D-NEXT:    fsd ft6, 96(a0)
+; ILP32D-NEXT:    fsd ft5, 88(a0)
+; ILP32D-NEXT:    fsd ft4, 80(a0)
+; ILP32D-NEXT:    fsd ft3, 72(a0)
+; ILP32D-NEXT:    fsd ft2, 64(a0)
+; ILP32D-NEXT:    fsd ft1, 56(a0)
+; ILP32D-NEXT:    fsd ft0, 48(a0)
+; ILP32D-NEXT:    fsd fa0, 40(a0)
+; ILP32D-NEXT:    fsd fa1, 32(a0)
+; ILP32D-NEXT:    fsd fa2, 24(a0)
+; ILP32D-NEXT:    fsd fa3, 16(a0)
+; ILP32D-NEXT:    fsd fa4, 8(a0)
+; ILP32D-NEXT:    fsd fa5, 0(a0)
 ; ILP32D-NEXT:    fld fs0, 88(sp) # 8-byte Folded Reload
 ; ILP32D-NEXT:    fld fs1, 80(sp) # 8-byte Folded Reload
 ; ILP32D-NEXT:    fld fs2, 72(sp) # 8-byte Folded Reload
@@ -341,71 +341,71 @@ define void @callee() nounwind {
 ; LP64D-NEXT:    fsd fs10, 8(sp) # 8-byte Folded Spill
 ; LP64D-NEXT:    fsd fs11, 0(sp) # 8-byte Folded Spill
 ; LP64D-NEXT:    lui a0, %hi(var)
-; LP64D-NEXT:    fld fa5, %lo(var)(a0)
-; LP64D-NEXT:    fld fa4, %lo(var+8)(a0)
-; LP64D-NEXT:    addi a1, a0, %lo(var)
-; LP64D-NEXT:    fld fa3, 16(a1)
-; LP64D-NEXT:    fld fa2, 24(a1)
-; LP64D-NEXT:    fld fa1, 32(a1)
-; LP64D-NEXT:    fld fa0, 40(a1)
-; LP64D-NEXT:    fld ft0, 48(a1)
-; LP64D-NEXT:    fld ft1, 56(a1)
-; LP64D-NEXT:    fld ft2, 64(a1)
-; LP64D-NEXT:    fld ft3, 72(a1)
-; LP64D-NEXT:    fld ft4, 80(a1)
-; LP64D-NEXT:    fld ft5, 88(a1)
-; LP64D-NEXT:    fld ft6, 96(a1)
-; LP64D-NEXT:    fld ft7, 104(a1)
-; LP64D-NEXT:    fld fa6, 112(a1)
-; LP64D-NEXT:    fld fa7, 120(a1)
-; LP64D-NEXT:    fld ft8, 128(a1)
-; LP64D-NEXT:    fld ft9, 136(a1)
-; LP64D-NEXT:    fld ft10, 144(a1)
-; LP64D-NEXT:    fld ft11, 152(a1)
-; LP64D-NEXT:    fld fs0, 160(a1)
-; LP64D-NEXT:    fld fs1, 168(a1)
-; LP64D-NEXT:    fld fs2, 176(a1)
-; LP64D-NEXT:    fld fs3, 184(a1)
-; LP64D-NEXT:    fld fs4, 192(a1)
-; LP64D-NEXT:    fld fs5, 200(a1)
-; LP64D-NEXT:    fld fs6, 208(a1)
-; LP64D-NEXT:    fld fs7, 216(a1)
-; LP64D-NEXT:    fld fs8, 248(a1)
-; LP64D-NEXT:    fld fs9, 240(a1)
-; LP64D-NEXT:    fld fs10, 232(a1)
-; LP64D-NEXT:    fld fs11, 224(a1)
-; LP64D-NEXT:    fsd fs8, 248(a1)
-; LP64D-NEXT:    fsd fs9, 240(a1)
-; LP64D-NEXT:    fsd fs10, 232(a1)
-; LP64D-NEXT:    fsd fs11, 224(a1)
-; LP64D-NEXT:    fsd fs7, 216(a1)
-; LP64D-NEXT:    fsd fs6, 208(a1)
-; LP64D-NEXT:    fsd fs5, 200(a1)
-; LP64D-NEXT:    fsd fs4, 192(a1)
-; LP64D-NEXT:    fsd fs3, 184(a1)
-; LP64D-NEXT:    fsd fs2, 176(a1)
-; LP64D-NEXT:    fsd fs1, 168(a1)
-; LP64D-NEXT:    fsd fs0, 160(a1)
-; LP64D-NEXT:    fsd ft11, 152(a1)
-; LP64D-NEXT:    fsd ft10, 144(a1)
-; LP64D-NEXT:    fsd ft9, 136(a1)
-; LP64D-NEXT:    fsd ft8, 128(a1)
-; LP64D-NEXT:    fsd fa7, 120(a1)
-; LP64D-NEXT:    fsd fa6, 112(a1)
-; LP64D-NEXT:    fsd ft7, 104(a1)
-; LP64D-NEXT:    fsd ft6, 96(a1)
-; LP64D-NEXT:    fsd ft5, 88(a1)
-; LP64D-NEXT:    fsd ft4, 80(a1)
-; LP64D-NEXT:    fsd ft3, 72(a1)
-; LP64D-NEXT:    fsd ft2, 64(a1)
-; LP64D-NEXT:    fsd ft1, 56(a1)
-; LP64D-NEXT:    fsd ft0, 48(a1)
-; LP64D-NEXT:    fsd fa0, 40(a1)
-; LP64D-NEXT:    fsd fa1, 32(a1)
-; LP64D-NEXT:    fsd fa2, 24(a1)
-; LP64D-NEXT:    fsd fa3, 16(a1)
-; LP64D-NEXT:    fsd fa4, %lo(var+8)(a0)
-; LP64D-NEXT:    fsd fa5, %lo(var)(a0)
+; LP64D-NEXT:    addi a0, a0, %lo(var)
+; LP64D-NEXT:    fld fa5, 0(a0)
+; LP64D-NEXT:    fld fa4, 8(a0)
+; LP64D-NEXT:    fld fa3, 16(a0)
+; LP64D-NEXT:    fld fa2, 24(a0)
+; LP64D-NEXT:    fld fa1, 32(a0)
+; LP64D-NEXT:    fld fa0, 40(a0)
+; LP64D-NEXT:    fld ft0, 48(a0)
+; LP64D-NEXT:    fld ft1, 56(a0)
+; LP64D-NEXT:    fld ft2, 64(a0)
+; LP64D-NEXT:    fld ft3, 72(a0)
+; LP64D-NEXT:    fld ft4, 80(a0)
+; LP64D-NEXT:    fld ft5, 88(a0)
+; LP64D-NEXT:    fld ft6, 96(a0)
+; LP64D-NEXT:    fld ft7, 104(a0)
+; LP64D-NEXT:    fld fa6, 112(a0)
+; LP64D-NEXT:    fld fa7, 120(a0)
+; LP64D-NEXT:    fld ft8, 128(a0)
+; LP64D-NEXT:    fld ft9, 136(a0)
+; LP64D-NEXT:    fld ft10, 144(a0)
+; LP64D-NEXT:    fld ft11, 152(a0)
+; LP64D-NEXT:    fld fs0, 160(a0)
+; LP64D-NEXT:    fld fs1, 168(a0)
+; LP64D-NEXT:    fld fs2, 176(a0)
+; LP64D-NEXT:    fld fs3, 184(a0)
+; LP64D-NEXT:    fld fs4, 192(a0)
+; LP64D-NEXT:    fld fs5, 200(a0)
+; LP64D-NEXT:    fld fs6, 208(a0)
+; LP64D-NEXT:    fld fs7, 216(a0)
+; LP64D-NEXT:    fld fs8, 248(a0)
+; LP64D-NEXT:    fld fs9, 240(a0)
+; LP64D-NEXT:    fld fs10, 232(a0)
+; LP64D-NEXT:    fld fs11, 224(a0)
+; LP64D-NEXT:    fsd fs8, 248(a0)
+; LP64D-NEXT:    fsd fs9, 240(a0)
+; LP64D-NEXT:    fsd fs10, 232(a0)
+; LP64D-NEXT:    fsd fs11, 224(a0)
+; LP64D-NEXT:    fsd fs7, 216(a0)
+; LP64D-NEXT:    fsd fs6, 208(a0)
+; LP64D-NEXT:    fsd fs5, 200(a0)
+; LP64D-NEXT:    fsd fs4, 192(a0)
+; LP64D-NEXT:    fsd fs3, 184(a0)
+; LP64D-NEXT:    fsd fs2, 176(a0)
+; LP64D-NEXT:    fsd fs1, 168(a0)
+; LP64D-NEXT:    fsd fs0, 160(a0)
+; LP64D-NEXT:    fsd ft11, 152(a0)
+; LP64D-NEXT:    fsd ft10, 144(a0)
+; LP64D-NEXT:    fsd ft9, 136(a0)
+; LP64D-NEXT:    fsd ft8, 128(a0)
+; LP64D-NEXT:    fsd fa7, 120(a0)
+; LP64D-NEXT:    fsd fa6, 112(a0)
+; LP64D-NEXT:    fsd ft7, 104(a0)
+; LP64D-NEXT:    fsd ft6, 96(a0)
+; LP64D-NEXT:    fsd ft5, 88(a0)
+; LP64D-NEXT:    fsd ft4, 80(a0)
+; LP64D-NEXT:    fsd ft3, 72(a0)
+; LP64D-NEXT:    fsd ft2, 64(a0)
+; LP64D-NEXT:    fsd ft1, 56(a0)
+; LP64D-NEXT:    fsd ft0, 48(a0)
+; LP64D-NEXT:    fsd fa0, 40(a0)
+; LP64D-NEXT:    fsd fa1, 32(a0)
+; LP64D-NEXT:    fsd fa2, 24(a0)
+; LP64D-NEXT:    fsd fa3, 16(a0)
+; LP64D-NEXT:    fsd fa4, 8(a0)
+; LP64D-NEXT:    fsd fa5, 0(a0)
 ; LP64D-NEXT:    fld fs0, 88(sp) # 8-byte Folded Reload
 ; LP64D-NEXT:    fld fs1, 80(sp) # 8-byte Folded Reload
 ; LP64D-NEXT:    fld fs2, 72(sp) # 8-byte Folded Reload
@@ -438,428 +438,422 @@ define void @caller() nounwind {
 ; ILP32-NEXT:    addi sp, sp, -272
 ; ILP32-NEXT:    sw ra, 268(sp) # 4-byte Folded Spill
 ; ILP32-NEXT:    sw s0, 264(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    sw s1, 260(sp) # 4-byte Folded Spill
-; ILP32-NEXT:    lui s0, %hi(var)
-; ILP32-NEXT:    fld fa5, %lo(var)(s0)
+; ILP32-NEXT:    lui a0, %hi(var)
+; ILP32-NEXT:    addi s0, a0, %lo(var)
+; ILP32-NEXT:    fld fa5, 0(s0)
+; ILP32-NEXT:    fsd fa5, 256(sp) # 8-byte Folded Spill
+; ILP32-NEXT:    fld fa5, 8(s0)
 ; ILP32-NEXT:    fsd fa5, 248(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, %lo(var+8)(s0)
+; ILP32-NEXT:    fld fa5, 16(s0)
 ; ILP32-NEXT:    fsd fa5, 240(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    addi s1, s0, %lo(var)
-; ILP32-NEXT:    fld fa5, 16(s1)
+; ILP32-NEXT:    fld fa5, 24(s0)
 ; ILP32-NEXT:    fsd fa5, 232(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 24(s1)
+; ILP32-NEXT:    fld fa5, 32(s0)
 ; ILP32-NEXT:    fsd fa5, 224(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 32(s1)
+; ILP32-NEXT:    fld fa5, 40(s0)
 ; ILP32-NEXT:    fsd fa5, 216(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 40(s1)
+; ILP32-NEXT:    fld fa5, 48(s0)
 ; ILP32-NEXT:    fsd fa5, 208(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 48(s1)
+; ILP32-NEXT:    fld fa5, 56(s0)
 ; ILP32-NEXT:    fsd fa5, 200(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 56(s1)
+; ILP32-NEXT:    fld fa5, 64(s0)
 ; ILP32-NEXT:    fsd fa5, 192(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 64(s1)
+; ILP32-NEXT:    fld fa5, 72(s0)
 ; ILP32-NEXT:    fsd fa5, 184(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 72(s1)
+; ILP32-NEXT:    fld fa5, 80(s0)
 ; ILP32-NEXT:    fsd fa5, 176(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 80(s1)
+; ILP32-NEXT:    fld fa5, 88(s0)
 ; ILP32-NEXT:    fsd fa5, 168(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 88(s1)
+; ILP32-NEXT:    fld fa5, 96(s0)
 ; ILP32-NEXT:    fsd fa5, 160(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 96(s1)
+; ILP32-NEXT:    fld fa5, 104(s0)
 ; ILP32-NEXT:    fsd fa5, 152(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 104(s1)
+; ILP32-NEXT:    fld fa5, 112(s0)
 ; ILP32-NEXT:    fsd fa5, 144(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 112(s1)
+; ILP32-NEXT:    fld fa5, 120(s0)
 ; ILP32-NEXT:    fsd fa5, 136(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 120(s1)
+; ILP32-NEXT:    fld fa5, 128(s0)
 ; ILP32-NEXT:    fsd fa5, 128(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 128(s1)
+; ILP32-NEXT:    fld fa5, 136(s0)
 ; ILP32-NEXT:    fsd fa5, 120(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 136(s1)
+; ILP32-NEXT:    fld fa5, 144(s0)
 ; ILP32-NEXT:    fsd fa5, 112(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 144(s1)
+; ILP32-NEXT:    fld fa5, 152(s0)
 ; ILP32-NEXT:    fsd fa5, 104(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 152(s1)
+; ILP32-NEXT:    fld fa5, 160(s0)
 ; ILP32-NEXT:    fsd fa5, 96(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 160(s1)
+; ILP32-NEXT:    fld fa5, 168(s0)
 ; ILP32-NEXT:    fsd fa5, 88(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 168(s1)
+; ILP32-NEXT:    fld fa5, 176(s0)
 ; ILP32-NEXT:    fsd fa5, 80(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 176(s1)
+; ILP32-NEXT:    fld fa5, 184(s0)
 ; ILP32-NEXT:    fsd fa5, 72(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 184(s1)
+; ILP32-NEXT:    fld fa5, 192(s0)
 ; ILP32-NEXT:    fsd fa5, 64(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 192(s1)
+; ILP32-NEXT:    fld fa5, 200(s0)
 ; ILP32-NEXT:    fsd fa5, 56(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 200(s1)
+; ILP32-NEXT:    fld fa5, 208(s0)
 ; ILP32-NEXT:    fsd fa5, 48(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 208(s1)
+; ILP32-NEXT:    fld fa5, 216(s0)
 ; ILP32-NEXT:    fsd fa5, 40(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 216(s1)
+; ILP32-NEXT:    fld fa5, 224(s0)
 ; ILP32-NEXT:    fsd fa5, 32(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 224(s1)
+; ILP32-NEXT:    fld fa5, 232(s0)
 ; ILP32-NEXT:    fsd fa5, 24(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 232(s1)
+; ILP32-NEXT:    fld fa5, 240(s0)
 ; ILP32-NEXT:    fsd fa5, 16(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 240(s1)
+; ILP32-NEXT:    fld fa5, 248(s0)
 ; ILP32-NEXT:    fsd fa5, 8(sp) # 8-byte Folded Spill
-; ILP32-NEXT:    fld fa5, 248(s1)
-; ILP32-NEXT:    fsd fa5, 0(sp) # 8-byte Folded Spill
 ; ILP32-NEXT:    call callee
-; ILP32-NEXT:    fld fa5, 0(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 248(s1)
 ; ILP32-NEXT:    fld fa5, 8(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 240(s1)
+; ILP32-NEXT:    fsd fa5, 248(s0)
 ; ILP32-NEXT:    fld fa5, 16(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 232(s1)
+; ILP32-NEXT:    fsd fa5, 240(s0)
 ; ILP32-NEXT:    fld fa5, 24(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 224(s1)
+; ILP32-NEXT:    fsd fa5, 232(s0)
 ; ILP32-NEXT:    fld fa5, 32(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 216(s1)
+; ILP32-NEXT:    fsd fa5, 224(s0)
 ; ILP32-NEXT:    fld fa5, 40(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 208(s1)
+; ILP32-NEXT:    fsd fa5, 216(s0)
 ; ILP32-NEXT:    fld fa5, 48(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 200(s1)
+; ILP32-NEXT:    fsd fa5, 208(s0)
 ; ILP32-NEXT:    fld fa5, 56(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 192(s1)
+; ILP32-NEXT:    fsd fa5, 200(s0)
 ; ILP32-NEXT:    fld fa5, 64(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 184(s1)
+; ILP32-NEXT:    fsd fa5, 192(s0)
 ; ILP32-NEXT:    fld fa5, 72(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 176(s1)
+; ILP32-NEXT:    fsd fa5, 184(s0)
 ; ILP32-NEXT:    fld fa5, 80(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 168(s1)
+; ILP32-NEXT:    fsd fa5, 176(s0)
 ; ILP32-NEXT:    fld fa5, 88(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 160(s1)
+; ILP32-NEXT:    fsd fa5, 168(s0)
 ; ILP32-NEXT:    fld fa5, 96(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 152(s1)
+; ILP32-NEXT:    fsd fa5, 160(s0)
 ; ILP32-NEXT:    fld fa5, 104(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 144(s1)
+; ILP32-NEXT:    fsd fa5, 152(s0)
 ; ILP32-NEXT:    fld fa5, 112(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 136(s1)
+; ILP32-NEXT:    fsd fa5, 144(s0)
 ; ILP32-NEXT:    fld fa5, 120(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 128(s1)
+; ILP32-NEXT:    fsd fa5, 136(s0)
 ; ILP32-NEXT:    fld fa5, 128(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 120(s1)
+; ILP32-NEXT:    fsd fa5, 128(s0)
 ; ILP32-NEXT:    fld fa5, 136(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 112(s1)
+; ILP32-NEXT:    fsd fa5, 120(s0)
 ; ILP32-NEXT:    fld fa5, 144(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 104(s1)
+; ILP32-NEXT:    fsd fa5, 112(s0)
 ; ILP32-NEXT:    fld fa5, 152(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 96(s1)
+; ILP32-NEXT:    fsd fa5, 104(s0)
 ; ILP32-NEXT:    fld fa5, 160(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 88(s1)
+; ILP32-NEXT:    fsd fa5, 96(s0)
 ; ILP32-NEXT:    fld fa5, 168(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 80(s1)
+; ILP32-NEXT:    fsd fa5, 88(s0)
 ; ILP32-NEXT:    fld fa5, 176(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 72(s1)
+; ILP32-NEXT:    fsd fa5, 80(s0)
 ; ILP32-NEXT:    fld fa5, 184(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 64(s1)
+; ILP32-NEXT:    fsd fa5, 72(s0)
 ; ILP32-NEXT:    fld fa5, 192(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 56(s1)
+; ILP32-NEXT:    fsd fa5, 64(s0)
 ; ILP32-NEXT:    fld fa5, 200(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 48(s1)
+; ILP32-NEXT:    fsd fa5, 56(s0)
 ; ILP32-NEXT:    fld fa5, 208(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 40(s1)
+; ILP32-NEXT:    fsd fa5, 48(s0)
 ; ILP32-NEXT:    fld fa5, 216(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 32(s1)
+; ILP32-NEXT:    fsd fa5, 40(s0)
 ; ILP32-NEXT:    fld fa5, 224(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 24(s1)
+; ILP32-NEXT:    fsd fa5, 32(s0)
 ; ILP32-NEXT:    fld fa5, 232(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, 16(s1)
+; ILP32-NEXT:    fsd fa5, 24(s0)
 ; ILP32-NEXT:    fld fa5, 240(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, %lo(var+8)(s0)
+; ILP32-NEXT:    fsd fa5, 16(s0)
 ; ILP32-NEXT:    fld fa5, 248(sp) # 8-byte Folded Reload
-; ILP32-NEXT:    fsd fa5, %lo(var)(s0)
+; ILP32-NEXT:    fsd fa5, 8(s0)
+; ILP32-NEXT:    fld fa5, 256(sp) # 8-byte Folded Reload
+; ILP32-NEXT:    fsd fa5, 0(s0)
 ; ILP32-NEXT:    lw ra, 268(sp) # 4-byte Folded Reload
 ; ILP32-NEXT:    lw s0, 264(sp) # 4-byte Folded Reload
-; ILP32-NEXT:    lw s1, 260(sp) # 4-byte Folded Reload
 ; ILP32-NEXT:    addi sp, sp, 272
 ; ILP32-NEXT:    ret
 ;
 ; LP64-LABEL: caller:
 ; LP64:       # %bb.0:
-; LP64-NEXT:    addi sp, sp, -288
-; LP64-NEXT:    sd ra, 280(sp) # 8-byte Folded Spill
-; LP64-NEXT:    sd s0, 272(sp) # 8-byte Folded Spill
-; LP64-NEXT:    sd s1, 264(sp) # 8-byte Folded Spill
-; LP64-NEXT:    lui s0, %hi(var)
-; LP64-NEXT:    fld fa5, %lo(var)(s0)
-; LP64-NEXT:    fsd fa5, 256(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, %lo(var+8)(s0)
+; LP64-NEXT:    addi sp, sp, -272
+; LP64-NEXT:    sd ra, 264(sp) # 8-byte Folded Spill
+; LP64-NEXT:    sd s0, 256(sp) # 8-byte Folded Spill
+; LP64-NEXT:    lui a0, %hi(var)
+; LP64-NEXT:    addi s0, a0, %lo(var)
+; LP64-NEXT:    fld fa5, 0(s0)
 ; LP64-NEXT:    fsd fa5, 248(sp) # 8-byte Folded Spill
-; LP64-NEXT:    addi s1, s0, %lo(var)
-; LP64-NEXT:    fld fa5, 16(s1)
+; LP64-NEXT:    fld fa5, 8(s0)
 ; LP64-NEXT:    fsd fa5, 240(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 24(s1)
+; LP64-NEXT:    fld fa5, 16(s0)
 ; LP64-NEXT:    fsd fa5, 232(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 32(s1)
+; LP64-NEXT:    fld fa5, 24(s0)
 ; LP64-NEXT:    fsd fa5, 224(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 40(s1)
+; LP64-NEXT:    fld fa5, 32(s0)
 ; LP64-NEXT:    fsd fa5, 216(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 48(s1)
+; LP64-NEXT:    fld fa5, 40(s0)
 ; LP64-NEXT:    fsd fa5, 208(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 56(s1)
+; LP64-NEXT:    fld fa5, 48(s0)
 ; LP64-NEXT:    fsd fa5, 200(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 64(s1)
+; LP64-NEXT:    fld fa5, 56(s0)
 ; LP64-NEXT:    fsd fa5, 192(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 72(s1)
+; LP64-NEXT:    fld fa5, 64(s0)
 ; LP64-NEXT:    fsd fa5, 184(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 80(s1)
+; LP64-NEXT:    fld fa5, 72(s0)
 ; LP64-NEXT:    fsd fa5, 176(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 88(s1)
+; LP64-NEXT:    fld fa5, 80(s0)
 ; LP64-NEXT:    fsd fa5, 168(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 96(s1)
+; LP64-NEXT:    fld fa5, 88(s0)
 ; LP64-NEXT:    fsd fa5, 160(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 104(s1)
+; LP64-NEXT:    fld fa5, 96(s0)
 ; LP64-NEXT:    fsd fa5, 152(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 112(s1)
+; LP64-NEXT:    fld fa5, 104(s0)
 ; LP64-NEXT:    fsd fa5, 144(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 120(s1)
+; LP64-NEXT:    fld fa5, 112(s0)
 ; LP64-NEXT:    fsd fa5, 136(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 128(s1)
+; LP64-NEXT:    fld fa5, 120(s0)
 ; LP64-NEXT:    fsd fa5, 128(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 136(s1)
+; LP64-NEXT:    fld fa5, 128(s0)
 ; LP64-NEXT:    fsd fa5, 120(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 144(s1)
+; LP64-NEXT:    fld fa5, 136(s0)
 ; LP64-NEXT:    fsd fa5, 112(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 152(s1)
+; LP64-NEXT:    fld fa5, 144(s0)
 ; LP64-NEXT:    fsd fa5, 104(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 160(s1)
+; LP64-NEXT:    fld fa5, 152(s0)
 ; LP64-NEXT:    fsd fa5, 96(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 168(s1)
+; LP64-NEXT:    fld fa5, 160(s0)
 ; LP64-NEXT:    fsd fa5, 88(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 176(s1)
+; LP64-NEXT:    fld fa5, 168(s0)
 ; LP64-NEXT:    fsd fa5, 80(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 184(s1)
+; LP64-NEXT:    fld fa5, 176(s0)
 ; LP64-NEXT:    fsd fa5, 72(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 192(s1)
+; LP64-NEXT:    fld fa5, 184(s0)
 ; LP64-NEXT:    fsd fa5, 64(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 200(s1)
+; LP64-NEXT:    fld fa5, 192(s0)
 ; LP64-NEXT:    fsd fa5, 56(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 208(s1)
+; LP64-NEXT:    fld fa5, 200(s0)
 ; LP64-NEXT:    fsd fa5, 48(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 216(s1)
+; LP64-NEXT:    fld fa5, 208(s0)
 ; LP64-NEXT:    fsd fa5, 40(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 224(s1)
+; LP64-NEXT:    fld fa5, 216(s0)
 ; LP64-NEXT:    fsd fa5, 32(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 232(s1)
+; LP64-NEXT:    fld fa5, 224(s0)
 ; LP64-NEXT:    fsd fa5, 24(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 240(s1)
+; LP64-NEXT:    fld fa5, 232(s0)
 ; LP64-NEXT:    fsd fa5, 16(sp) # 8-byte Folded Spill
-; LP64-NEXT:    fld fa5, 248(s1)
+; LP64-NEXT:    fld fa5, 240(s0)
 ; LP64-NEXT:    fsd fa5, 8(sp) # 8-byte Folded Spill
+; LP64-NEXT:    fld fa5, 248(s0)
+; LP64-NEXT:    fsd fa5, 0(sp) # 8-byte Folded Spill
 ; LP64-NEXT:    call callee
+; LP64-NEXT:    fld fa5, 0(sp) # 8-byte Folded Reload
+; LP64-NEXT:    fsd fa5, 248(s0)
 ; LP64-NEXT:    fld fa5, 8(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 248(s1)
+; LP64-NEXT:    fsd fa5, 240(s0)
 ; LP64-NEXT:    fld fa5, 16(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 240(s1)
+; LP64-NEXT:    fsd fa5, 232(s0)
 ; LP64-NEXT:    fld fa5, 24(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 232(s1)
+; LP64-NEXT:    fsd fa5, 224(s0)
 ; LP64-NEXT:    fld fa5, 32(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 224(s1)
+; LP64-NEXT:    fsd fa5, 216(s0)
 ; LP64-NEXT:    fld fa5, 40(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 216(s1)
+; LP64-NEXT:    fsd fa5, 208(s0)
 ; LP64-NEXT:    fld fa5, 48(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 208(s1)
+; LP64-NEXT:    fsd fa5, 200(s0)
 ; LP64-NEXT:    fld fa5, 56(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 200(s1)
+; LP64-NEXT:    fsd fa5, 192(s0)
 ; LP64-NEXT:    fld fa5, 64(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 192(s1)
+; LP64-NEXT:    fsd fa5, 184(s0)
 ; LP64-NEXT:    fld fa5, 72(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 184(s1)
+; LP64-NEXT:    fsd fa5, 176(s0)
 ; LP64-NEXT:    fld fa5, 80(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 176(s1)
+; LP64-NEXT:    fsd fa5, 168(s0)
 ; LP64-NEXT:    fld fa5, 88(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 168(s1)
+; LP64-NEXT:    fsd fa5, 160(s0)
 ; LP64-NEXT:    fld fa5, 96(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 160(s1)
+; LP64-NEXT:    fsd fa5, 152(s0)
 ; LP64-NEXT:    fld fa5, 104(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 152(s1)
+; LP64-NEXT:    fsd fa5, 144(s0)
 ; LP64-NEXT:    fld fa5, 112(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 144(s1)
+; LP64-NEXT:    fsd fa5, 136(s0)
 ; LP64-NEXT:    fld fa5, 120(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 136(s1)
+; LP64-NEXT:    fsd fa5, 128(s0)
 ; LP64-NEXT:    fld fa5, 128(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 128(s1)
+; LP64-NEXT:    fsd fa5, 120(s0)
 ; LP64-NEXT:    fld fa5, 136(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 120(s1)
+; LP64-NEXT:    fsd fa5, 112(s0)
 ; LP64-NEXT:    fld fa5, 144(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 112(s1)
+; LP64-NEXT:    fsd fa5, 104(s0)
 ; LP64-NEXT:    fld fa5, 152(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 104(s1)
+; LP64-NEXT:    fsd fa5, 96(s0)
 ; LP64-NEXT:    fld fa5, 160(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 96(s1)
+; LP64-NEXT:    fsd fa5, 88(s0)
 ; LP64-NEXT:    fld fa5, 168(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 88(s1)
+; LP64-NEXT:    fsd fa5, 80(s0)
 ; LP64-NEXT:    fld fa5, 176(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 80(s1)
+; LP64-NEXT:    fsd fa5, 72(s0)
 ; LP64-NEXT:    fld fa5, 184(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 72(s1)
+; LP64-NEXT:    fsd fa5, 64(s0)
 ; LP64-NEXT:    fld fa5, 192(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 64(s1)
+; LP64-NEXT:    fsd fa5, 56(s0)
 ; LP64-NEXT:    fld fa5, 200(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 56(s1)
+; LP64-NEXT:    fsd fa5, 48(s0)
 ; LP64-NEXT:    fld fa5, 208(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 48(s1)
+; LP64-NEXT:    fsd fa5, 40(s0)
 ; LP64-NEXT:    fld fa5, 216(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 40(s1)
+; LP64-NEXT:    fsd fa5, 32(s0)
 ; LP64-NEXT:    fld fa5, 224(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 32(s1)
+; LP64-NEXT:    fsd fa5, 24(s0)
 ; LP64-NEXT:    fld fa5, 232(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 24(s1)
+; LP64-NEXT:    fsd fa5, 16(s0)
 ; LP64-NEXT:    fld fa5, 240(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, 16(s1)
+; LP64-NEXT:    fsd fa5, 8(s0)
 ; LP64-NEXT:    fld fa5, 248(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, %lo(var+8)(s0)
-; LP64-NEXT:    fld fa5, 256(sp) # 8-byte Folded Reload
-; LP64-NEXT:    fsd fa5, %lo(var)(s0)
-; LP64-NEXT:    ld ra, 280(sp) # 8-byte Folded Reload
-; LP64-NEXT:    ld s0, 272(sp) # 8-byte Folded Reload
-; LP64-NEXT:    ld s1, 264(sp) # 8-byte Folded Reload
-; LP64-NEXT:    addi sp, sp, 288
+; LP64-NEXT:    fsd fa5, 0(s0)
+; LP64-NEXT:    ld ra, 264(sp) # 8-byte Folded Reload
+; LP64-NEXT:    ld s0, 256(sp) # 8-byte Folded Reload
+; LP64-NEXT:    addi sp, sp, 272
 ; LP64-NEXT:    ret
 ;
 ; LP64E-LABEL: caller:
 ; LP64E:       # %bb.0:
-; LP64E-NEXT:    addi sp, sp, -280
-; LP64E-NEXT:    sd ra, 272(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    sd s0, 264(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    sd s1, 256(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    lui s0, %hi(var)
-; LP64E-NEXT:    fld fa5, %lo(var)(s0)
+; LP64E-NEXT:    addi sp, sp, -272
+; LP64E-NEXT:    sd ra, 264(sp) # 8-byte Folded Spill
+; LP64E-NEXT:    sd s0, 256(sp) # 8-byte Folded Spill
+; LP64E-NEXT:    lui a0, %hi(var)
+; LP64E-NEXT:    addi s0, a0, %lo(var)
+; LP64E-NEXT:    fld fa5, 0(s0)
 ; LP64E-NEXT:    fsd fa5, 248(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, %lo(var+8)(s0)
+; LP64E-NEXT:    fld fa5, 8(s0)
 ; LP64E-NEXT:    fsd fa5, 240(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    addi s1, s0, %lo(var)
-; LP64E-NEXT:    fld fa5, 16(s1)
+; LP64E-NEXT:    fld fa5, 16(s0)
 ; LP64E-NEXT:    fsd fa5, 232(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 24(s1)
+; LP64E-NEXT:    fld fa5, 24(s0)
 ; LP64E-NEXT:    fsd fa5, 224(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 32(s1)
+; LP64E-NEXT:    fld fa5, 32(s0)
 ; LP64E-NEXT:    fsd fa5, 216(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 40(s1)
+; LP64E-NEXT:    fld fa5, 40(s0)
 ; LP64E-NEXT:    fsd fa5, 208(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 48(s1)
+; LP64E-NEXT:    fld fa5, 48(s0)
 ; LP64E-NEXT:    fsd fa5, 200(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 56(s1)
+; LP64E-NEXT:    fld fa5, 56(s0)
 ; LP64E-NEXT:    fsd fa5, 192(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 64(s1)
+; LP64E-NEXT:    fld fa5, 64(s0)
 ; LP64E-NEXT:    fsd fa5, 184(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 72(s1)
+; LP64E-NEXT:    fld fa5, 72(s0)
 ; LP64E-NEXT:    fsd fa5, 176(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 80(s1)
+; LP64E-NEXT:    fld fa5, 80(s0)
 ; LP64E-NEXT:    fsd fa5, 168(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 88(s1)
+; LP64E-NEXT:    fld fa5, 88(s0)
 ; LP64E-NEXT:    fsd fa5, 160(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 96(s1)
+; LP64E-NEXT:    fld fa5, 96(s0)
 ; LP64E-NEXT:    fsd fa5, 152(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 104(s1)
+; LP64E-NEXT:    fld fa5, 104(s0)
 ; LP64E-NEXT:    fsd fa5, 144(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 112(s1)
+; LP64E-NEXT:    fld fa5, 112(s0)
 ; LP64E-NEXT:    fsd fa5, 136(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 120(s1)
+; LP64E-NEXT:    fld fa5, 120(s0)
 ; LP64E-NEXT:    fsd fa5, 128(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 128(s1)
+; LP64E-NEXT:    fld fa5, 128(s0)
 ; LP64E-NEXT:    fsd fa5, 120(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 136(s1)
+; LP64E-NEXT:    fld fa5, 136(s0)
 ; LP64E-NEXT:    fsd fa5, 112(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 144(s1)
+; LP64E-NEXT:    fld fa5, 144(s0)
 ; LP64E-NEXT:    fsd fa5, 104(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 152(s1)
+; LP64E-NEXT:    fld fa5, 152(s0)
 ; LP64E-NEXT:    fsd fa5, 96(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 160(s1)
+; LP64E-NEXT:    fld fa5, 160(s0)
 ; LP64E-NEXT:    fsd fa5, 88(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 168(s1)
+; LP64E-NEXT:    fld fa5, 168(s0)
 ; LP64E-NEXT:    fsd fa5, 80(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 176(s1)
+; LP64E-NEXT:    fld fa5, 176(s0)
 ; LP64E-NEXT:    fsd fa5, 72(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 184(s1)
+; LP64E-NEXT:    fld fa5, 184(s0)
 ; LP64E-NEXT:    fsd fa5, 64(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 192(s1)
+; LP64E-NEXT:    fld fa5, 192(s0)
 ; LP64E-NEXT:    fsd fa5, 56(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 200(s1)
+; LP64E-NEXT:    fld fa5, 200(s0)
 ; LP64E-NEXT:    fsd fa5, 48(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 208(s1)
+; LP64E-NEXT:    fld fa5, 208(s0)
 ; LP64E-NEXT:    fsd fa5, 40(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 216(s1)
+; LP64E-NEXT:    fld fa5, 216(s0)
 ; LP64E-NEXT:    fsd fa5, 32(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 224(s1)
+; LP64E-NEXT:    fld fa5, 224(s0)
 ; LP64E-NEXT:    fsd fa5, 24(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 232(s1)
+; LP64E-NEXT:    fld fa5, 232(s0)
 ; LP64E-NEXT:    fsd fa5, 16(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 240(s1)
+; LP64E-NEXT:    fld fa5, 240(s0)
 ; LP64E-NEXT:    fsd fa5, 8(sp) # 8-byte Folded Spill
-; LP64E-NEXT:    fld fa5, 248(s1)
+; LP64E-NEXT:    fld fa5, 248(s0)
 ; LP64E-NEXT:    fsd fa5, 0(sp) # 8-byte Folded Spill
 ; LP64E-NEXT:    call callee
 ; LP64E-NEXT:    fld fa5, 0(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 248(s1)
+; LP64E-NEXT:    fsd fa5, 248(s0)
 ; LP64E-NEXT:    fld fa5, 8(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 240(s1)
+; LP64E-NEXT:    fsd fa5, 240(s0)
 ; LP64E-NEXT:    fld fa5, 16(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 232(s1)
+; LP64E-NEXT:    fsd fa5, 232(s0)
 ; LP64E-NEXT:    fld fa5, 24(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 224(s1)
+; LP64E-NEXT:    fsd fa5, 224(s0)
 ; LP64E-NEXT:    fld fa5, 32(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 216(s1)
+; LP64E-NEXT:    fsd fa5, 216(s0)
 ; LP64E-NEXT:    fld fa5, 40(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 208(s1)
+; LP64E-NEXT:    fsd fa5, 208(s0)
 ; LP64E-NEXT:    fld fa5, 48(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 200(s1)
+; LP64E-NEXT:    fsd fa5, 200(s0)
 ; LP64E-NEXT:    fld fa5, 56(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 192(s1)
+; LP64E-NEXT:    fsd fa5, 192(s0)
 ; LP64E-NEXT:    fld fa5, 64(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 184(s1)
+; LP64E-NEXT:    fsd fa5, 184(s0)
 ; LP64E-NEXT:    fld fa5, 72(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 176(s1)
+; LP64E-NEXT:    fsd fa5, 176(s0)
 ; LP64E-NEXT:    fld fa5, 80(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 168(s1)
+; LP64E-NEXT:    fsd fa5, 168(s0)
 ; LP64E-NEXT:    fld fa5, 88(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 160(s1)
+; LP64E-NEXT:    fsd fa5, 160(s0)
 ; LP64E-NEXT:    fld fa5, 96(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 152(s1)
+; LP64E-NEXT:    fsd fa5, 152(s0)
 ; LP64E-NEXT:    fld fa5, 104(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 144(s1)
+; LP64E-NEXT:    fsd fa5, 144(s0)
 ; LP64E-NEXT:    fld fa5, 112(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 136(s1)
+; LP64E-NEXT:    fsd fa5, 136(s0)
 ; LP64E-NEXT:    fld fa5, 120(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 128(s1)
+; LP64E-NEXT:    fsd fa5, 128(s0)
 ; LP64E-NEXT:    fld fa5, 128(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 120(s1)
+; LP64E-NEXT:    fsd fa5, 120(s0)
 ; LP64E-NEXT:    fld fa5, 136(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 112(s1)
+; LP64E-NEXT:    fsd fa5, 112(s0)
 ; LP64E-NEXT:    fld fa5, 144(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 104(s1)
+; LP64E-NEXT:    fsd fa5, 104(s0)
 ; LP64E-NEXT:    fld fa5, 152(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 96(s1)
+; LP64E-NEXT:    fsd fa5, 96(s0)
 ; LP64E-NEXT:    fld fa5, 160(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 88(s1)
+; LP64E-NEXT:    fsd fa5, 88(s0)
 ; LP64E-NEXT:    fld fa5, 168(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 80(s1)
+; LP64E-NEXT:    fsd fa5, 80(s0)
 ; LP64E-NEXT:    fld fa5, 176(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 72(s1)
+; LP64E-NEXT:    fsd fa5, 72(s0)
 ; LP64E-NEXT:    fld fa5, 184(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 64(s1)
+; LP64E-NEXT:    fsd fa5, 64(s0)
 ; LP64E-NEXT:    fld fa5, 192(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 56(s1)
+; LP64E-NEXT:    fsd fa5, 56(s0)
 ; LP64E-NEXT:    fld fa5, 200(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 48(s1)
+; LP64E-NEXT:    fsd fa5, 48(s0)
 ; LP64E-NEXT:    fld fa5, 208(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 40(s1)
+; LP64E-NEXT:    fsd fa5, 40(s0)
 ; LP64E-NEXT:    fld fa5, 216(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 32(s1)
+; LP64E-NEXT:    fsd fa5, 32(s0)
 ; LP64E-NEXT:    fld fa5, 224(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 24(s1)
+; LP64E-NEXT:    fsd fa5, 24(s0)
 ; LP64E-NEXT:    fld fa5, 232(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, 16(s1)
+; LP64E-NEXT:    fsd fa5, 16(s0)
 ; LP64E-NEXT:    fld fa5, 240(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, %lo(var+8)(s0)
+; LP64E-NEXT:    fsd fa5, 8(s0)
 ; LP64E-NEXT:    fld fa5, 248(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    fsd fa5, %lo(var)(s0)
-; LP64E-NEXT:    ld ra, 272(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    ld s0, 264(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    ld s1, 256(sp) # 8-byte Folded Reload
-; LP64E-NEXT:    addi sp, sp, 280
+; LP64E-NEXT:    fsd fa5, 0(s0)
+; LP64E-NEXT:    ld ra, 264(sp) # 8-byte Folded Reload
+; LP64E-NEXT:    ld s0, 256(sp) # 8-byte Folded Reload
+; LP64E-NEXT:    addi sp, sp, 272
 ; LP64E-NEXT:    ret
 ;
 ; ILP32D-LABEL: caller:
@@ -867,285 +861,281 @@ define void @caller() nounwind {
 ; ILP32D-NEXT:    addi sp, sp, -272
 ; ILP32D-NEXT:    sw ra, 268(sp) # 4-byte Folded Spill
 ; ILP32D-NEXT:    sw s0, 264(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    sw s1, 260(sp) # 4-byte Folded Spill
-; ILP32D-NEXT:    fsd fs0, 248(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs1, 240(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs2, 232(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs3, 224(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs4, 216(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs5, 208(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs6, 200(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs7, 192(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs8, 184(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs9, 176(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs10, 168(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fsd fs11, 160(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    lui s0, %hi(var)
-; ILP32D-NEXT:    fld fa5, %lo(var)(s0)
+; ILP32D-NEXT:    fsd fs0, 256(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs1, 248(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs2, 240(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs3, 232(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs4, 224(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs5, 216(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs6, 208(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs7, 200(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs8, 192(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs9, 184(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs10, 176(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fsd fs11, 168(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    lui a0, %hi(var)
+; ILP32D-NEXT:    addi s0, a0, %lo(var)
+; ILP32D-NEXT:    fld fa5, 0(s0)
+; ILP32D-NEXT:    fsd fa5, 160(sp) # 8-byte Folded Spill
+; ILP32D-NEXT:    fld fa5, 8(s0)
 ; ILP32D-NEXT:    fsd fa5, 152(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, %lo(var+8)(s0)
+; ILP32D-NEXT:    fld fa5, 16(s0)
 ; ILP32D-NEXT:    fsd fa5, 144(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    addi s1, s0, %lo(var)
-; ILP32D-NEXT:    fld fa5, 16(s1)
+; ILP32D-NEXT:    fld fa5, 24(s0)
 ; ILP32D-NEXT:    fsd fa5, 136(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 24(s1)
+; ILP32D-NEXT:    fld fa5, 32(s0)
 ; ILP32D-NEXT:    fsd fa5, 128(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 32(s1)
+; ILP32D-NEXT:    fld fa5, 40(s0)
 ; ILP32D-NEXT:    fsd fa5, 120(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 40(s1)
+; ILP32D-NEXT:    fld fa5, 48(s0)
 ; ILP32D-NEXT:    fsd fa5, 112(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 48(s1)
+; ILP32D-NEXT:    fld fa5, 56(s0)
 ; ILP32D-NEXT:    fsd fa5, 104(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 56(s1)
+; ILP32D-NEXT:    fld fa5, 64(s0)
 ; ILP32D-NEXT:    fsd fa5, 96(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 64(s1)
+; ILP32D-NEXT:    fld fa5, 72(s0)
 ; ILP32D-NEXT:    fsd fa5, 88(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 72(s1)
+; ILP32D-NEXT:    fld fa5, 80(s0)
 ; ILP32D-NEXT:    fsd fa5, 80(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 80(s1)
+; ILP32D-NEXT:    fld fa5, 88(s0)
 ; ILP32D-NEXT:    fsd fa5, 72(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 88(s1)
+; ILP32D-NEXT:    fld fa5, 96(s0)
 ; ILP32D-NEXT:    fsd fa5, 64(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 96(s1)
+; ILP32D-NEXT:    fld fa5, 104(s0)
 ; ILP32D-NEXT:    fsd fa5, 56(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 104(s1)
+; ILP32D-NEXT:    fld fa5, 112(s0)
 ; ILP32D-NEXT:    fsd fa5, 48(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 112(s1)
+; ILP32D-NEXT:    fld fa5, 120(s0)
 ; ILP32D-NEXT:    fsd fa5, 40(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 120(s1)
+; ILP32D-NEXT:    fld fa5, 128(s0)
 ; ILP32D-NEXT:    fsd fa5, 32(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 128(s1)
+; ILP32D-NEXT:    fld fa5, 136(s0)
 ; ILP32D-NEXT:    fsd fa5, 24(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 136(s1)
+; ILP32D-NEXT:    fld fa5, 144(s0)
 ; ILP32D-NEXT:    fsd fa5, 16(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 144(s1)
+; ILP32D-NEXT:    fld fa5, 152(s0)
 ; ILP32D-NEXT:    fsd fa5, 8(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fa5, 152(s1)
-; ILP32D-NEXT:    fsd fa5, 0(sp) # 8-byte Folded Spill
-; ILP32D-NEXT:    fld fs8, 160(s1)
-; ILP32D-NEXT:    fld fs9, 168(s1)
-; ILP32D-NEXT:    fld fs10, 176(s1)
-; ILP32D-NEXT:    fld fs11, 184(s1)
-; ILP32D-NEXT:    fld fs0, 192(s1)
-; ILP32D-NEXT:    fld fs1, 200(s1)
-; ILP32D-NEXT:    fld fs2, 208(s1)
-; ILP32D-NEXT:    fld fs3, 216(s1)
-; ILP32D-NEXT:    fld fs4, 224(s1)
-; ILP32D-NEXT:    fld fs5, 232(s1)
-; ILP32D-NEXT:    fld fs6, 240(s1)
-; ILP32D-NEXT:    fld fs7, 248(s1)
+; ILP32D-NEXT:    fld fs8, 160(s0)
+; ILP32D-NEXT:    fld fs9, 168(s0)
+; ILP32D-NEXT:    fld fs10, 176(s0)
+; ILP32D-NEXT:    fld fs11, 184(s0)
+; ILP32D-NEXT:    fld fs0, 192(s0)
+; ILP32D-NEXT:    fld fs1, 200(s0)
+; ILP32D-NEXT:    fld fs2, 208(s0)
+; ILP32D-NEXT:    fld fs3, 216(s0)
+; ILP32D-NEXT:    fld fs4, 224(s0)
+; ILP32D-NEXT:    fld fs5, 232(s0)
+; ILP32D-NEXT:    fld fs6, 240(s0)
+; ILP32D-NEXT:    fld fs7, 248(s0)
 ; ILP32D-NEXT:    call callee
-; ILP32D-NEXT:    fsd fs7, 248(s1)
-; ILP32D-NEXT:    fsd fs6, 240(s1)
-; ILP32D-NEXT:    fsd fs5, 232(s1)
-; ILP32D-NEXT:    fsd fs4, 224(s1)
-; ILP32D-NEXT:    fsd fs3, 216(s1)
-; ILP32D-NEXT:    fsd fs2, 208(s1)
-; ILP32D-NEXT:    fsd fs1, 200(s1)
-; ILP32D-NEXT:    fsd fs0, 192(s1)
-; ILP32D-NEXT:    fsd fs11, 184(s1)
-; ILP32D-NEXT:    fsd fs10, 176(s1)
-; ILP32D-NEXT:    fsd fs9, 168(s1)
-; ILP32D-NEXT:    fsd fs8, 160(s1)
-; ILP32D-NEXT:    fld fa5, 0(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 152(s1)
+; ILP32D-NEXT:    fsd fs7, 248(s0)
+; ILP32D-NEXT:    fsd fs6, 240(s0)
+; ILP32D-NEXT:    fsd fs5, 232(s0)
+; ILP32D-NEXT:    fsd fs4, 224(s0)
+; ILP32D-NEXT:    fsd fs3, 216(s0)
+; ILP32D-NEXT:    fsd fs2, 208(s0)
+; ILP32D-NEXT:    fsd fs1, 200(s0)
+; ILP32D-NEXT:    fsd fs0, 192(s0)
+; ILP32D-NEXT:    fsd fs11, 184(s0)
+; ILP32D-NEXT:    fsd fs10, 176(s0)
+; ILP32D-NEXT:    fsd fs9, 168(s0)
+; ILP32D-NEXT:    fsd fs8, 160(s0)
 ; ILP32D-NEXT:    fld fa5, 8(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 144(s1)
+; ILP32D-NEXT:    fsd fa5, 152(s0)
 ; ILP32D-NEXT:    fld fa5, 16(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 136(s1)
+; ILP32D-NEXT:    fsd fa5, 144(s0)
 ; ILP32D-NEXT:    fld fa5, 24(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 128(s1)
+; ILP32D-NEXT:    fsd fa5, 136(s0)
 ; ILP32D-NEXT:    fld fa5, 32(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 120(s1)
+; ILP32D-NEXT:    fsd fa5, 128(s0)
 ; ILP32D-NEXT:    fld fa5, 40(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 112(s1)
+; ILP32D-NEXT:    fsd fa5, 120(s0)
 ; ILP32D-NEXT:    fld fa5, 48(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 104(s1)
+; ILP32D-NEXT:    fsd fa5, 112(s0)
 ; ILP32D-NEXT:    fld fa5, 56(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 96(s1)
+; ILP32D-NEXT:    fsd fa5, 104(s0)
 ; ILP32D-NEXT:    fld fa5, 64(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 88(s1)
+; ILP32D-NEXT:    fsd fa5, 96(s0)
 ; ILP32D-NEXT:    fld fa5, 72(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 80(s1)
+; ILP32D-NEXT:    fsd fa5, 88(s0)
 ; ILP32D-NEXT:    fld fa5, 80(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 72(s1)
+; ILP32D-NEXT:    fsd fa5, 80(s0)
 ; ILP32D-NEXT:    fld fa5, 88(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 64(s1)
+; ILP32D-NEXT:    fsd fa5, 72(s0)
 ; ILP32D-NEXT:    fld fa5, 96(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 56(s1)
+; ILP32D-NEXT:    fsd fa5, 64(s0)
 ; ILP32D-NEXT:    fld fa5, 104(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 48(s1)
+; ILP32D-NEXT:    fsd fa5, 56(s0)
 ; ILP32D-NEXT:    fld fa5, 112(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 40(s1)
+; ILP32D-NEXT:    fsd fa5, 48(s0)
 ; ILP32D-NEXT:    fld fa5, 120(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 32(s1)
+; ILP32D-NEXT:    fsd fa5, 40(s0)
 ; ILP32D-NEXT:    fld fa5, 128(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 24(s1)
+; ILP32D-NEXT:    fsd fa5, 32(s0)
 ; ILP32D-NEXT:    fld fa5, 136(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, 16(s1)
+; ILP32D-NEXT:    fsd fa5, 24(s0)
 ; ILP32D-NEXT:    fld fa5, 144(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, %lo(var+8)(s0)
+; ILP32D-NEXT:    fsd fa5, 16(s0)
 ; ILP32D-NEXT:    fld fa5, 152(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fsd fa5, %lo(var)(s0)
+; ILP32D-NEXT:    fsd fa5, 8(s0)
+; ILP32D-NEXT:    fld fa5, 160(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fsd fa5, 0(s0)
 ; ILP32D-NEXT:    lw ra, 268(sp) # 4-byte Folded Reload
 ; ILP32D-NEXT:    lw s0, 264(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    lw s1, 260(sp) # 4-byte Folded Reload
-; ILP32D-NEXT:    fld fs0, 248(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs1, 240(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs2, 232(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs3, 224(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs4, 216(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs5, 208(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs6, 200(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs7, 192(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs8, 184(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs9, 176(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs10, 168(sp) # 8-byte Folded Reload
-; ILP32D-NEXT:    fld fs11, 160(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs0, 256(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs1, 248(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs2, 240(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs3, 232(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs4, 224(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs5, 216(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs6, 208(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs7, 200(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs8, 192(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs9, 184(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs10, 176(sp) # 8-byte Folded Reload
+; ILP32D-NEXT:    fld fs11, 168(sp) # 8-byte Folded Reload
 ; ILP32D-NEXT:    addi sp, sp, 272
 ; ILP32D-NEXT:    ret
 ;
 ; LP64D-LABEL: caller:
 ; LP64D:       # %bb.0:
-; LP64D-NEXT:    addi sp, sp, -288
-; LP64D-NEXT:    sd ra, 280(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    sd s0, 272(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    sd s1, 264(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs0, 256(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs1, 248(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs2, 240(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs3, 232(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs4, 224(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs5, 216(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs6, 208(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs7, 200(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs8, 192(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs9, 184(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs10, 176(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fsd fs11, 168(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    lui s0, %hi(var)
-; LP64D-NEXT:    fld fa5, %lo(var)(s0)
-; LP64D-NEXT:    fsd fa5, 160(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, %lo(var+8)(s0)
+; LP64D-NEXT:    addi sp, sp, -272
+; LP64D-NEXT:    sd ra, 264(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    sd s0, 256(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs0, 248(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs1, 240(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs2, 232(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs3, 224(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs4, 216(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs5, 208(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs6, 200(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs7, 192(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs8, 184(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs9, 176(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs10, 168(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fsd fs11, 160(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    lui a0, %hi(var)
+; LP64D-NEXT:    addi s0, a0, %lo(var)
+; LP64D-NEXT:    fld fa5, 0(s0)
 ; LP64D-NEXT:    fsd fa5, 152(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    addi s1, s0, %lo(var)
-; LP64D-NEXT:    fld fa5, 16(s1)
+; LP64D-NEXT:    fld fa5, 8(s0)
 ; LP64D-NEXT:    fsd fa5, 144(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 24(s1)
+; LP64D-NEXT:    fld fa5, 16(s0)
 ; LP64D-NEXT:    fsd fa5, 136(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 32(s1)
+; LP64D-NEXT:    fld fa5, 24(s0)
 ; LP64D-NEXT:    fsd fa5, 128(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 40(s1)
+; LP64D-NEXT:    fld fa5, 32(s0)
 ; LP64D-NEXT:    fsd fa5, 120(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 48(s1)
+; LP64D-NEXT:    fld fa5, 40(s0)
 ; LP64D-NEXT:    fsd fa5, 112(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 56(s1)
+; LP64D-NEXT:    fld fa5, 48(s0)
 ; LP64D-NEXT:    fsd fa5, 104(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 64(s1)
+; LP64D-NEXT:    fld fa5, 56(s0)
 ; LP64D-NEXT:    fsd fa5, 96(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 72(s1)
+; LP64D-NEXT:    fld fa5, 64(s0)
 ; LP64D-NEXT:    fsd fa5, 88(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 80(s1)
+; LP64D-NEXT:    fld fa5, 72(s0)
 ; LP64D-NEXT:    fsd fa5, 80(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 88(s1)
+; LP64D-NEXT:    fld fa5, 80(s0)
 ; LP64D-NEXT:    fsd fa5, 72(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 96(s1)
+; LP64D-NEXT:    fld fa5, 88(s0)
 ; LP64D-NEXT:    fsd fa5, 64(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 104(s1)
+; LP64D-NEXT:    fld fa5, 96(s0)
 ; LP64D-NEXT:    fsd fa5, 56(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 112(s1)
+; LP64D-NEXT:    fld fa5, 104(s0)
 ; LP64D-NEXT:    fsd fa5, 48(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 120(s1)
+; LP64D-NEXT:    fld fa5, 112(s0)
 ; LP64D-NEXT:    fsd fa5, 40(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 128(s1)
+; LP64D-NEXT:    fld fa5, 120(s0)
 ; LP64D-NEXT:    fsd fa5, 32(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 136(s1)
+; LP64D-NEXT:    fld fa5, 128(s0)
 ; LP64D-NEXT:    fsd fa5, 24(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 144(s1)
+; LP64D-NEXT:    fld fa5, 136(s0)
 ; LP64D-NEXT:    fsd fa5, 16(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fa5, 152(s1)
+; LP64D-NEXT:    fld fa5, 144(s0)
 ; LP64D-NEXT:    fsd fa5, 8(sp) # 8-byte Folded Spill
-; LP64D-NEXT:    fld fs8, 160(s1)
-; LP64D-NEXT:    fld fs9, 168(s1)
-; LP64D-NEXT:    fld fs10, 176(s1)
-; LP64D-NEXT:    fld fs11, 184(s1)
-; LP64D-NEXT:    fld fs0, 192(s1)
-; LP64D-NEXT:    fld fs1, 200(s1)
-; LP64D-NEXT:    fld fs2, 208(s1)
-; LP64D-NEXT:    fld fs3, 216(s1)
-; LP64D-NEXT:    fld fs4, 224(s1)
-; LP64D-NEXT:    fld fs5, 232(s1)
-; LP64D-NEXT:    fld fs6, 240(s1)
-; LP64D-NEXT:    fld fs7, 248(s1)
+; LP64D-NEXT:    fld fa5, 152(s0)
+; LP64D-NEXT:    fsd fa5, 0(sp) # 8-byte Folded Spill
+; LP64D-NEXT:    fld fs8, 160(s0)
+; LP64D-NEXT:    fld fs9, 168(s0)
+; LP64D-NEXT:    fld fs10, 176(s0)
+; LP64D-NEXT:    fld fs11, 184(s0)
+; LP64D-NEXT:    fld fs0, 192(s0)
+; LP64D-NEXT:    fld fs1, 200(s0)
+; LP64D-NEXT:    fld fs2, 208(s0)
+; LP64D-NEXT:    fld fs3, 216(s0)
+; LP64D-NEXT:    fld fs4, 224(s0)
+; LP64D-NEXT:    fld fs5, 232(s0)
+; LP64D-NEXT:    fld fs6, 240(s0)
+; LP64D-NEXT:    fld fs7, 248(s0)
 ; LP64D-NEXT:    call callee
-; LP64D-NEXT:    fsd fs7, 248(s1)
-; LP64D-NEXT:    fsd fs6, 240(s1)
-; LP64D-NEXT:    fsd fs5, 232(s1)
-; LP64D-NEXT:    fsd fs4, 224(s1)
-; LP64D-NEXT:    fsd fs3, 216(s1)
-; LP64D-NEXT:    fsd fs2, 208(s1)
-; LP64D-NEXT:    fsd fs1, 200(s1)
-; LP64D-NEXT:    fsd fs0, 192(s1)
-; LP64D-NEXT:    fsd fs11, 184(s1)
-; LP64D-NEXT:    fsd fs10, 176(s1)
-; LP64D-NEXT:    fsd fs9, 168(s1)
-; LP64D-NEXT:    fsd fs8, 160(s1)
+; LP64D-NEXT:    fsd fs7, 248(s0)
+; LP64D-NEXT:    fsd fs6, 240(s0)
+; LP64D-NEXT:    fsd fs5, 232(s0)
+; LP64D-NEXT:    fsd fs4, 224(s0)
+; LP64D-NEXT:    fsd fs3, 216(s0)
+; LP64D-NEXT:    fsd fs2, 208(s0)
+; LP64D-NEXT:    fsd fs1, 200(s0)
+; LP64D-NEXT:    fsd fs0, 192(s0)
+; LP64D-NEXT:    fsd fs11, 184(s0)
+; LP64D-NEXT:    fsd fs10, 176(s0)
+; LP64D-NEXT:    fsd fs9, 168(s0)
+; LP64D-NEXT:    fsd fs8, 160(s0)
+; LP64D-NEXT:    fld fa5, 0(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fsd fa5, 152(s0)
 ; LP64D-NEXT:    fld fa5, 8(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 152(s1)
+; LP64D-NEXT:    fsd fa5, 144(s0)
 ; LP64D-NEXT:    fld fa5, 16(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 144(s1)
+; LP64D-NEXT:    fsd fa5, 136(s0)
 ; LP64D-NEXT:    fld fa5, 24(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 136(s1)
+; LP64D-NEXT:    fsd fa5, 128(s0)
 ; LP64D-NEXT:    fld fa5, 32(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 128(s1)
+; LP64D-NEXT:    fsd fa5, 120(s0)
 ; LP64D-NEXT:    fld fa5, 40(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 120(s1)
+; LP64D-NEXT:    fsd fa5, 112(s0)
 ; LP64D-NEXT:    fld fa5, 48(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 112(s1)
+; LP64D-NEXT:    fsd fa5, 104(s0)
 ; LP64D-NEXT:    fld fa5, 56(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 104(s1)
+; LP64D-NEXT:    fsd fa5, 96(s0)
 ; LP64D-NEXT:    fld fa5, 64(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 96(s1)
+; LP64D-NEXT:    fsd fa5, 88(s0)
 ; LP64D-NEXT:    fld fa5, 72(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 88(s1)
+; LP64D-NEXT:    fsd fa5, 80(s0)
 ; LP64D-NEXT:    fld fa5, 80(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 80(s1)
+; LP64D-NEXT:    fsd fa5, 72(s0)
 ; LP64D-NEXT:    fld fa5, 88(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 72(s1)
+; LP64D-NEXT:    fsd fa5, 64(s0)
 ; LP64D-NEXT:    fld fa5, 96(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 64(s1)
+; LP64D-NEXT:    fsd fa5, 56(s0)
 ; LP64D-NEXT:    fld fa5, 104(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 56(s1)
+; LP64D-NEXT:    fsd fa5, 48(s0)
 ; LP64D-NEXT:    fld fa5, 112(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 48(s1)
+; LP64D-NEXT:    fsd fa5, 40(s0)
 ; LP64D-NEXT:    fld fa5, 120(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 40(s1)
+; LP64D-NEXT:    fsd fa5, 32(s0)
 ; LP64D-NEXT:    fld fa5, 128(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 32(s1)
+; LP64D-NEXT:    fsd fa5, 24(s0)
 ; LP64D-NEXT:    fld fa5, 136(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 24(s1)
+; LP64D-NEXT:    fsd fa5, 16(s0)
 ; LP64D-NEXT:    fld fa5, 144(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, 16(s1)
+; LP64D-NEXT:    fsd fa5, 8(s0)
 ; LP64D-NEXT:    fld fa5, 152(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, %lo(var+8)(s0)
-; LP64D-NEXT:    fld fa5, 160(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fsd fa5, %lo(var)(s0)
-; LP64D-NEXT:    ld ra, 280(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    ld s0, 272(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    ld s1, 264(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs0, 256(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs1, 248(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs2, 240(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs3, 232(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs4, 224(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs5, 216(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs6, 208(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs7, 200(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs8, 192(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs9, 184(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs10, 176(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    fld fs11, 168(sp) # 8-byte Folded Reload
-; LP64D-NEXT:    addi sp, sp, 288
+; LP64D-NEXT:    fsd fa5, 0(s0)
+; LP64D-NEXT:    ld ra, 264(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    ld s0, 256(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs0, 248(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs1, 240(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs2, 232(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs3, 224(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs4, 216(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs5, 208(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs6, 200(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs7, 192(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs8, 184(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs9, 176(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs10, 168(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    fld fs11, 160(sp) # 8-byte Folded Reload
+; LP64D-NEXT:    addi sp, sp, 272
 ; LP64D-NEXT:    ret
   %val = load [32 x double], ptr @var
   call void @callee()
diff --git a/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll b/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll
index 5e8ed4509b535..7a6f9136a242b 100644
--- a/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll
+++ b/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll
@@ -54,84 +54,82 @@ define void @callee() nounwind {
 ; RV32I-NEXT:    sw s9, 36(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s10, 32(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s11, 28(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lui a6, %hi(var)
-; RV32I-NEXT:    lw a0, %lo(var)(a6)
-; RV32I-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var+4)(a6)
-; RV32I-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var+8)(a6)
-; RV32I-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var+12)(a6)
-; RV32I-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    addi a5, a6, %lo(var)
-; RV32I-NEXT:    lw a0, 16(a5)
-; RV32I-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 20(a5)
-; RV32I-NEXT:    sw a0, 4(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw t0, 24(a5)
-; RV32I-NEXT:    lw t1, 28(a5)
-; RV32I-NEXT:    lw t2, 32(a5)
-; RV32I-NEXT:    lw t3, 36(a5)
-; RV32I-NEXT:    lw t4, 40(a5)
-; RV32I-NEXT:    lw t5, 44(a5)
-; RV32I-NEXT:    lw t6, 48(a5)
-; RV32I-NEXT:    lw s0, 52(a5)
-; RV32I-NEXT:    lw s1, 56(a5)
-; RV32I-NEXT:    lw s2, 60(a5)
-; RV32I-NEXT:    lw s3, 64(a5)
-; RV32I-NEXT:    lw s4, 68(a5)
-; RV32I-NEXT:    lw s5, 72(a5)
-; RV32I-NEXT:    lw s6, 76(a5)
-; RV32I-NEXT:    lw s7, 80(a5)
-; RV32I-NEXT:    lw s8, 84(a5)
-; RV32I-NEXT:    lw s9, 88(a5)
-; RV32I-NEXT:    lw s10, 92(a5)
-; RV32I-NEXT:    lw s11, 96(a5)
-; RV32I-NEXT:    lw ra, 100(a5)
-; RV32I-NEXT:    lw a7, 104(a5)
-; RV32I-NEXT:    lw a4, 108(a5)
-; RV32I-NEXT:    lw a0, 124(a5)
-; RV32I-NEXT:    lw a1, 120(a5)
-; RV32I-NEXT:    lw a2, 116(a5)
-; RV32I-NEXT:    lw a3, 112(a5)
-; RV32I-NEXT:    sw a0, 124(a5)
-; RV32I-NEXT:    sw a1, 120(a5)
-; RV32I-NEXT:    sw a2, 116(a5)
-; RV32I-NEXT:    sw a3, 112(a5)
-; RV32I-NEXT:    sw a4, 108(a5)
-; RV32I-NEXT:    sw a7, 104(a5)
-; RV32I-NEXT:    sw ra, 100(a5)
-; RV32I-NEXT:    sw s11, 96(a5)
-; RV32I-NEXT:    sw s10, 92(a5)
-; RV32I-NEXT:    sw s9, 88(a5)
-; RV32I-NEXT:    sw s8, 84(a5)
-; RV32I-NEXT:    sw s7, 80(a5)
-; RV32I-NEXT:    sw s6, 76(a5)
-; RV32I-NEXT:    sw s5, 72(a5)
-; RV32I-NEXT:    sw s4, 68(a5)
-; RV32I-NEXT:    sw s3, 64(a5)
-; RV32I-NEXT:    sw s2, 60(a5)
-; RV32I-NEXT:    sw s1, 56(a5)
-; RV32I-NEXT:    sw s0, 52(a5)
-; RV32I-NEXT:    sw t6, 48(a5)
-; RV32I-NEXT:    sw t5, 44(a5)
-; RV32I-NEXT:    sw t4, 40(a5)
-; RV32I-NEXT:    sw t3, 36(a5)
-; RV32I-NEXT:    sw t2, 32(a5)
-; RV32I-NEXT:    sw t1, 28(a5)
-; RV32I-NEXT:    sw t0, 24(a5)
-; RV32I-NEXT:    lw a0, 4(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 20(a5)
-; RV32I-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 16(a5)
-; RV32I-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var+12)(a6)
-; RV32I-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var+8)(a6)
-; RV32I-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var+4)(a6)
-; RV32I-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var)(a6)
+; RV32I-NEXT:    lui a0, %hi(var)
+; RV32I-NEXT:    addi a0, a0, %lo(var)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 4(a0)
+; RV32I-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 8(a0)
+; RV32I-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 12(a0)
+; RV32I-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 16(a0)
+; RV32I-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 56(a0)
+; RV32I-NEXT:    lw s1, 60(a0)
+; RV32I-NEXT:    lw s2, 64(a0)
+; RV32I-NEXT:    lw s3, 68(a0)
+; RV32I-NEXT:    lw s4, 72(a0)
+; RV32I-NEXT:    lw s5, 76(a0)
+; RV32I-NEXT:    lw s6, 80(a0)
+; RV32I-NEXT:    lw s7, 84(a0)
+; RV32I-NEXT:    lw s8, 88(a0)
+; RV32I-NEXT:    lw s9, 92(a0)
+; RV32I-NEXT:    lw s10, 96(a0)
+; RV32I-NEXT:    lw s11, 100(a0)
+; RV32I-NEXT:    lw ra, 104(a0)
+; RV32I-NEXT:    lw a5, 108(a0)
+; RV32I-NEXT:    lw a1, 124(a0)
+; RV32I-NEXT:    lw a2, 120(a0)
+; RV32I-NEXT:    lw a3, 116(a0)
+; RV32I-NEXT:    lw a4, 112(a0)
+; RV32I-NEXT:    sw a1, 124(a0)
+; RV32I-NEXT:    sw a2, 120(a0)
+; RV32I-NEXT:    sw a3, 116(a0)
+; RV32I-NEXT:    sw a4, 112(a0)
+; RV32I-NEXT:    sw a5, 108(a0)
+; RV32I-NEXT:    sw ra, 104(a0)
+; RV32I-NEXT:    sw s11, 100(a0)
+; RV32I-NEXT:    sw s10, 96(a0)
+; RV32I-NEXT:    sw s9, 92(a0)
+; RV32I-NEXT:    sw s8, 88(a0)
+; RV32I-NEXT:    sw s7, 84(a0)
+; RV32I-NEXT:    sw s6, 80(a0)
+; RV32I-NEXT:    sw s5, 76(a0)
+; RV32I-NEXT:    sw s4, 72(a0)
+; RV32I-NEXT:    sw s3, 68(a0)
+; RV32I-NEXT:    sw s2, 64(a0)
+; RV32I-NEXT:    sw s1, 60(a0)
+; RV32I-NEXT:    sw s0, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 16(a0)
+; RV32I-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 12(a0)
+; RV32I-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 8(a0)
+; RV32I-NEXT:    lw a1, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 4(a0)
+; RV32I-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 0(a0)
 ; RV32I-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 68(sp) # 4-byte Folded Reload
@@ -150,92 +148,90 @@ define void @callee() nounwind {
 ;
 ; RV32I-ILP32E-LABEL: callee:
 ; RV32I-ILP32E:       # %bb.0:
-; RV32I-ILP32E-NEXT:    addi sp, sp, -36
-; RV32I-ILP32E-NEXT:    sw ra, 32(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    sw s0, 28(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    sw s1, 24(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lui a6, %hi(var)
-; RV32I-ILP32E-NEXT:    lw a0, %lo(var)(a6)
-; RV32I-ILP32E-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, %lo(var+4)(a6)
-; RV32I-ILP32E-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, %lo(var+8)(a6)
-; RV32I-ILP32E-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, %lo(var+12)(a6)
-; RV32I-ILP32E-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    addi a5, a6, %lo(var)
-; RV32I-ILP32E-NEXT:    lw a0, 16(a5)
-; RV32I-ILP32E-NEXT:    sw a0, 4(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 20(a5)
-; RV32I-ILP32E-NEXT:    sw a0, 0(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw t0, 24(a5)
-; RV32I-ILP32E-NEXT:    lw t1, 28(a5)
-; RV32I-ILP32E-NEXT:    lw t2, 32(a5)
-; RV32I-ILP32E-NEXT:    lw t3, 36(a5)
-; RV32I-ILP32E-NEXT:    lw t4, 40(a5)
-; RV32I-ILP32E-NEXT:    lw t5, 44(a5)
-; RV32I-ILP32E-NEXT:    lw t6, 48(a5)
-; RV32I-ILP32E-NEXT:    lw s2, 52(a5)
-; RV32I-ILP32E-NEXT:    lw s3, 56(a5)
-; RV32I-ILP32E-NEXT:    lw s4, 60(a5)
-; RV32I-ILP32E-NEXT:    lw s5, 64(a5)
-; RV32I-ILP32E-NEXT:    lw s6, 68(a5)
-; RV32I-ILP32E-NEXT:    lw s7, 72(a5)
-; RV32I-ILP32E-NEXT:    lw s8, 76(a5)
-; RV32I-ILP32E-NEXT:    lw s9, 80(a5)
-; RV32I-ILP32E-NEXT:    lw s10, 84(a5)
-; RV32I-ILP32E-NEXT:    lw s11, 88(a5)
-; RV32I-ILP32E-NEXT:    lw s0, 92(a5)
-; RV32I-ILP32E-NEXT:    lw s1, 96(a5)
-; RV32I-ILP32E-NEXT:    lw ra, 100(a5)
-; RV32I-ILP32E-NEXT:    lw a7, 104(a5)
-; RV32I-ILP32E-NEXT:    lw a4, 108(a5)
-; RV32I-ILP32E-NEXT:    lw a0, 124(a5)
-; RV32I-ILP32E-NEXT:    lw a1, 120(a5)
-; RV32I-ILP32E-NEXT:    lw a2, 116(a5)
-; RV32I-ILP32E-NEXT:    lw a3, 112(a5)
-; RV32I-ILP32E-NEXT:    sw a0, 124(a5)
-; RV32I-ILP32E-NEXT:    sw a1, 120(a5)
-; RV32I-ILP32E-NEXT:    sw a2, 116(a5)
-; RV32I-ILP32E-NEXT:    sw a3, 112(a5)
-; RV32I-ILP32E-NEXT:    sw a4, 108(a5)
-; RV32I-ILP32E-NEXT:    sw a7, 104(a5)
-; RV32I-ILP32E-NEXT:    sw ra, 100(a5)
-; RV32I-ILP32E-NEXT:    sw s1, 96(a5)
-; RV32I-ILP32E-NEXT:    sw s0, 92(a5)
-; RV32I-ILP32E-NEXT:    sw s11, 88(a5)
-; RV32I-ILP32E-NEXT:    sw s10, 84(a5)
-; RV32I-ILP32E-NEXT:    sw s9, 80(a5)
-; RV32I-ILP32E-NEXT:    sw s8, 76(a5)
-; RV32I-ILP32E-NEXT:    sw s7, 72(a5)
-; RV32I-ILP32E-NEXT:    sw s6, 68(a5)
-; RV32I-ILP32E-NEXT:    sw s5, 64(a5)
-; RV32I-ILP32E-NEXT:    sw s4, 60(a5)
-; RV32I-ILP32E-NEXT:    sw s3, 56(a5)
-; RV32I-ILP32E-NEXT:    sw s2, 52(a5)
-; RV32I-ILP32E-NEXT:    sw t6, 48(a5)
-; RV32I-ILP32E-NEXT:    sw t5, 44(a5)
-; RV32I-ILP32E-NEXT:    sw t4, 40(a5)
-; RV32I-ILP32E-NEXT:    sw t3, 36(a5)
-; RV32I-ILP32E-NEXT:    sw t2, 32(a5)
-; RV32I-ILP32E-NEXT:    sw t1, 28(a5)
-; RV32I-ILP32E-NEXT:    sw t0, 24(a5)
-; RV32I-ILP32E-NEXT:    lw a0, 0(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 20(a5)
-; RV32I-ILP32E-NEXT:    lw a0, 4(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 16(a5)
-; RV32I-ILP32E-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var+12)(a6)
-; RV32I-ILP32E-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var+8)(a6)
-; RV32I-ILP32E-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var+4)(a6)
-; RV32I-ILP32E-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var)(a6)
-; RV32I-ILP32E-NEXT:    lw ra, 32(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    lw s0, 28(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    lw s1, 24(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    addi sp, sp, 36
+; RV32I-ILP32E-NEXT:    addi sp, sp, -32
+; RV32I-ILP32E-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lui a0, %hi(var)
+; RV32I-ILP32E-NEXT:    addi a0, a0, %lo(var)
+; RV32I-ILP32E-NEXT:    lw a1, 0(a0)
+; RV32I-ILP32E-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a1, 4(a0)
+; RV32I-ILP32E-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a1, 8(a0)
+; RV32I-ILP32E-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a1, 12(a0)
+; RV32I-ILP32E-NEXT:    sw a1, 4(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a1, 16(a0)
+; RV32I-ILP32E-NEXT:    sw a1, 0(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a6, 20(a0)
+; RV32I-ILP32E-NEXT:    lw a7, 24(a0)
+; RV32I-ILP32E-NEXT:    lw t0, 28(a0)
+; RV32I-ILP32E-NEXT:    lw t1, 32(a0)
+; RV32I-ILP32E-NEXT:    lw t2, 36(a0)
+; RV32I-ILP32E-NEXT:    lw t3, 40(a0)
+; RV32I-ILP32E-NEXT:    lw t4, 44(a0)
+; RV32I-ILP32E-NEXT:    lw t5, 48(a0)
+; RV32I-ILP32E-NEXT:    lw t6, 52(a0)
+; RV32I-ILP32E-NEXT:    lw s2, 56(a0)
+; RV32I-ILP32E-NEXT:    lw s3, 60(a0)
+; RV32I-ILP32E-NEXT:    lw s4, 64(a0)
+; RV32I-ILP32E-NEXT:    lw s5, 68(a0)
+; RV32I-ILP32E-NEXT:    lw s6, 72(a0)
+; RV32I-ILP32E-NEXT:    lw s7, 76(a0)
+; RV32I-ILP32E-NEXT:    lw s8, 80(a0)
+; RV32I-ILP32E-NEXT:    lw s9, 84(a0)
+; RV32I-ILP32E-NEXT:    lw s10, 88(a0)
+; RV32I-ILP32E-NEXT:    lw s11, 92(a0)
+; RV32I-ILP32E-NEXT:    lw s0, 96(a0)
+; RV32I-ILP32E-NEXT:    lw s1, 100(a0)
+; RV32I-ILP32E-NEXT:    lw ra, 104(a0)
+; RV32I-ILP32E-NEXT:    lw a5, 108(a0)
+; RV32I-ILP32E-NEXT:    lw a1, 124(a0)
+; RV32I-ILP32E-NEXT:    lw a2, 120(a0)
+; RV32I-ILP32E-NEXT:    lw a3, 116(a0)
+; RV32I-ILP32E-NEXT:    lw a4, 112(a0)
+; RV32I-ILP32E-NEXT:    sw a1, 124(a0)
+; RV32I-ILP32E-NEXT:    sw a2, 120(a0)
+; RV32I-ILP32E-NEXT:    sw a3, 116(a0)
+; RV32I-ILP32E-NEXT:    sw a4, 112(a0)
+; RV32I-ILP32E-NEXT:    sw a5, 108(a0)
+; RV32I-ILP32E-NEXT:    sw ra, 104(a0)
+; RV32I-ILP32E-NEXT:    sw s1, 100(a0)
+; RV32I-ILP32E-NEXT:    sw s0, 96(a0)
+; RV32I-ILP32E-NEXT:    sw s11, 92(a0)
+; RV32I-ILP32E-NEXT:    sw s10, 88(a0)
+; RV32I-ILP32E-NEXT:    sw s9, 84(a0)
+; RV32I-ILP32E-NEXT:    sw s8, 80(a0)
+; RV32I-ILP32E-NEXT:    sw s7, 76(a0)
+; RV32I-ILP32E-NEXT:    sw s6, 72(a0)
+; RV32I-ILP32E-NEXT:    sw s5, 68(a0)
+; RV32I-ILP32E-NEXT:    sw s4, 64(a0)
+; RV32I-ILP32E-NEXT:    sw s3, 60(a0)
+; RV32I-ILP32E-NEXT:    sw s2, 56(a0)
+; RV32I-ILP32E-NEXT:    sw t6, 52(a0)
+; RV32I-ILP32E-NEXT:    sw t5, 48(a0)
+; RV32I-ILP32E-NEXT:    sw t4, 44(a0)
+; RV32I-ILP32E-NEXT:    sw t3, 40(a0)
+; RV32I-ILP32E-NEXT:    sw t2, 36(a0)
+; RV32I-ILP32E-NEXT:    sw t1, 32(a0)
+; RV32I-ILP32E-NEXT:    sw t0, 28(a0)
+; RV32I-ILP32E-NEXT:    sw a7, 24(a0)
+; RV32I-ILP32E-NEXT:    sw a6, 20(a0)
+; RV32I-ILP32E-NEXT:    lw a1, 0(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    sw a1, 16(a0)
+; RV32I-ILP32E-NEXT:    lw a1, 4(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    sw a1, 12(a0)
+; RV32I-ILP32E-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    sw a1, 8(a0)
+; RV32I-ILP32E-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    sw a1, 4(a0)
+; RV32I-ILP32E-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    sw a1, 0(a0)
+; RV32I-ILP32E-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; RV32I-ILP32E-NEXT:    addi sp, sp, 32
 ; RV32I-ILP32E-NEXT:    ret
 ;
 ; RV32I-WITH-FP-LABEL: callee:
@@ -255,86 +251,84 @@ define void @callee() nounwind {
 ; RV32I-WITH-FP-NEXT:    sw s10, 32(sp) # 4-byte Folded Spill
 ; RV32I-WITH-FP-NEXT:    sw s11, 28(sp) # 4-byte Folded Spill
 ; RV32I-WITH-FP-NEXT:    addi s0, sp, 80
-; RV32I-WITH-FP-NEXT:    lui a6, %hi(var)
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var)(a6)
-; RV32I-WITH-FP-NEXT:    sw a0, -56(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var+4)(a6)
-; RV32I-WITH-FP-NEXT:    sw a0, -60(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var+8)(a6)
-; RV32I-WITH-FP-NEXT:    sw a0, -64(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var+12)(a6)
-; RV32I-WITH-FP-NEXT:    sw a0, -68(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    addi a5, a6, %lo(var)
-; RV32I-WITH-FP-NEXT:    lw a0, 16(a5)
-; RV32I-WITH-FP-NEXT:    sw a0, -72(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 20(a5)
-; RV32I-WITH-FP-NEXT:    sw a0, -76(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 24(a5)
-; RV32I-WITH-FP-NEXT:    sw a0, -80(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw t1, 28(a5)
-; RV32I-WITH-FP-NEXT:    lw t2, 32(a5)
-; RV32I-WITH-FP-NEXT:    lw t3, 36(a5)
-; RV32I-WITH-FP-NEXT:    lw t4, 40(a5)
-; RV32I-WITH-FP-NEXT:    lw t5, 44(a5)
-; RV32I-WITH-FP-NEXT:    lw t6, 48(a5)
-; RV32I-WITH-FP-NEXT:    lw s1, 52(a5)
-; RV32I-WITH-FP-NEXT:    lw s2, 56(a5)
-; RV32I-WITH-FP-NEXT:    lw s3, 60(a5)
-; RV32I-WITH-FP-NEXT:    lw s4, 64(a5)
-; RV32I-WITH-FP-NEXT:    lw s5, 68(a5)
-; RV32I-WITH-FP-NEXT:    lw s6, 72(a5)
-; RV32I-WITH-FP-NEXT:    lw s7, 76(a5)
-; RV32I-WITH-FP-NEXT:    lw s8, 80(a5)
-; RV32I-WITH-FP-NEXT:    lw s9, 84(a5)
-; RV32I-WITH-FP-NEXT:    lw s10, 88(a5)
-; RV32I-WITH-FP-NEXT:    lw s11, 92(a5)
-; RV32I-WITH-FP-NEXT:    lw ra, 96(a5)
-; RV32I-WITH-FP-NEXT:    lw t0, 100(a5)
-; RV32I-WITH-FP-NEXT:    lw a7, 104(a5)
-; RV32I-WITH-FP-NEXT:    lw a4, 108(a5)
-; RV32I-WITH-FP-NEXT:    lw a0, 124(a5)
-; RV32I-WITH-FP-NEXT:    lw a1, 120(a5)
-; RV32I-WITH-FP-NEXT:    lw a2, 116(a5)
-; RV32I-WITH-FP-NEXT:    lw a3, 112(a5)
-; RV32I-WITH-FP-NEXT:    sw a0, 124(a5)
-; RV32I-WITH-FP-NEXT:    sw a1, 120(a5)
-; RV32I-WITH-FP-NEXT:    sw a2, 116(a5)
-; RV32I-WITH-FP-NEXT:    sw a3, 112(a5)
-; RV32I-WITH-FP-NEXT:    sw a4, 108(a5)
-; RV32I-WITH-FP-NEXT:    sw a7, 104(a5)
-; RV32I-WITH-FP-NEXT:    sw t0, 100(a5)
-; RV32I-WITH-FP-NEXT:    sw ra, 96(a5)
-; RV32I-WITH-FP-NEXT:    sw s11, 92(a5)
-; RV32I-WITH-FP-NEXT:    sw s10, 88(a5)
-; RV32I-WITH-FP-NEXT:    sw s9, 84(a5)
-; RV32I-WITH-FP-NEXT:    sw s8, 80(a5)
-; RV32I-WITH-FP-NEXT:    sw s7, 76(a5)
-; RV32I-WITH-FP-NEXT:    sw s6, 72(a5)
-; RV32I-WITH-FP-NEXT:    sw s5, 68(a5)
-; RV32I-WITH-FP-NEXT:    sw s4, 64(a5)
-; RV32I-WITH-FP-NEXT:    sw s3, 60(a5)
-; RV32I-WITH-FP-NEXT:    sw s2, 56(a5)
-; RV32I-WITH-FP-NEXT:    sw s1, 52(a5)
-; RV32I-WITH-FP-NEXT:    sw t6, 48(a5)
-; RV32I-WITH-FP-NEXT:    sw t5, 44(a5)
-; RV32I-WITH-FP-NEXT:    sw t4, 40(a5)
-; RV32I-WITH-FP-NEXT:    sw t3, 36(a5)
-; RV32I-WITH-FP-NEXT:    sw t2, 32(a5)
-; RV32I-WITH-FP-NEXT:    sw t1, 28(a5)
-; RV32I-WITH-FP-NEXT:    lw a0, -80(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 24(a5)
-; RV32I-WITH-FP-NEXT:    lw a0, -76(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 20(a5)
-; RV32I-WITH-FP-NEXT:    lw a0, -72(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 16(a5)
-; RV32I-WITH-FP-NEXT:    lw a0, -68(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var+12)(a6)
-; RV32I-WITH-FP-NEXT:    lw a0, -64(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var+8)(a6)
-; RV32I-WITH-FP-NEXT:    lw a0, -60(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var+4)(a6)
-; RV32I-WITH-FP-NEXT:    lw a0, -56(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var)(a6)
+; RV32I-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV32I-WITH-FP-NEXT:    addi a0, a0, %lo(var)
+; RV32I-WITH-FP-NEXT:    lw a1, 0(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, -56(s0) # 4-byte Folded Spill
+; RV32I-WITH-FP-NEXT:    lw a1, 4(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, -60(s0) # 4-byte Folded Spill
+; RV32I-WITH-FP-NEXT:    lw a1, 8(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, -64(s0) # 4-byte Folded Spill
+; RV32I-WITH-FP-NEXT:    lw a1, 12(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, -68(s0) # 4-byte Folded Spill
+; RV32I-WITH-FP-NEXT:    lw a1, 16(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, -72(s0) # 4-byte Folded Spill
+; RV32I-WITH-FP-NEXT:    lw a1, 20(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, -76(s0) # 4-byte Folded Spill
+; RV32I-WITH-FP-NEXT:    lw a7, 24(a0)
+; RV32I-WITH-FP-NEXT:    lw t0, 28(a0)
+; RV32I-WITH-FP-NEXT:    lw t1, 32(a0)
+; RV32I-WITH-FP-NEXT:    lw t2, 36(a0)
+; RV32I-WITH-FP-NEXT:    lw t3, 40(a0)
+; RV32I-WITH-FP-NEXT:    lw t4, 44(a0)
+; RV32I-WITH-FP-NEXT:    lw t5, 48(a0)
+; RV32I-WITH-FP-NEXT:    lw t6, 52(a0)
+; RV32I-WITH-FP-NEXT:    lw s1, 56(a0)
+; RV32I-WITH-FP-NEXT:    lw s2, 60(a0)
+; RV32I-WITH-FP-NEXT:    lw s3, 64(a0)
+; RV32I-WITH-FP-NEXT:    lw s4, 68(a0)
+; RV32I-WITH-FP-NEXT:    lw s5, 72(a0)
+; RV32I-WITH-FP-NEXT:    lw s6, 76(a0)
+; RV32I-WITH-FP-NEXT:    lw s7, 80(a0)
+; RV32I-WITH-FP-NEXT:    lw s8, 84(a0)
+; RV32I-WITH-FP-NEXT:    lw s9, 88(a0)
+; RV32I-WITH-FP-NEXT:    lw s10, 92(a0)
+; RV32I-WITH-FP-NEXT:    lw s11, 96(a0)
+; RV32I-WITH-FP-NEXT:    lw ra, 100(a0)
+; RV32I-WITH-FP-NEXT:    lw a6, 104(a0)
+; RV32I-WITH-FP-NEXT:    lw a5, 108(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, 124(a0)
+; RV32I-WITH-FP-NEXT:    lw a2, 120(a0)
+; RV32I-WITH-FP-NEXT:    lw a3, 116(a0)
+; RV32I-WITH-FP-NEXT:    lw a4, 112(a0)
+; RV32I-WITH-FP-NEXT:    sw a1, 124(a0)
+; RV32I-WITH-FP-NEXT:    sw a2, 120(a0)
+; RV32I-WITH-FP-NEXT:    sw a3, 116(a0)
+; RV32I-WITH-FP-NEXT:    sw a4, 112(a0)
+; RV32I-WITH-FP-NEXT:    sw a5, 108(a0)
+; RV32I-WITH-FP-NEXT:    sw a6, 104(a0)
+; RV32I-WITH-FP-NEXT:    sw ra, 100(a0)
+; RV32I-WITH-FP-NEXT:    sw s11, 96(a0)
+; RV32I-WITH-FP-NEXT:    sw s10, 92(a0)
+; RV32I-WITH-FP-NEXT:    sw s9, 88(a0)
+; RV32I-WITH-FP-NEXT:    sw s8, 84(a0)
+; RV32I-WITH-FP-NEXT:    sw s7, 80(a0)
+; RV32I-WITH-FP-NEXT:    sw s6, 76(a0)
+; RV32I-WITH-FP-NEXT:    sw s5, 72(a0)
+; RV32I-WITH-FP-NEXT:    sw s4, 68(a0)
+; RV32I-WITH-FP-NEXT:    sw s3, 64(a0)
+; RV32I-WITH-FP-NEXT:    sw s2, 60(a0)
+; RV32I-WITH-FP-NEXT:    sw s1, 56(a0)
+; RV32I-WITH-FP-NEXT:    sw t6, 52(a0)
+; RV32I-WITH-FP-NEXT:    sw t5, 48(a0)
+; RV32I-WITH-FP-NEXT:    sw t4, 44(a0)
+; RV32I-WITH-FP-NEXT:    sw t3, 40(a0)
+; RV32I-WITH-FP-NEXT:    sw t2, 36(a0)
+; RV32I-WITH-FP-NEXT:    sw t1, 32(a0)
+; RV32I-WITH-FP-NEXT:    sw t0, 28(a0)
+; RV32I-WITH-FP-NEXT:    sw a7, 24(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, -76(s0) # 4-byte Folded Reload
+; RV32I-WITH-FP-NEXT:    sw a1, 20(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, -72(s0) # 4-byte Folded Reload
+; RV32I-WITH-FP-NEXT:    sw a1, 16(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, -68(s0) # 4-byte Folded Reload
+; RV32I-WITH-FP-NEXT:    sw a1, 12(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, -64(s0) # 4-byte Folded Reload
+; RV32I-WITH-FP-NEXT:    sw a1, 8(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, -60(s0) # 4-byte Folded Reload
+; RV32I-WITH-FP-NEXT:    sw a1, 4(a0)
+; RV32I-WITH-FP-NEXT:    lw a1, -56(s0) # 4-byte Folded Reload
+; RV32I-WITH-FP-NEXT:    sw a1, 0(a0)
 ; RV32I-WITH-FP-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32I-WITH-FP-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
 ; RV32I-WITH-FP-NEXT:    lw s1, 68(sp) # 4-byte Folded Reload
@@ -354,84 +348,82 @@ define void @callee() nounwind {
 ; RV32IZCMP-LABEL: callee:
 ; RV32IZCMP:       # %bb.0:
 ; RV32IZCMP-NEXT:    cm.push {ra, s0-s11}, -96
-; RV32IZCMP-NEXT:    lui a6, %hi(var)
-; RV32IZCMP-NEXT:    lw a0, %lo(var)(a6)
-; RV32IZCMP-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var+4)(a6)
-; RV32IZCMP-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var+8)(a6)
-; RV32IZCMP-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var+12)(a6)
-; RV32IZCMP-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    addi a5, a6, %lo(var)
-; RV32IZCMP-NEXT:    lw a0, 16(a5)
-; RV32IZCMP-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 20(a5)
-; RV32IZCMP-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-NEXT:    lw s5, 48(a5)
-; RV32IZCMP-NEXT:    lw s6, 52(a5)
-; RV32IZCMP-NEXT:    lw s7, 56(a5)
-; RV32IZCMP-NEXT:    lw s8, 60(a5)
-; RV32IZCMP-NEXT:    lw s9, 64(a5)
-; RV32IZCMP-NEXT:    lw s10, 68(a5)
-; RV32IZCMP-NEXT:    lw s11, 72(a5)
-; RV32IZCMP-NEXT:    lw ra, 76(a5)
-; RV32IZCMP-NEXT:    lw s1, 80(a5)
-; RV32IZCMP-NEXT:    lw t3, 84(a5)
-; RV32IZCMP-NEXT:    lw t2, 88(a5)
-; RV32IZCMP-NEXT:    lw t1, 92(a5)
-; RV32IZCMP-NEXT:    lw t0, 96(a5)
-; RV32IZCMP-NEXT:    lw s0, 100(a5)
-; RV32IZCMP-NEXT:    lw a7, 104(a5)
-; RV32IZCMP-NEXT:    lw a4, 108(a5)
-; RV32IZCMP-NEXT:    lw a0, 124(a5)
-; RV32IZCMP-NEXT:    lw a1, 120(a5)
-; RV32IZCMP-NEXT:    lw a2, 116(a5)
-; RV32IZCMP-NEXT:    lw a3, 112(a5)
-; RV32IZCMP-NEXT:    sw a0, 124(a5)
-; RV32IZCMP-NEXT:    sw a1, 120(a5)
-; RV32IZCMP-NEXT:    sw a2, 116(a5)
-; RV32IZCMP-NEXT:    sw a3, 112(a5)
-; RV32IZCMP-NEXT:    sw a4, 108(a5)
-; RV32IZCMP-NEXT:    sw a7, 104(a5)
-; RV32IZCMP-NEXT:    sw s0, 100(a5)
-; RV32IZCMP-NEXT:    sw t0, 96(a5)
-; RV32IZCMP-NEXT:    sw t1, 92(a5)
-; RV32IZCMP-NEXT:    sw t2, 88(a5)
-; RV32IZCMP-NEXT:    sw t3, 84(a5)
-; RV32IZCMP-NEXT:    sw s1, 80(a5)
-; RV32IZCMP-NEXT:    sw ra, 76(a5)
-; RV32IZCMP-NEXT:    sw s11, 72(a5)
-; RV32IZCMP-NEXT:    sw s10, 68(a5)
-; RV32IZCMP-NEXT:    sw s9, 64(a5)
-; RV32IZCMP-NEXT:    sw s8, 60(a5)
-; RV32IZCMP-NEXT:    sw s7, 56(a5)
-; RV32IZCMP-NEXT:    sw s6, 52(a5)
-; RV32IZCMP-NEXT:    sw s5, 48(a5)
-; RV32IZCMP-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 20(a5)
-; RV32IZCMP-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 16(a5)
-; RV32IZCMP-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var+12)(a6)
-; RV32IZCMP-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var+8)(a6)
-; RV32IZCMP-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var+4)(a6)
-; RV32IZCMP-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var)(a6)
+; RV32IZCMP-NEXT:    lui a0, %hi(var)
+; RV32IZCMP-NEXT:    addi a0, a0, %lo(var)
+; RV32IZCMP-NEXT:    lw a1, 0(a0)
+; RV32IZCMP-NEXT:    sw a1, 28(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 4(a0)
+; RV32IZCMP-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 8(a0)
+; RV32IZCMP-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 12(a0)
+; RV32IZCMP-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 16(a0)
+; RV32IZCMP-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-NEXT:    lw s4, 44(a0)
+; RV32IZCMP-NEXT:    lw s5, 48(a0)
+; RV32IZCMP-NEXT:    lw s6, 52(a0)
+; RV32IZCMP-NEXT:    lw s7, 56(a0)
+; RV32IZCMP-NEXT:    lw s8, 60(a0)
+; RV32IZCMP-NEXT:    lw s9, 64(a0)
+; RV32IZCMP-NEXT:    lw s10, 68(a0)
+; RV32IZCMP-NEXT:    lw s11, 72(a0)
+; RV32IZCMP-NEXT:    lw ra, 76(a0)
+; RV32IZCMP-NEXT:    lw t2, 80(a0)
+; RV32IZCMP-NEXT:    lw s0, 84(a0)
+; RV32IZCMP-NEXT:    lw s1, 88(a0)
+; RV32IZCMP-NEXT:    lw t1, 92(a0)
+; RV32IZCMP-NEXT:    lw t0, 96(a0)
+; RV32IZCMP-NEXT:    lw a7, 100(a0)
+; RV32IZCMP-NEXT:    lw a6, 104(a0)
+; RV32IZCMP-NEXT:    lw a5, 108(a0)
+; RV32IZCMP-NEXT:    lw a1, 124(a0)
+; RV32IZCMP-NEXT:    lw a2, 120(a0)
+; RV32IZCMP-NEXT:    lw a3, 116(a0)
+; RV32IZCMP-NEXT:    lw a4, 112(a0)
+; RV32IZCMP-NEXT:    sw a1, 124(a0)
+; RV32IZCMP-NEXT:    sw a2, 120(a0)
+; RV32IZCMP-NEXT:    sw a3, 116(a0)
+; RV32IZCMP-NEXT:    sw a4, 112(a0)
+; RV32IZCMP-NEXT:    sw a5, 108(a0)
+; RV32IZCMP-NEXT:    sw a6, 104(a0)
+; RV32IZCMP-NEXT:    sw a7, 100(a0)
+; RV32IZCMP-NEXT:    sw t0, 96(a0)
+; RV32IZCMP-NEXT:    sw t1, 92(a0)
+; RV32IZCMP-NEXT:    sw s1, 88(a0)
+; RV32IZCMP-NEXT:    sw s0, 84(a0)
+; RV32IZCMP-NEXT:    sw t2, 80(a0)
+; RV32IZCMP-NEXT:    sw ra, 76(a0)
+; RV32IZCMP-NEXT:    sw s11, 72(a0)
+; RV32IZCMP-NEXT:    sw s10, 68(a0)
+; RV32IZCMP-NEXT:    sw s9, 64(a0)
+; RV32IZCMP-NEXT:    sw s8, 60(a0)
+; RV32IZCMP-NEXT:    sw s7, 56(a0)
+; RV32IZCMP-NEXT:    sw s6, 52(a0)
+; RV32IZCMP-NEXT:    sw s5, 48(a0)
+; RV32IZCMP-NEXT:    sw s4, 44(a0)
+; RV32IZCMP-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 16(a0)
+; RV32IZCMP-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 12(a0)
+; RV32IZCMP-NEXT:    lw a1, 20(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 8(a0)
+; RV32IZCMP-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 4(a0)
+; RV32IZCMP-NEXT:    lw a1, 28(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 0(a0)
 ; RV32IZCMP-NEXT:    cm.popret {ra, s0-s11}, 96
 ;
 ; RV32IZCMP-WITH-FP-LABEL: callee:
@@ -451,86 +443,84 @@ define void @callee() nounwind {
 ; RV32IZCMP-WITH-FP-NEXT:    sw s10, 32(sp) # 4-byte Folded Spill
 ; RV32IZCMP-WITH-FP-NEXT:    sw s11, 28(sp) # 4-byte Folded Spill
 ; RV32IZCMP-WITH-FP-NEXT:    addi s0, sp, 80
-; RV32IZCMP-WITH-FP-NEXT:    lui a6, %hi(var)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -56(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+4)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -60(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+8)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -64(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+12)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -68(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    addi a5, a6, %lo(var)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, 16(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -72(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, 20(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -76(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, 24(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -80(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s5, 48(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s6, 52(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s7, 56(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s8, 60(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s9, 64(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s10, 68(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s11, 72(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw ra, 76(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw t4, 80(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw t3, 84(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw t2, 88(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw s1, 92(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw t1, 96(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw t0, 100(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a7, 104(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a4, 108(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, 124(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a1, 120(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a2, 116(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a3, 112(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, 124(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a1, 120(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a2, 116(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a3, 112(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a4, 108(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw a7, 104(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t0, 100(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t1, 96(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s1, 92(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t2, 88(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t3, 84(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t4, 80(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw ra, 76(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s11, 72(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s10, 68(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s9, 64(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s8, 60(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s7, 56(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s6, 52(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s5, 48(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-WITH-FP-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -80(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, 24(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -76(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, 20(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -72(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, 16(a5)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -68(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+12)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -64(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+8)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -60(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+4)(a6)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -56(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var)(a6)
+; RV32IZCMP-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV32IZCMP-WITH-FP-NEXT:    addi a0, a0, %lo(var)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 0(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, -56(s0) # 4-byte Folded Spill
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 4(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, -60(s0) # 4-byte Folded Spill
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 8(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, -64(s0) # 4-byte Folded Spill
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 12(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, -68(s0) # 4-byte Folded Spill
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 16(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, -72(s0) # 4-byte Folded Spill
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 20(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, -76(s0) # 4-byte Folded Spill
+; RV32IZCMP-WITH-FP-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s4, 44(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s5, 48(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s6, 52(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s7, 56(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s8, 60(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s9, 64(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s10, 68(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s11, 72(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw ra, 76(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw s1, 80(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw t3, 84(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw t2, 88(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw t1, 92(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw t0, 96(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a7, 100(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a6, 104(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a5, 108(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, 124(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a2, 120(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a3, 116(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a4, 112(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 124(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a2, 120(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a3, 116(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a4, 112(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a5, 108(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a6, 104(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw a7, 100(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t0, 96(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t1, 92(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t2, 88(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t3, 84(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s1, 80(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw ra, 76(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s11, 72(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s10, 68(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s9, 64(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s8, 60(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s7, 56(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s6, 52(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s5, 48(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s4, 44(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-WITH-FP-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, -76(s0) # 4-byte Folded Reload
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 20(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, -72(s0) # 4-byte Folded Reload
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 16(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, -68(s0) # 4-byte Folded Reload
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 12(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, -64(s0) # 4-byte Folded Reload
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 8(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, -60(s0) # 4-byte Folded Reload
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 4(a0)
+; RV32IZCMP-WITH-FP-NEXT:    lw a1, -56(s0) # 4-byte Folded Reload
+; RV32IZCMP-WITH-FP-NEXT:    sw a1, 0(a0)
 ; RV32IZCMP-WITH-FP-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32IZCMP-WITH-FP-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
 ; RV32IZCMP-WITH-FP-NEXT:    lw s1, 68(sp) # 4-byte Folded Reload
@@ -549,202 +539,198 @@ define void @callee() nounwind {
 ;
 ; RV64I-LABEL: callee:
 ; RV64I:       # %bb.0:
-; RV64I-NEXT:    addi sp, sp, -160
-; RV64I-NEXT:    sd ra, 152(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s0, 144(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s1, 136(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s2, 128(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s3, 120(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s4, 112(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s5, 104(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s6, 96(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s7, 88(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s8, 80(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s9, 72(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s10, 64(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s11, 56(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lui a6, %hi(var)
-; RV64I-NEXT:    lw a0, %lo(var)(a6)
-; RV64I-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var+4)(a6)
-; RV64I-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var+8)(a6)
-; RV64I-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var+12)(a6)
-; RV64I-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    addi a5, a6, %lo(var)
-; RV64I-NEXT:    lw a0, 16(a5)
-; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 20(a5)
-; RV64I-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw t0, 24(a5)
-; RV64I-NEXT:    lw t1, 28(a5)
-; RV64I-NEXT:    lw t2, 32(a5)
-; RV64I-NEXT:    lw t3, 36(a5)
-; RV64I-NEXT:    lw t4, 40(a5)
-; RV64I-NEXT:    lw t5, 44(a5)
-; RV64I-NEXT:    lw t6, 48(a5)
-; RV64I-NEXT:    lw s0, 52(a5)
-; RV64I-NEXT:    lw s1, 56(a5)
-; RV64I-NEXT:    lw s2, 60(a5)
-; RV64I-NEXT:    lw s3, 64(a5)
-; RV64I-NEXT:    lw s4, 68(a5)
-; RV64I-NEXT:    lw s5, 72(a5)
-; RV64I-NEXT:    lw s6, 76(a5)
-; RV64I-NEXT:    lw s7, 80(a5)
-; RV64I-NEXT:    lw s8, 84(a5)
-; RV64I-NEXT:    lw s9, 88(a5)
-; RV64I-NEXT:    lw s10, 92(a5)
-; RV64I-NEXT:    lw s11, 96(a5)
-; RV64I-NEXT:    lw ra, 100(a5)
-; RV64I-NEXT:    lw a7, 104(a5)
-; RV64I-NEXT:    lw a4, 108(a5)
-; RV64I-NEXT:    lw a0, 124(a5)
-; RV64I-NEXT:    lw a1, 120(a5)
-; RV64I-NEXT:    lw a2, 116(a5)
-; RV64I-NEXT:    lw a3, 112(a5)
-; RV64I-NEXT:    sw a0, 124(a5)
-; RV64I-NEXT:    sw a1, 120(a5)
-; RV64I-NEXT:    sw a2, 116(a5)
-; RV64I-NEXT:    sw a3, 112(a5)
-; RV64I-NEXT:    sw a4, 108(a5)
-; RV64I-NEXT:    sw a7, 104(a5)
-; RV64I-NEXT:    sw ra, 100(a5)
-; RV64I-NEXT:    sw s11, 96(a5)
-; RV64I-NEXT:    sw s10, 92(a5)
-; RV64I-NEXT:    sw s9, 88(a5)
-; RV64I-NEXT:    sw s8, 84(a5)
-; RV64I-NEXT:    sw s7, 80(a5)
-; RV64I-NEXT:    sw s6, 76(a5)
-; RV64I-NEXT:    sw s5, 72(a5)
-; RV64I-NEXT:    sw s4, 68(a5)
-; RV64I-NEXT:    sw s3, 64(a5)
-; RV64I-NEXT:    sw s2, 60(a5)
-; RV64I-NEXT:    sw s1, 56(a5)
-; RV64I-NEXT:    sw s0, 52(a5)
-; RV64I-NEXT:    sw t6, 48(a5)
-; RV64I-NEXT:    sw t5, 44(a5)
-; RV64I-NEXT:    sw t4, 40(a5)
-; RV64I-NEXT:    sw t3, 36(a5)
-; RV64I-NEXT:    sw t2, 32(a5)
-; RV64I-NEXT:    sw t1, 28(a5)
-; RV64I-NEXT:    sw t0, 24(a5)
-; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 20(a5)
-; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 16(a5)
-; RV64I-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var+12)(a6)
-; RV64I-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var+8)(a6)
-; RV64I-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var+4)(a6)
-; RV64I-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var)(a6)
-; RV64I-NEXT:    ld ra, 152(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s0, 144(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s1, 136(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s2, 128(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s3, 120(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s4, 112(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s5, 104(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s6, 96(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s7, 88(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s8, 80(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s9, 72(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s10, 64(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s11, 56(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    addi sp, sp, 160
+; RV64I-NEXT:    addi sp, sp, -144
+; RV64I-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 120(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 112(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 104(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 96(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s5, 88(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s6, 80(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s7, 72(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s8, 64(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s9, 56(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s10, 48(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s11, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var)
+; RV64I-NEXT:    addi a0, a0, %lo(var)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 4(a0)
+; RV64I-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 8(a0)
+; RV64I-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 12(a0)
+; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 16(a0)
+; RV64I-NEXT:    sd a1, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 56(a0)
+; RV64I-NEXT:    lw s1, 60(a0)
+; RV64I-NEXT:    lw s2, 64(a0)
+; RV64I-NEXT:    lw s3, 68(a0)
+; RV64I-NEXT:    lw s4, 72(a0)
+; RV64I-NEXT:    lw s5, 76(a0)
+; RV64I-NEXT:    lw s6, 80(a0)
+; RV64I-NEXT:    lw s7, 84(a0)
+; RV64I-NEXT:    lw s8, 88(a0)
+; RV64I-NEXT:    lw s9, 92(a0)
+; RV64I-NEXT:    lw s10, 96(a0)
+; RV64I-NEXT:    lw s11, 100(a0)
+; RV64I-NEXT:    lw ra, 104(a0)
+; RV64I-NEXT:    lw a5, 108(a0)
+; RV64I-NEXT:    lw a1, 124(a0)
+; RV64I-NEXT:    lw a2, 120(a0)
+; RV64I-NEXT:    lw a3, 116(a0)
+; RV64I-NEXT:    lw a4, 112(a0)
+; RV64I-NEXT:    sw a1, 124(a0)
+; RV64I-NEXT:    sw a2, 120(a0)
+; RV64I-NEXT:    sw a3, 116(a0)
+; RV64I-NEXT:    sw a4, 112(a0)
+; RV64I-NEXT:    sw a5, 108(a0)
+; RV64I-NEXT:    sw ra, 104(a0)
+; RV64I-NEXT:    sw s11, 100(a0)
+; RV64I-NEXT:    sw s10, 96(a0)
+; RV64I-NEXT:    sw s9, 92(a0)
+; RV64I-NEXT:    sw s8, 88(a0)
+; RV64I-NEXT:    sw s7, 84(a0)
+; RV64I-NEXT:    sw s6, 80(a0)
+; RV64I-NEXT:    sw s5, 76(a0)
+; RV64I-NEXT:    sw s4, 72(a0)
+; RV64I-NEXT:    sw s3, 68(a0)
+; RV64I-NEXT:    sw s2, 64(a0)
+; RV64I-NEXT:    sw s1, 60(a0)
+; RV64I-NEXT:    sw s0, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 16(a0)
+; RV64I-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 12(a0)
+; RV64I-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 8(a0)
+; RV64I-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 4(a0)
+; RV64I-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 120(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 112(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 104(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 96(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s5, 88(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s6, 80(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s7, 72(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s8, 64(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s9, 56(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s10, 48(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s11, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 144
 ; RV64I-NEXT:    ret
 ;
 ; RV64I-LP64E-LABEL: callee:
 ; RV64I-LP64E:       # %bb.0:
-; RV64I-LP64E-NEXT:    addi sp, sp, -72
-; RV64I-LP64E-NEXT:    sd ra, 64(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    sd s0, 56(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    sd s1, 48(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lui a6, %hi(var)
-; RV64I-LP64E-NEXT:    lw a0, %lo(var)(a6)
-; RV64I-LP64E-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, %lo(var+4)(a6)
-; RV64I-LP64E-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, %lo(var+8)(a6)
-; RV64I-LP64E-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, %lo(var+12)(a6)
-; RV64I-LP64E-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    addi a5, a6, %lo(var)
-; RV64I-LP64E-NEXT:    lw a0, 16(a5)
-; RV64I-LP64E-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 20(a5)
-; RV64I-LP64E-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw t0, 24(a5)
-; RV64I-LP64E-NEXT:    lw t1, 28(a5)
-; RV64I-LP64E-NEXT:    lw t2, 32(a5)
-; RV64I-LP64E-NEXT:    lw t3, 36(a5)
-; RV64I-LP64E-NEXT:    lw t4, 40(a5)
-; RV64I-LP64E-NEXT:    lw t5, 44(a5)
-; RV64I-LP64E-NEXT:    lw t6, 48(a5)
-; RV64I-LP64E-NEXT:    lw s2, 52(a5)
-; RV64I-LP64E-NEXT:    lw s3, 56(a5)
-; RV64I-LP64E-NEXT:    lw s4, 60(a5)
-; RV64I-LP64E-NEXT:    lw s5, 64(a5)
-; RV64I-LP64E-NEXT:    lw s6, 68(a5)
-; RV64I-LP64E-NEXT:    lw s7, 72(a5)
-; RV64I-LP64E-NEXT:    lw s8, 76(a5)
-; RV64I-LP64E-NEXT:    lw s9, 80(a5)
-; RV64I-LP64E-NEXT:    lw s10, 84(a5)
-; RV64I-LP64E-NEXT:    lw s11, 88(a5)
-; RV64I-LP64E-NEXT:    lw s0, 92(a5)
-; RV64I-LP64E-NEXT:    lw s1, 96(a5)
-; RV64I-LP64E-NEXT:    lw ra, 100(a5)
-; RV64I-LP64E-NEXT:    lw a7, 104(a5)
-; RV64I-LP64E-NEXT:    lw a4, 108(a5)
-; RV64I-LP64E-NEXT:    lw a0, 124(a5)
-; RV64I-LP64E-NEXT:    lw a1, 120(a5)
-; RV64I-LP64E-NEXT:    lw a2, 116(a5)
-; RV64I-LP64E-NEXT:    lw a3, 112(a5)
-; RV64I-LP64E-NEXT:    sw a0, 124(a5)
-; RV64I-LP64E-NEXT:    sw a1, 120(a5)
-; RV64I-LP64E-NEXT:    sw a2, 116(a5)
-; RV64I-LP64E-NEXT:    sw a3, 112(a5)
-; RV64I-LP64E-NEXT:    sw a4, 108(a5)
-; RV64I-LP64E-NEXT:    sw a7, 104(a5)
-; RV64I-LP64E-NEXT:    sw ra, 100(a5)
-; RV64I-LP64E-NEXT:    sw s1, 96(a5)
-; RV64I-LP64E-NEXT:    sw s0, 92(a5)
-; RV64I-LP64E-NEXT:    sw s11, 88(a5)
-; RV64I-LP64E-NEXT:    sw s10, 84(a5)
-; RV64I-LP64E-NEXT:    sw s9, 80(a5)
-; RV64I-LP64E-NEXT:    sw s8, 76(a5)
-; RV64I-LP64E-NEXT:    sw s7, 72(a5)
-; RV64I-LP64E-NEXT:    sw s6, 68(a5)
-; RV64I-LP64E-NEXT:    sw s5, 64(a5)
-; RV64I-LP64E-NEXT:    sw s4, 60(a5)
-; RV64I-LP64E-NEXT:    sw s3, 56(a5)
-; RV64I-LP64E-NEXT:    sw s2, 52(a5)
-; RV64I-LP64E-NEXT:    sw t6, 48(a5)
-; RV64I-LP64E-NEXT:    sw t5, 44(a5)
-; RV64I-LP64E-NEXT:    sw t4, 40(a5)
-; RV64I-LP64E-NEXT:    sw t3, 36(a5)
-; RV64I-LP64E-NEXT:    sw t2, 32(a5)
-; RV64I-LP64E-NEXT:    sw t1, 28(a5)
-; RV64I-LP64E-NEXT:    sw t0, 24(a5)
-; RV64I-LP64E-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 20(a5)
-; RV64I-LP64E-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 16(a5)
-; RV64I-LP64E-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var+12)(a6)
-; RV64I-LP64E-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var+8)(a6)
-; RV64I-LP64E-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var+4)(a6)
-; RV64I-LP64E-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var)(a6)
-; RV64I-LP64E-NEXT:    ld ra, 64(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    ld s0, 56(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    ld s1, 48(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    addi sp, sp, 72
+; RV64I-LP64E-NEXT:    addi sp, sp, -64
+; RV64I-LP64E-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lui a0, %hi(var)
+; RV64I-LP64E-NEXT:    addi a0, a0, %lo(var)
+; RV64I-LP64E-NEXT:    lw a1, 0(a0)
+; RV64I-LP64E-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a1, 4(a0)
+; RV64I-LP64E-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a1, 8(a0)
+; RV64I-LP64E-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a1, 12(a0)
+; RV64I-LP64E-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a1, 16(a0)
+; RV64I-LP64E-NEXT:    sd a1, 0(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a6, 20(a0)
+; RV64I-LP64E-NEXT:    lw a7, 24(a0)
+; RV64I-LP64E-NEXT:    lw t0, 28(a0)
+; RV64I-LP64E-NEXT:    lw t1, 32(a0)
+; RV64I-LP64E-NEXT:    lw t2, 36(a0)
+; RV64I-LP64E-NEXT:    lw t3, 40(a0)
+; RV64I-LP64E-NEXT:    lw t4, 44(a0)
+; RV64I-LP64E-NEXT:    lw t5, 48(a0)
+; RV64I-LP64E-NEXT:    lw t6, 52(a0)
+; RV64I-LP64E-NEXT:    lw s2, 56(a0)
+; RV64I-LP64E-NEXT:    lw s3, 60(a0)
+; RV64I-LP64E-NEXT:    lw s4, 64(a0)
+; RV64I-LP64E-NEXT:    lw s5, 68(a0)
+; RV64I-LP64E-NEXT:    lw s6, 72(a0)
+; RV64I-LP64E-NEXT:    lw s7, 76(a0)
+; RV64I-LP64E-NEXT:    lw s8, 80(a0)
+; RV64I-LP64E-NEXT:    lw s9, 84(a0)
+; RV64I-LP64E-NEXT:    lw s10, 88(a0)
+; RV64I-LP64E-NEXT:    lw s11, 92(a0)
+; RV64I-LP64E-NEXT:    lw s0, 96(a0)
+; RV64I-LP64E-NEXT:    lw s1, 100(a0)
+; RV64I-LP64E-NEXT:    lw ra, 104(a0)
+; RV64I-LP64E-NEXT:    lw a5, 108(a0)
+; RV64I-LP64E-NEXT:    lw a1, 124(a0)
+; RV64I-LP64E-NEXT:    lw a2, 120(a0)
+; RV64I-LP64E-NEXT:    lw a3, 116(a0)
+; RV64I-LP64E-NEXT:    lw a4, 112(a0)
+; RV64I-LP64E-NEXT:    sw a1, 124(a0)
+; RV64I-LP64E-NEXT:    sw a2, 120(a0)
+; RV64I-LP64E-NEXT:    sw a3, 116(a0)
+; RV64I-LP64E-NEXT:    sw a4, 112(a0)
+; RV64I-LP64E-NEXT:    sw a5, 108(a0)
+; RV64I-LP64E-NEXT:    sw ra, 104(a0)
+; RV64I-LP64E-NEXT:    sw s1, 100(a0)
+; RV64I-LP64E-NEXT:    sw s0, 96(a0)
+; RV64I-LP64E-NEXT:    sw s11, 92(a0)
+; RV64I-LP64E-NEXT:    sw s10, 88(a0)
+; RV64I-LP64E-NEXT:    sw s9, 84(a0)
+; RV64I-LP64E-NEXT:    sw s8, 80(a0)
+; RV64I-LP64E-NEXT:    sw s7, 76(a0)
+; RV64I-LP64E-NEXT:    sw s6, 72(a0)
+; RV64I-LP64E-NEXT:    sw s5, 68(a0)
+; RV64I-LP64E-NEXT:    sw s4, 64(a0)
+; RV64I-LP64E-NEXT:    sw s3, 60(a0)
+; RV64I-LP64E-NEXT:    sw s2, 56(a0)
+; RV64I-LP64E-NEXT:    sw t6, 52(a0)
+; RV64I-LP64E-NEXT:    sw t5, 48(a0)
+; RV64I-LP64E-NEXT:    sw t4, 44(a0)
+; RV64I-LP64E-NEXT:    sw t3, 40(a0)
+; RV64I-LP64E-NEXT:    sw t2, 36(a0)
+; RV64I-LP64E-NEXT:    sw t1, 32(a0)
+; RV64I-LP64E-NEXT:    sw t0, 28(a0)
+; RV64I-LP64E-NEXT:    sw a7, 24(a0)
+; RV64I-LP64E-NEXT:    sw a6, 20(a0)
+; RV64I-LP64E-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    sw a1, 16(a0)
+; RV64I-LP64E-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    sw a1, 12(a0)
+; RV64I-LP64E-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    sw a1, 8(a0)
+; RV64I-LP64E-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    sw a1, 4(a0)
+; RV64I-LP64E-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    sw a1, 0(a0)
+; RV64I-LP64E-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; RV64I-LP64E-NEXT:    addi sp, sp, 64
 ; RV64I-LP64E-NEXT:    ret
 ;
 ; RV64I-WITH-FP-LABEL: callee:
@@ -764,86 +750,84 @@ define void @callee() nounwind {
 ; RV64I-WITH-FP-NEXT:    sd s10, 64(sp) # 8-byte Folded Spill
 ; RV64I-WITH-FP-NEXT:    sd s11, 56(sp) # 8-byte Folded Spill
 ; RV64I-WITH-FP-NEXT:    addi s0, sp, 160
-; RV64I-WITH-FP-NEXT:    lui a6, %hi(var)
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var)(a6)
-; RV64I-WITH-FP-NEXT:    sd a0, -112(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var+4)(a6)
-; RV64I-WITH-FP-NEXT:    sd a0, -120(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var+8)(a6)
-; RV64I-WITH-FP-NEXT:    sd a0, -128(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var+12)(a6)
-; RV64I-WITH-FP-NEXT:    sd a0, -136(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    addi a5, a6, %lo(var)
-; RV64I-WITH-FP-NEXT:    lw a0, 16(a5)
-; RV64I-WITH-FP-NEXT:    sd a0, -144(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 20(a5)
-; RV64I-WITH-FP-NEXT:    sd a0, -152(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 24(a5)
-; RV64I-WITH-FP-NEXT:    sd a0, -160(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw t1, 28(a5)
-; RV64I-WITH-FP-NEXT:    lw t2, 32(a5)
-; RV64I-WITH-FP-NEXT:    lw t3, 36(a5)
-; RV64I-WITH-FP-NEXT:    lw t4, 40(a5)
-; RV64I-WITH-FP-NEXT:    lw t5, 44(a5)
-; RV64I-WITH-FP-NEXT:    lw t6, 48(a5)
-; RV64I-WITH-FP-NEXT:    lw s1, 52(a5)
-; RV64I-WITH-FP-NEXT:    lw s2, 56(a5)
-; RV64I-WITH-FP-NEXT:    lw s3, 60(a5)
-; RV64I-WITH-FP-NEXT:    lw s4, 64(a5)
-; RV64I-WITH-FP-NEXT:    lw s5, 68(a5)
-; RV64I-WITH-FP-NEXT:    lw s6, 72(a5)
-; RV64I-WITH-FP-NEXT:    lw s7, 76(a5)
-; RV64I-WITH-FP-NEXT:    lw s8, 80(a5)
-; RV64I-WITH-FP-NEXT:    lw s9, 84(a5)
-; RV64I-WITH-FP-NEXT:    lw s10, 88(a5)
-; RV64I-WITH-FP-NEXT:    lw s11, 92(a5)
-; RV64I-WITH-FP-NEXT:    lw ra, 96(a5)
-; RV64I-WITH-FP-NEXT:    lw t0, 100(a5)
-; RV64I-WITH-FP-NEXT:    lw a7, 104(a5)
-; RV64I-WITH-FP-NEXT:    lw a4, 108(a5)
-; RV64I-WITH-FP-NEXT:    lw a0, 124(a5)
-; RV64I-WITH-FP-NEXT:    lw a1, 120(a5)
-; RV64I-WITH-FP-NEXT:    lw a2, 116(a5)
-; RV64I-WITH-FP-NEXT:    lw a3, 112(a5)
-; RV64I-WITH-FP-NEXT:    sw a0, 124(a5)
-; RV64I-WITH-FP-NEXT:    sw a1, 120(a5)
-; RV64I-WITH-FP-NEXT:    sw a2, 116(a5)
-; RV64I-WITH-FP-NEXT:    sw a3, 112(a5)
-; RV64I-WITH-FP-NEXT:    sw a4, 108(a5)
-; RV64I-WITH-FP-NEXT:    sw a7, 104(a5)
-; RV64I-WITH-FP-NEXT:    sw t0, 100(a5)
-; RV64I-WITH-FP-NEXT:    sw ra, 96(a5)
-; RV64I-WITH-FP-NEXT:    sw s11, 92(a5)
-; RV64I-WITH-FP-NEXT:    sw s10, 88(a5)
-; RV64I-WITH-FP-NEXT:    sw s9, 84(a5)
-; RV64I-WITH-FP-NEXT:    sw s8, 80(a5)
-; RV64I-WITH-FP-NEXT:    sw s7, 76(a5)
-; RV64I-WITH-FP-NEXT:    sw s6, 72(a5)
-; RV64I-WITH-FP-NEXT:    sw s5, 68(a5)
-; RV64I-WITH-FP-NEXT:    sw s4, 64(a5)
-; RV64I-WITH-FP-NEXT:    sw s3, 60(a5)
-; RV64I-WITH-FP-NEXT:    sw s2, 56(a5)
-; RV64I-WITH-FP-NEXT:    sw s1, 52(a5)
-; RV64I-WITH-FP-NEXT:    sw t6, 48(a5)
-; RV64I-WITH-FP-NEXT:    sw t5, 44(a5)
-; RV64I-WITH-FP-NEXT:    sw t4, 40(a5)
-; RV64I-WITH-FP-NEXT:    sw t3, 36(a5)
-; RV64I-WITH-FP-NEXT:    sw t2, 32(a5)
-; RV64I-WITH-FP-NEXT:    sw t1, 28(a5)
-; RV64I-WITH-FP-NEXT:    ld a0, -160(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 24(a5)
-; RV64I-WITH-FP-NEXT:    ld a0, -152(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 20(a5)
-; RV64I-WITH-FP-NEXT:    ld a0, -144(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 16(a5)
-; RV64I-WITH-FP-NEXT:    ld a0, -136(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var+12)(a6)
-; RV64I-WITH-FP-NEXT:    ld a0, -128(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var+8)(a6)
-; RV64I-WITH-FP-NEXT:    ld a0, -120(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var+4)(a6)
-; RV64I-WITH-FP-NEXT:    ld a0, -112(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var)(a6)
+; RV64I-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV64I-WITH-FP-NEXT:    addi a0, a0, %lo(var)
+; RV64I-WITH-FP-NEXT:    lw a1, 0(a0)
+; RV64I-WITH-FP-NEXT:    sd a1, -112(s0) # 8-byte Folded Spill
+; RV64I-WITH-FP-NEXT:    lw a1, 4(a0)
+; RV64I-WITH-FP-NEXT:    sd a1, -120(s0) # 8-byte Folded Spill
+; RV64I-WITH-FP-NEXT:    lw a1, 8(a0)
+; RV64I-WITH-FP-NEXT:    sd a1, -128(s0) # 8-byte Folded Spill
+; RV64I-WITH-FP-NEXT:    lw a1, 12(a0)
+; RV64I-WITH-FP-NEXT:    sd a1, -136(s0) # 8-byte Folded Spill
+; RV64I-WITH-FP-NEXT:    lw a1, 16(a0)
+; RV64I-WITH-FP-NEXT:    sd a1, -144(s0) # 8-byte Folded Spill
+; RV64I-WITH-FP-NEXT:    lw a1, 20(a0)
+; RV64I-WITH-FP-NEXT:    sd a1, -152(s0) # 8-byte Folded Spill
+; RV64I-WITH-FP-NEXT:    lw a7, 24(a0)
+; RV64I-WITH-FP-NEXT:    lw t0, 28(a0)
+; RV64I-WITH-FP-NEXT:    lw t1, 32(a0)
+; RV64I-WITH-FP-NEXT:    lw t2, 36(a0)
+; RV64I-WITH-FP-NEXT:    lw t3, 40(a0)
+; RV64I-WITH-FP-NEXT:    lw t4, 44(a0)
+; RV64I-WITH-FP-NEXT:    lw t5, 48(a0)
+; RV64I-WITH-FP-NEXT:    lw t6, 52(a0)
+; RV64I-WITH-FP-NEXT:    lw s1, 56(a0)
+; RV64I-WITH-FP-NEXT:    lw s2, 60(a0)
+; RV64I-WITH-FP-NEXT:    lw s3, 64(a0)
+; RV64I-WITH-FP-NEXT:    lw s4, 68(a0)
+; RV64I-WITH-FP-NEXT:    lw s5, 72(a0)
+; RV64I-WITH-FP-NEXT:    lw s6, 76(a0)
+; RV64I-WITH-FP-NEXT:    lw s7, 80(a0)
+; RV64I-WITH-FP-NEXT:    lw s8, 84(a0)
+; RV64I-WITH-FP-NEXT:    lw s9, 88(a0)
+; RV64I-WITH-FP-NEXT:    lw s10, 92(a0)
+; RV64I-WITH-FP-NEXT:    lw s11, 96(a0)
+; RV64I-WITH-FP-NEXT:    lw ra, 100(a0)
+; RV64I-WITH-FP-NEXT:    lw a6, 104(a0)
+; RV64I-WITH-FP-NEXT:    lw a5, 108(a0)
+; RV64I-WITH-FP-NEXT:    lw a1, 124(a0)
+; RV64I-WITH-FP-NEXT:    lw a2, 120(a0)
+; RV64I-WITH-FP-NEXT:    lw a3, 116(a0)
+; RV64I-WITH-FP-NEXT:    lw a4, 112(a0)
+; RV64I-WITH-FP-NEXT:    sw a1, 124(a0)
+; RV64I-WITH-FP-NEXT:    sw a2, 120(a0)
+; RV64I-WITH-FP-NEXT:    sw a3, 116(a0)
+; RV64I-WITH-FP-NEXT:    sw a4, 112(a0)
+; RV64I-WITH-FP-NEXT:    sw a5, 108(a0)
+; RV64I-WITH-FP-NEXT:    sw a6, 104(a0)
+; RV64I-WITH-FP-NEXT:    sw ra, 100(a0)
+; RV64I-WITH-FP-NEXT:    sw s11, 96(a0)
+; RV64I-WITH-FP-NEXT:    sw s10, 92(a0)
+; RV64I-WITH-FP-NEXT:    sw s9, 88(a0)
+; RV64I-WITH-FP-NEXT:    sw s8, 84(a0)
+; RV64I-WITH-FP-NEXT:    sw s7, 80(a0)
+; RV64I-WITH-FP-NEXT:    sw s6, 76(a0)
+; RV64I-WITH-FP-NEXT:    sw s5, 72(a0)
+; RV64I-WITH-FP-NEXT:    sw s4, 68(a0)
+; RV64I-WITH-FP-NEXT:    sw s3, 64(a0)
+; RV64I-WITH-FP-NEXT:    sw s2, 60(a0)
+; RV64I-WITH-FP-NEXT:    sw s1, 56(a0)
+; RV64I-WITH-FP-NEXT:    sw t6, 52(a0)
+; RV64I-WITH-FP-NEXT:    sw t5, 48(a0)
+; RV64I-WITH-FP-NEXT:    sw t4, 44(a0)
+; RV64I-WITH-FP-NEXT:    sw t3, 40(a0)
+; RV64I-WITH-FP-NEXT:    sw t2, 36(a0)
+; RV64I-WITH-FP-NEXT:    sw t1, 32(a0)
+; RV64I-WITH-FP-NEXT:    sw t0, 28(a0)
+; RV64I-WITH-FP-NEXT:    sw a7, 24(a0)
+; RV64I-WITH-FP-NEXT:    ld a1, -152(s0) # 8-byte Folded Reload
+; RV64I-WITH-FP-NEXT:    sw a1, 20(a0)
+; RV64I-WITH-FP-NEXT:    ld a1, -144(s0) # 8-byte Folded Reload
+; RV64I-WITH-FP-NEXT:    sw a1, 16(a0)
+; RV64I-WITH-FP-NEXT:    ld a1, -136(s0) # 8-byte Folded Reload
+; RV64I-WITH-FP-NEXT:    sw a1, 12(a0)
+; RV64I-WITH-FP-NEXT:    ld a1, -128(s0) # 8-byte Folded Reload
+; RV64I-WITH-FP-NEXT:    sw a1, 8(a0)
+; RV64I-WITH-FP-NEXT:    ld a1, -120(s0) # 8-byte Folded Reload
+; RV64I-WITH-FP-NEXT:    sw a1, 4(a0)
+; RV64I-WITH-FP-NEXT:    ld a1, -112(s0) # 8-byte Folded Reload
+; RV64I-WITH-FP-NEXT:    sw a1, 0(a0)
 ; RV64I-WITH-FP-NEXT:    ld ra, 152(sp) # 8-byte Folded Reload
 ; RV64I-WITH-FP-NEXT:    ld s0, 144(sp) # 8-byte Folded Reload
 ; RV64I-WITH-FP-NEXT:    ld s1, 136(sp) # 8-byte Folded Reload
@@ -863,84 +847,82 @@ define void @callee() nounwind {
 ; RV64IZCMP-LABEL: callee:
 ; RV64IZCMP:       # %bb.0:
 ; RV64IZCMP-NEXT:    cm.push {ra, s0-s11}, -160
-; RV64IZCMP-NEXT:    lui a6, %hi(var)
-; RV64IZCMP-NEXT:    lw a0, %lo(var)(a6)
-; RV64IZCMP-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var+4)(a6)
-; RV64IZCMP-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var+8)(a6)
-; RV64IZCMP-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var+12)(a6)
-; RV64IZCMP-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    addi a5, a6, %lo(var)
-; RV64IZCMP-NEXT:    lw a0, 16(a5)
-; RV64IZCMP-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 20(a5)
-; RV64IZCMP-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-NEXT:    lw s5, 48(a5)
-; RV64IZCMP-NEXT:    lw s6, 52(a5)
-; RV64IZCMP-NEXT:    lw s7, 56(a5)
-; RV64IZCMP-NEXT:    lw s8, 60(a5)
-; RV64IZCMP-NEXT:    lw s9, 64(a5)
-; RV64IZCMP-NEXT:    lw s10, 68(a5)
-; RV64IZCMP-NEXT:    lw s11, 72(a5)
-; RV64IZCMP-NEXT:    lw ra, 76(a5)
-; RV64IZCMP-NEXT:    lw s1, 80(a5)
-; RV64IZCMP-NEXT:    lw t3, 84(a5)
-; RV64IZCMP-NEXT:    lw t2, 88(a5)
-; RV64IZCMP-NEXT:    lw t1, 92(a5)
-; RV64IZCMP-NEXT:    lw t0, 96(a5)
-; RV64IZCMP-NEXT:    lw s0, 100(a5)
-; RV64IZCMP-NEXT:    lw a7, 104(a5)
-; RV64IZCMP-NEXT:    lw a4, 108(a5)
-; RV64IZCMP-NEXT:    lw a0, 124(a5)
-; RV64IZCMP-NEXT:    lw a1, 120(a5)
-; RV64IZCMP-NEXT:    lw a2, 116(a5)
-; RV64IZCMP-NEXT:    lw a3, 112(a5)
-; RV64IZCMP-NEXT:    sw a0, 124(a5)
-; RV64IZCMP-NEXT:    sw a1, 120(a5)
-; RV64IZCMP-NEXT:    sw a2, 116(a5)
-; RV64IZCMP-NEXT:    sw a3, 112(a5)
-; RV64IZCMP-NEXT:    sw a4, 108(a5)
-; RV64IZCMP-NEXT:    sw a7, 104(a5)
-; RV64IZCMP-NEXT:    sw s0, 100(a5)
-; RV64IZCMP-NEXT:    sw t0, 96(a5)
-; RV64IZCMP-NEXT:    sw t1, 92(a5)
-; RV64IZCMP-NEXT:    sw t2, 88(a5)
-; RV64IZCMP-NEXT:    sw t3, 84(a5)
-; RV64IZCMP-NEXT:    sw s1, 80(a5)
-; RV64IZCMP-NEXT:    sw ra, 76(a5)
-; RV64IZCMP-NEXT:    sw s11, 72(a5)
-; RV64IZCMP-NEXT:    sw s10, 68(a5)
-; RV64IZCMP-NEXT:    sw s9, 64(a5)
-; RV64IZCMP-NEXT:    sw s8, 60(a5)
-; RV64IZCMP-NEXT:    sw s7, 56(a5)
-; RV64IZCMP-NEXT:    sw s6, 52(a5)
-; RV64IZCMP-NEXT:    sw s5, 48(a5)
-; RV64IZCMP-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 20(a5)
-; RV64IZCMP-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 16(a5)
-; RV64IZCMP-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var+12)(a6)
-; RV64IZCMP-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var+8)(a6)
-; RV64IZCMP-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var+4)(a6)
-; RV64IZCMP-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var)(a6)
+; RV64IZCMP-NEXT:    lui a0, %hi(var)
+; RV64IZCMP-NEXT:    addi a0, a0, %lo(var)
+; RV64IZCMP-NEXT:    lw a1, 0(a0)
+; RV64IZCMP-NEXT:    sd a1, 40(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 4(a0)
+; RV64IZCMP-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 8(a0)
+; RV64IZCMP-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 12(a0)
+; RV64IZCMP-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 16(a0)
+; RV64IZCMP-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-NEXT:    lw s4, 44(a0)
+; RV64IZCMP-NEXT:    lw s5, 48(a0)
+; RV64IZCMP-NEXT:    lw s6, 52(a0)
+; RV64IZCMP-NEXT:    lw s7, 56(a0)
+; RV64IZCMP-NEXT:    lw s8, 60(a0)
+; RV64IZCMP-NEXT:    lw s9, 64(a0)
+; RV64IZCMP-NEXT:    lw s10, 68(a0)
+; RV64IZCMP-NEXT:    lw s11, 72(a0)
+; RV64IZCMP-NEXT:    lw ra, 76(a0)
+; RV64IZCMP-NEXT:    lw t2, 80(a0)
+; RV64IZCMP-NEXT:    lw s0, 84(a0)
+; RV64IZCMP-NEXT:    lw s1, 88(a0)
+; RV64IZCMP-NEXT:    lw t1, 92(a0)
+; RV64IZCMP-NEXT:    lw t0, 96(a0)
+; RV64IZCMP-NEXT:    lw a7, 100(a0)
+; RV64IZCMP-NEXT:    lw a6, 104(a0)
+; RV64IZCMP-NEXT:    lw a5, 108(a0)
+; RV64IZCMP-NEXT:    lw a1, 124(a0)
+; RV64IZCMP-NEXT:    lw a2, 120(a0)
+; RV64IZCMP-NEXT:    lw a3, 116(a0)
+; RV64IZCMP-NEXT:    lw a4, 112(a0)
+; RV64IZCMP-NEXT:    sw a1, 124(a0)
+; RV64IZCMP-NEXT:    sw a2, 120(a0)
+; RV64IZCMP-NEXT:    sw a3, 116(a0)
+; RV64IZCMP-NEXT:    sw a4, 112(a0)
+; RV64IZCMP-NEXT:    sw a5, 108(a0)
+; RV64IZCMP-NEXT:    sw a6, 104(a0)
+; RV64IZCMP-NEXT:    sw a7, 100(a0)
+; RV64IZCMP-NEXT:    sw t0, 96(a0)
+; RV64IZCMP-NEXT:    sw t1, 92(a0)
+; RV64IZCMP-NEXT:    sw s1, 88(a0)
+; RV64IZCMP-NEXT:    sw s0, 84(a0)
+; RV64IZCMP-NEXT:    sw t2, 80(a0)
+; RV64IZCMP-NEXT:    sw ra, 76(a0)
+; RV64IZCMP-NEXT:    sw s11, 72(a0)
+; RV64IZCMP-NEXT:    sw s10, 68(a0)
+; RV64IZCMP-NEXT:    sw s9, 64(a0)
+; RV64IZCMP-NEXT:    sw s8, 60(a0)
+; RV64IZCMP-NEXT:    sw s7, 56(a0)
+; RV64IZCMP-NEXT:    sw s6, 52(a0)
+; RV64IZCMP-NEXT:    sw s5, 48(a0)
+; RV64IZCMP-NEXT:    sw s4, 44(a0)
+; RV64IZCMP-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 16(a0)
+; RV64IZCMP-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 12(a0)
+; RV64IZCMP-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 8(a0)
+; RV64IZCMP-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 4(a0)
+; RV64IZCMP-NEXT:    ld a1, 40(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 0(a0)
 ; RV64IZCMP-NEXT:    cm.popret {ra, s0-s11}, 160
 ;
 ; RV64IZCMP-WITH-FP-LABEL: callee:
@@ -960,86 +942,84 @@ define void @callee() nounwind {
 ; RV64IZCMP-WITH-FP-NEXT:    sd s10, 64(sp) # 8-byte Folded Spill
 ; RV64IZCMP-WITH-FP-NEXT:    sd s11, 56(sp) # 8-byte Folded Spill
 ; RV64IZCMP-WITH-FP-NEXT:    addi s0, sp, 160
-; RV64IZCMP-WITH-FP-NEXT:    lui a6, %hi(var)
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -112(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+4)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -120(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+8)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -128(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+12)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -136(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    addi a5, a6, %lo(var)
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, 16(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -144(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, 20(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -152(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, 24(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -160(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s5, 48(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s6, 52(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s7, 56(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s8, 60(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s9, 64(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s10, 68(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s11, 72(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw ra, 76(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw t4, 80(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw t3, 84(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw t2, 88(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw s1, 92(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw t1, 96(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw t0, 100(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw a7, 104(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw a4, 108(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, 124(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw a1, 120(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw a2, 116(a5)
-; RV64IZCMP-WITH-FP-NEXT:    lw a3, 112(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, 124(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw a1, 120(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw a2, 116(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw a3, 112(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw a4, 108(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw a7, 104(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t0, 100(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t1, 96(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s1, 92(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t2, 88(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t3, 84(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t4, 80(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw ra, 76(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s11, 72(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s10, 68(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s9, 64(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s8, 60(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s7, 56(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s6, 52(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s5, 48(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-WITH-FP-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -160(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, 24(a5)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -152(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, 20(a5)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -144(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, 16(a5)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -136(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+12)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -128(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+8)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -120(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+4)(a6)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -112(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var)(a6)
+; RV64IZCMP-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV64IZCMP-WITH-FP-NEXT:    addi a0, a0, %lo(var)
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 0(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sd a1, -112(s0) # 8-byte Folded Spill
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 4(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sd a1, -120(s0) # 8-byte Folded Spill
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 8(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sd a1, -128(s0) # 8-byte Folded Spill
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 12(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sd a1, -136(s0) # 8-byte Folded Spill
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 16(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sd a1, -144(s0) # 8-byte Folded Spill
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 20(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sd a1, -152(s0) # 8-byte Folded Spill
+; RV64IZCMP-WITH-FP-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s4, 44(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s5, 48(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s6, 52(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s7, 56(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s8, 60(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s9, 64(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s10, 68(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s11, 72(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw ra, 76(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw s1, 80(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw t3, 84(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw t2, 88(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw t1, 92(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw t0, 96(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a7, 100(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a6, 104(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a5, 108(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a1, 124(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a2, 120(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a3, 116(a0)
+; RV64IZCMP-WITH-FP-NEXT:    lw a4, 112(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 124(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a2, 120(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a3, 116(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a4, 112(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a5, 108(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a6, 104(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw a7, 100(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t0, 96(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t1, 92(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t2, 88(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t3, 84(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s1, 80(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw ra, 76(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s11, 72(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s10, 68(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s9, 64(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s8, 60(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s7, 56(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s6, 52(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s5, 48(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s4, 44(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-WITH-FP-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-WITH-FP-NEXT:    ld a1, -152(s0) # 8-byte Folded Reload
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 20(a0)
+; RV64IZCMP-WITH-FP-NEXT:    ld a1, -144(s0) # 8-byte Folded Reload
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 16(a0)
+; RV64IZCMP-WITH-FP-NEXT:    ld a1, -136(s0) # 8-byte Folded Reload
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 12(a0)
+; RV64IZCMP-WITH-FP-NEXT:    ld a1, -128(s0) # 8-byte Folded Reload
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 8(a0)
+; RV64IZCMP-WITH-FP-NEXT:    ld a1, -120(s0) # 8-byte Folded Reload
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 4(a0)
+; RV64IZCMP-WITH-FP-NEXT:    ld a1, -112(s0) # 8-byte Folded Reload
+; RV64IZCMP-WITH-FP-NEXT:    sw a1, 0(a0)
 ; RV64IZCMP-WITH-FP-NEXT:    ld ra, 152(sp) # 8-byte Folded Reload
 ; RV64IZCMP-WITH-FP-NEXT:    ld s0, 144(sp) # 8-byte Folded Reload
 ; RV64IZCMP-WITH-FP-NEXT:    ld s1, 136(sp) # 8-byte Folded Reload
@@ -1080,117 +1060,115 @@ define void @caller() nounwind {
 ; RV32I-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lui s0, %hi(var)
-; RV32I-NEXT:    lw a0, %lo(var)(s0)
+; RV32I-NEXT:    lui a0, %hi(var)
+; RV32I-NEXT:    addi s0, a0, %lo(var)
+; RV32I-NEXT:    lw a0, 0(s0)
 ; RV32I-NEXT:    sw a0, 88(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var+4)(s0)
+; RV32I-NEXT:    lw a0, 4(s0)
 ; RV32I-NEXT:    sw a0, 84(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var+8)(s0)
+; RV32I-NEXT:    lw a0, 8(s0)
 ; RV32I-NEXT:    sw a0, 80(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var+12)(s0)
+; RV32I-NEXT:    lw a0, 12(s0)
 ; RV32I-NEXT:    sw a0, 76(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    addi s5, s0, %lo(var)
-; RV32I-NEXT:    lw a0, 16(s5)
+; RV32I-NEXT:    lw a0, 16(s0)
 ; RV32I-NEXT:    sw a0, 72(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 20(s5)
+; RV32I-NEXT:    lw a0, 20(s0)
 ; RV32I-NEXT:    sw a0, 68(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 24(s5)
+; RV32I-NEXT:    lw a0, 24(s0)
 ; RV32I-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 28(s5)
+; RV32I-NEXT:    lw a0, 28(s0)
 ; RV32I-NEXT:    sw a0, 60(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 32(s5)
+; RV32I-NEXT:    lw a0, 32(s0)
 ; RV32I-NEXT:    sw a0, 56(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 36(s5)
+; RV32I-NEXT:    lw a0, 36(s0)
 ; RV32I-NEXT:    sw a0, 52(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 40(s5)
+; RV32I-NEXT:    lw a0, 40(s0)
 ; RV32I-NEXT:    sw a0, 48(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 44(s5)
+; RV32I-NEXT:    lw a0, 44(s0)
 ; RV32I-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 48(s5)
+; RV32I-NEXT:    lw a0, 48(s0)
 ; RV32I-NEXT:    sw a0, 40(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 52(s5)
+; RV32I-NEXT:    lw a0, 52(s0)
 ; RV32I-NEXT:    sw a0, 36(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 56(s5)
+; RV32I-NEXT:    lw a0, 56(s0)
 ; RV32I-NEXT:    sw a0, 32(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 60(s5)
+; RV32I-NEXT:    lw a0, 60(s0)
 ; RV32I-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 64(s5)
+; RV32I-NEXT:    lw a0, 64(s0)
 ; RV32I-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 68(s5)
+; RV32I-NEXT:    lw a0, 68(s0)
 ; RV32I-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 72(s5)
+; RV32I-NEXT:    lw a0, 72(s0)
 ; RV32I-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 76(s5)
+; RV32I-NEXT:    lw a0, 76(s0)
 ; RV32I-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 80(s5)
+; RV32I-NEXT:    lw a0, 80(s0)
 ; RV32I-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 84(s5)
-; RV32I-NEXT:    sw a0, 4(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw s3, 88(s5)
-; RV32I-NEXT:    lw s4, 92(s5)
-; RV32I-NEXT:    lw s6, 96(s5)
-; RV32I-NEXT:    lw s7, 100(s5)
-; RV32I-NEXT:    lw s8, 104(s5)
-; RV32I-NEXT:    lw s9, 108(s5)
-; RV32I-NEXT:    lw s10, 112(s5)
-; RV32I-NEXT:    lw s11, 116(s5)
-; RV32I-NEXT:    lw s1, 120(s5)
-; RV32I-NEXT:    lw s2, 124(s5)
+; RV32I-NEXT:    lw s11, 84(s0)
+; RV32I-NEXT:    lw s1, 88(s0)
+; RV32I-NEXT:    lw s2, 92(s0)
+; RV32I-NEXT:    lw s3, 96(s0)
+; RV32I-NEXT:    lw s4, 100(s0)
+; RV32I-NEXT:    lw s5, 104(s0)
+; RV32I-NEXT:    lw s6, 108(s0)
+; RV32I-NEXT:    lw s7, 112(s0)
+; RV32I-NEXT:    lw s8, 116(s0)
+; RV32I-NEXT:    lw s9, 120(s0)
+; RV32I-NEXT:    lw s10, 124(s0)
 ; RV32I-NEXT:    call callee
-; RV32I-NEXT:    sw s2, 124(s5)
-; RV32I-NEXT:    sw s1, 120(s5)
-; RV32I-NEXT:    sw s11, 116(s5)
-; RV32I-NEXT:    sw s10, 112(s5)
-; RV32I-NEXT:    sw s9, 108(s5)
-; RV32I-NEXT:    sw s8, 104(s5)
-; RV32I-NEXT:    sw s7, 100(s5)
-; RV32I-NEXT:    sw s6, 96(s5)
-; RV32I-NEXT:    sw s4, 92(s5)
-; RV32I-NEXT:    sw s3, 88(s5)
-; RV32I-NEXT:    lw a0, 4(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 84(s5)
+; RV32I-NEXT:    sw s10, 124(s0)
+; RV32I-NEXT:    sw s9, 120(s0)
+; RV32I-NEXT:    sw s8, 116(s0)
+; RV32I-NEXT:    sw s7, 112(s0)
+; RV32I-NEXT:    sw s6, 108(s0)
+; RV32I-NEXT:    sw s5, 104(s0)
+; RV32I-NEXT:    sw s4, 100(s0)
+; RV32I-NEXT:    sw s3, 96(s0)
+; RV32I-NEXT:    sw s2, 92(s0)
+; RV32I-NEXT:    sw s1, 88(s0)
+; RV32I-NEXT:    sw s11, 84(s0)
 ; RV32I-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 80(s5)
+; RV32I-NEXT:    sw a0, 80(s0)
 ; RV32I-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 76(s5)
+; RV32I-NEXT:    sw a0, 76(s0)
 ; RV32I-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 72(s5)
+; RV32I-NEXT:    sw a0, 72(s0)
 ; RV32I-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 68(s5)
+; RV32I-NEXT:    sw a0, 68(s0)
 ; RV32I-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 64(s5)
+; RV32I-NEXT:    sw a0, 64(s0)
 ; RV32I-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 60(s5)
+; RV32I-NEXT:    sw a0, 60(s0)
 ; RV32I-NEXT:    lw a0, 32(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 56(s5)
+; RV32I-NEXT:    sw a0, 56(s0)
 ; RV32I-NEXT:    lw a0, 36(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 52(s5)
+; RV32I-NEXT:    sw a0, 52(s0)
 ; RV32I-NEXT:    lw a0, 40(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 48(s5)
+; RV32I-NEXT:    sw a0, 48(s0)
 ; RV32I-NEXT:    lw a0, 44(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 44(s5)
+; RV32I-NEXT:    sw a0, 44(s0)
 ; RV32I-NEXT:    lw a0, 48(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 40(s5)
+; RV32I-NEXT:    sw a0, 40(s0)
 ; RV32I-NEXT:    lw a0, 52(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 36(s5)
+; RV32I-NEXT:    sw a0, 36(s0)
 ; RV32I-NEXT:    lw a0, 56(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 32(s5)
+; RV32I-NEXT:    sw a0, 32(s0)
 ; RV32I-NEXT:    lw a0, 60(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 28(s5)
+; RV32I-NEXT:    sw a0, 28(s0)
 ; RV32I-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 24(s5)
+; RV32I-NEXT:    sw a0, 24(s0)
 ; RV32I-NEXT:    lw a0, 68(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 20(s5)
+; RV32I-NEXT:    sw a0, 20(s0)
 ; RV32I-NEXT:    lw a0, 72(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 16(s5)
+; RV32I-NEXT:    sw a0, 16(s0)
 ; RV32I-NEXT:    lw a0, 76(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var+12)(s0)
+; RV32I-NEXT:    sw a0, 12(s0)
 ; RV32I-NEXT:    lw a0, 80(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var+8)(s0)
+; RV32I-NEXT:    sw a0, 8(s0)
 ; RV32I-NEXT:    lw a0, 84(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var+4)(s0)
+; RV32I-NEXT:    sw a0, 4(s0)
 ; RV32I-NEXT:    lw a0, 88(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var)(s0)
+; RV32I-NEXT:    sw a0, 0(s0)
 ; RV32I-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
@@ -1214,135 +1192,134 @@ define void @caller() nounwind {
 ; RV32I-ILP32E-NEXT:    sw s0, 128(sp) # 4-byte Folded Spill
 ; RV32I-ILP32E-NEXT:    sw s1, 124(sp) # 4-byte Folded Spill
 ; RV32I-ILP32E-NEXT:    lui a0, %hi(var)
-; RV32I-ILP32E-NEXT:    lw a1, %lo(var)(a0)
-; RV32I-ILP32E-NEXT:    sw a1, 120(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a1, %lo(var+4)(a0)
-; RV32I-ILP32E-NEXT:    sw a1, 116(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a1, %lo(var+8)(a0)
-; RV32I-ILP32E-NEXT:    sw a1, 112(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a1, %lo(var+12)(a0)
-; RV32I-ILP32E-NEXT:    sw a1, 108(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    addi s1, a0, %lo(var)
-; RV32I-ILP32E-NEXT:    lw a0, 16(s1)
+; RV32I-ILP32E-NEXT:    addi s0, a0, %lo(var)
+; RV32I-ILP32E-NEXT:    lw a0, 0(s0)
+; RV32I-ILP32E-NEXT:    sw a0, 120(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a0, 4(s0)
+; RV32I-ILP32E-NEXT:    sw a0, 116(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a0, 8(s0)
+; RV32I-ILP32E-NEXT:    sw a0, 112(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a0, 12(s0)
+; RV32I-ILP32E-NEXT:    sw a0, 108(sp) # 4-byte Folded Spill
+; RV32I-ILP32E-NEXT:    lw a0, 16(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 104(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 20(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 20(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 100(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 24(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 24(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 96(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 28(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 28(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 92(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 32(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 32(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 88(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 36(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 36(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 84(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 40(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 40(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 80(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 44(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 44(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 76(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 48(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 48(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 72(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 52(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 52(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 68(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 56(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 56(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 60(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 60(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 60(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 64(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 64(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 56(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 68(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 68(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 52(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 72(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 72(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 48(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 76(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 76(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 80(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 80(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 40(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 84(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 84(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 36(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 88(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 88(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 32(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 92(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 92(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 96(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 96(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 100(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 100(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 104(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 104(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 108(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 108(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 112(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 112(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 116(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 116(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 4(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw a0, 120(s1)
+; RV32I-ILP32E-NEXT:    lw a0, 120(s0)
 ; RV32I-ILP32E-NEXT:    sw a0, 0(sp) # 4-byte Folded Spill
-; RV32I-ILP32E-NEXT:    lw s0, 124(s1)
+; RV32I-ILP32E-NEXT:    lw s1, 124(s0)
 ; RV32I-ILP32E-NEXT:    call callee
-; RV32I-ILP32E-NEXT:    sw s0, 124(s1)
+; RV32I-ILP32E-NEXT:    sw s1, 124(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 0(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 120(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 120(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 4(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 116(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 116(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 112(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 112(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 108(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 108(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 104(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 104(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 100(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 100(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 96(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 96(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 92(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 92(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 32(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 88(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 88(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 36(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 84(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 84(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 40(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 80(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 80(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 44(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 76(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 76(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 48(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 72(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 72(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 52(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 68(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 68(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 56(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 64(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 64(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 60(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 60(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 60(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 56(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 56(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 68(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 52(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 52(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 72(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 48(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 48(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 76(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 44(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 44(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 80(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 40(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 40(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 84(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 36(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 36(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 88(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 32(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 32(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 92(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 28(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 28(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 96(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 24(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 24(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 100(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 20(s1)
+; RV32I-ILP32E-NEXT:    sw a0, 20(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 104(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, 16(s1)
-; RV32I-ILP32E-NEXT:    lui a1, %hi(var)
+; RV32I-ILP32E-NEXT:    sw a0, 16(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 108(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var+12)(a1)
+; RV32I-ILP32E-NEXT:    sw a0, 12(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 112(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var+8)(a1)
+; RV32I-ILP32E-NEXT:    sw a0, 8(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 116(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var+4)(a1)
+; RV32I-ILP32E-NEXT:    sw a0, 4(s0)
 ; RV32I-ILP32E-NEXT:    lw a0, 120(sp) # 4-byte Folded Reload
-; RV32I-ILP32E-NEXT:    sw a0, %lo(var)(a1)
+; RV32I-ILP32E-NEXT:    sw a0, 0(s0)
 ; RV32I-ILP32E-NEXT:    lw ra, 132(sp) # 4-byte Folded Reload
 ; RV32I-ILP32E-NEXT:    lw s0, 128(sp) # 4-byte Folded Reload
 ; RV32I-ILP32E-NEXT:    lw s1, 124(sp) # 4-byte Folded Reload
@@ -1366,119 +1343,117 @@ define void @caller() nounwind {
 ; RV32I-WITH-FP-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
 ; RV32I-WITH-FP-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
 ; RV32I-WITH-FP-NEXT:    addi s0, sp, 144
-; RV32I-WITH-FP-NEXT:    lui s1, %hi(var)
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var)(s1)
+; RV32I-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV32I-WITH-FP-NEXT:    addi s1, a0, %lo(var)
+; RV32I-WITH-FP-NEXT:    lw a0, 0(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -56(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var+4)(s1)
+; RV32I-WITH-FP-NEXT:    lw a0, 4(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -60(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var+8)(s1)
+; RV32I-WITH-FP-NEXT:    lw a0, 8(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -64(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, %lo(var+12)(s1)
+; RV32I-WITH-FP-NEXT:    lw a0, 12(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -68(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    addi s6, s1, %lo(var)
-; RV32I-WITH-FP-NEXT:    lw a0, 16(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 16(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -72(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 20(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 20(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -76(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 24(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 24(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -80(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 28(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 28(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -84(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 32(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 32(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -88(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 36(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 36(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -92(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 40(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 40(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -96(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 44(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 44(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -100(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 48(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 48(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -104(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 52(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 52(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -108(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 56(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 56(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -112(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 60(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 60(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -116(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 64(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 64(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -120(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 68(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 68(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -124(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 72(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 72(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -128(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 76(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 76(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -132(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 80(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 80(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -136(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 84(s6)
+; RV32I-WITH-FP-NEXT:    lw a0, 84(s1)
 ; RV32I-WITH-FP-NEXT:    sw a0, -140(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw a0, 88(s6)
-; RV32I-WITH-FP-NEXT:    sw a0, -144(s0) # 4-byte Folded Spill
-; RV32I-WITH-FP-NEXT:    lw s8, 92(s6)
-; RV32I-WITH-FP-NEXT:    lw s9, 96(s6)
-; RV32I-WITH-FP-NEXT:    lw s10, 100(s6)
-; RV32I-WITH-FP-NEXT:    lw s11, 104(s6)
-; RV32I-WITH-FP-NEXT:    lw s2, 108(s6)
-; RV32I-WITH-FP-NEXT:    lw s3, 112(s6)
-; RV32I-WITH-FP-NEXT:    lw s4, 116(s6)
-; RV32I-WITH-FP-NEXT:    lw s5, 120(s6)
-; RV32I-WITH-FP-NEXT:    lw s7, 124(s6)
+; RV32I-WITH-FP-NEXT:    lw s4, 88(s1)
+; RV32I-WITH-FP-NEXT:    lw s5, 92(s1)
+; RV32I-WITH-FP-NEXT:    lw s6, 96(s1)
+; RV32I-WITH-FP-NEXT:    lw s7, 100(s1)
+; RV32I-WITH-FP-NEXT:    lw s8, 104(s1)
+; RV32I-WITH-FP-NEXT:    lw s9, 108(s1)
+; RV32I-WITH-FP-NEXT:    lw s10, 112(s1)
+; RV32I-WITH-FP-NEXT:    lw s11, 116(s1)
+; RV32I-WITH-FP-NEXT:    lw s2, 120(s1)
+; RV32I-WITH-FP-NEXT:    lw s3, 124(s1)
 ; RV32I-WITH-FP-NEXT:    call callee
-; RV32I-WITH-FP-NEXT:    sw s7, 124(s6)
-; RV32I-WITH-FP-NEXT:    sw s5, 120(s6)
-; RV32I-WITH-FP-NEXT:    sw s4, 116(s6)
-; RV32I-WITH-FP-NEXT:    sw s3, 112(s6)
-; RV32I-WITH-FP-NEXT:    sw s2, 108(s6)
-; RV32I-WITH-FP-NEXT:    sw s11, 104(s6)
-; RV32I-WITH-FP-NEXT:    sw s10, 100(s6)
-; RV32I-WITH-FP-NEXT:    sw s9, 96(s6)
-; RV32I-WITH-FP-NEXT:    sw s8, 92(s6)
-; RV32I-WITH-FP-NEXT:    lw a0, -144(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 88(s6)
+; RV32I-WITH-FP-NEXT:    sw s3, 124(s1)
+; RV32I-WITH-FP-NEXT:    sw s2, 120(s1)
+; RV32I-WITH-FP-NEXT:    sw s11, 116(s1)
+; RV32I-WITH-FP-NEXT:    sw s10, 112(s1)
+; RV32I-WITH-FP-NEXT:    sw s9, 108(s1)
+; RV32I-WITH-FP-NEXT:    sw s8, 104(s1)
+; RV32I-WITH-FP-NEXT:    sw s7, 100(s1)
+; RV32I-WITH-FP-NEXT:    sw s6, 96(s1)
+; RV32I-WITH-FP-NEXT:    sw s5, 92(s1)
+; RV32I-WITH-FP-NEXT:    sw s4, 88(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -140(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 84(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 84(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -136(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 80(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 80(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -132(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 76(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 76(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -128(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 72(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 72(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -124(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 68(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 68(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -120(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 64(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 64(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -116(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 60(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 60(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -112(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 56(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 56(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -108(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 52(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 52(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -104(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 48(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 48(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -100(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 44(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 44(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -96(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 40(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 40(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -92(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 36(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 36(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -88(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 32(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 32(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -84(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 28(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 28(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -80(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 24(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 24(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -76(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 20(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 20(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -72(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, 16(s6)
+; RV32I-WITH-FP-NEXT:    sw a0, 16(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -68(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var+12)(s1)
+; RV32I-WITH-FP-NEXT:    sw a0, 12(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -64(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var+8)(s1)
+; RV32I-WITH-FP-NEXT:    sw a0, 8(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -60(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var+4)(s1)
+; RV32I-WITH-FP-NEXT:    sw a0, 4(s1)
 ; RV32I-WITH-FP-NEXT:    lw a0, -56(s0) # 4-byte Folded Reload
-; RV32I-WITH-FP-NEXT:    sw a0, %lo(var)(s1)
+; RV32I-WITH-FP-NEXT:    sw a0, 0(s1)
 ; RV32I-WITH-FP-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
 ; RV32I-WITH-FP-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
 ; RV32I-WITH-FP-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
@@ -1499,117 +1474,115 @@ define void @caller() nounwind {
 ; RV32IZCMP:       # %bb.0:
 ; RV32IZCMP-NEXT:    cm.push {ra, s0-s11}, -112
 ; RV32IZCMP-NEXT:    addi sp, sp, -48
-; RV32IZCMP-NEXT:    lui s0, %hi(var)
-; RV32IZCMP-NEXT:    lw a0, %lo(var)(s0)
+; RV32IZCMP-NEXT:    lui a0, %hi(var)
+; RV32IZCMP-NEXT:    addi s0, a0, %lo(var)
+; RV32IZCMP-NEXT:    lw a0, 0(s0)
 ; RV32IZCMP-NEXT:    sw a0, 92(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var+4)(s0)
+; RV32IZCMP-NEXT:    lw a0, 4(s0)
 ; RV32IZCMP-NEXT:    sw a0, 88(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var+8)(s0)
+; RV32IZCMP-NEXT:    lw a0, 8(s0)
 ; RV32IZCMP-NEXT:    sw a0, 84(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var+12)(s0)
+; RV32IZCMP-NEXT:    lw a0, 12(s0)
 ; RV32IZCMP-NEXT:    sw a0, 80(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    addi s1, s0, %lo(var)
-; RV32IZCMP-NEXT:    lw a0, 16(s1)
+; RV32IZCMP-NEXT:    lw a0, 16(s0)
 ; RV32IZCMP-NEXT:    sw a0, 76(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 20(s1)
+; RV32IZCMP-NEXT:    lw a0, 20(s0)
 ; RV32IZCMP-NEXT:    sw a0, 72(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 24(s1)
+; RV32IZCMP-NEXT:    lw a0, 24(s0)
 ; RV32IZCMP-NEXT:    sw a0, 68(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 28(s1)
+; RV32IZCMP-NEXT:    lw a0, 28(s0)
 ; RV32IZCMP-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 32(s1)
+; RV32IZCMP-NEXT:    lw a0, 32(s0)
 ; RV32IZCMP-NEXT:    sw a0, 60(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 36(s1)
+; RV32IZCMP-NEXT:    lw a0, 36(s0)
 ; RV32IZCMP-NEXT:    sw a0, 56(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 40(s1)
+; RV32IZCMP-NEXT:    lw a0, 40(s0)
 ; RV32IZCMP-NEXT:    sw a0, 52(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 44(s1)
+; RV32IZCMP-NEXT:    lw a0, 44(s0)
 ; RV32IZCMP-NEXT:    sw a0, 48(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 48(s1)
+; RV32IZCMP-NEXT:    lw a0, 48(s0)
 ; RV32IZCMP-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 52(s1)
+; RV32IZCMP-NEXT:    lw a0, 52(s0)
 ; RV32IZCMP-NEXT:    sw a0, 40(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 56(s1)
+; RV32IZCMP-NEXT:    lw a0, 56(s0)
 ; RV32IZCMP-NEXT:    sw a0, 36(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 60(s1)
+; RV32IZCMP-NEXT:    lw a0, 60(s0)
 ; RV32IZCMP-NEXT:    sw a0, 32(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 64(s1)
+; RV32IZCMP-NEXT:    lw a0, 64(s0)
 ; RV32IZCMP-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 68(s1)
+; RV32IZCMP-NEXT:    lw a0, 68(s0)
 ; RV32IZCMP-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 72(s1)
+; RV32IZCMP-NEXT:    lw a0, 72(s0)
 ; RV32IZCMP-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 76(s1)
+; RV32IZCMP-NEXT:    lw a0, 76(s0)
 ; RV32IZCMP-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 80(s1)
+; RV32IZCMP-NEXT:    lw a0, 80(s0)
 ; RV32IZCMP-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 84(s1)
-; RV32IZCMP-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw s4, 88(s1)
-; RV32IZCMP-NEXT:    lw s5, 92(s1)
-; RV32IZCMP-NEXT:    lw s6, 96(s1)
-; RV32IZCMP-NEXT:    lw s7, 100(s1)
-; RV32IZCMP-NEXT:    lw s8, 104(s1)
-; RV32IZCMP-NEXT:    lw s9, 108(s1)
-; RV32IZCMP-NEXT:    lw s10, 112(s1)
-; RV32IZCMP-NEXT:    lw s11, 116(s1)
-; RV32IZCMP-NEXT:    lw s2, 120(s1)
-; RV32IZCMP-NEXT:    lw s3, 124(s1)
+; RV32IZCMP-NEXT:    lw s1, 84(s0)
+; RV32IZCMP-NEXT:    lw s2, 88(s0)
+; RV32IZCMP-NEXT:    lw s3, 92(s0)
+; RV32IZCMP-NEXT:    lw s4, 96(s0)
+; RV32IZCMP-NEXT:    lw s5, 100(s0)
+; RV32IZCMP-NEXT:    lw s6, 104(s0)
+; RV32IZCMP-NEXT:    lw s7, 108(s0)
+; RV32IZCMP-NEXT:    lw s8, 112(s0)
+; RV32IZCMP-NEXT:    lw s9, 116(s0)
+; RV32IZCMP-NEXT:    lw s10, 120(s0)
+; RV32IZCMP-NEXT:    lw s11, 124(s0)
 ; RV32IZCMP-NEXT:    call callee
-; RV32IZCMP-NEXT:    sw s3, 124(s1)
-; RV32IZCMP-NEXT:    sw s2, 120(s1)
-; RV32IZCMP-NEXT:    sw s11, 116(s1)
-; RV32IZCMP-NEXT:    sw s10, 112(s1)
-; RV32IZCMP-NEXT:    sw s9, 108(s1)
-; RV32IZCMP-NEXT:    sw s8, 104(s1)
-; RV32IZCMP-NEXT:    sw s7, 100(s1)
-; RV32IZCMP-NEXT:    sw s6, 96(s1)
-; RV32IZCMP-NEXT:    sw s5, 92(s1)
-; RV32IZCMP-NEXT:    sw s4, 88(s1)
-; RV32IZCMP-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 84(s1)
+; RV32IZCMP-NEXT:    sw s11, 124(s0)
+; RV32IZCMP-NEXT:    sw s10, 120(s0)
+; RV32IZCMP-NEXT:    sw s9, 116(s0)
+; RV32IZCMP-NEXT:    sw s8, 112(s0)
+; RV32IZCMP-NEXT:    sw s7, 108(s0)
+; RV32IZCMP-NEXT:    sw s6, 104(s0)
+; RV32IZCMP-NEXT:    sw s5, 100(s0)
+; RV32IZCMP-NEXT:    sw s4, 96(s0)
+; RV32IZCMP-NEXT:    sw s3, 92(s0)
+; RV32IZCMP-NEXT:    sw s2, 88(s0)
+; RV32IZCMP-NEXT:    sw s1, 84(s0)
 ; RV32IZCMP-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 80(s1)
+; RV32IZCMP-NEXT:    sw a0, 80(s0)
 ; RV32IZCMP-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 76(s1)
+; RV32IZCMP-NEXT:    sw a0, 76(s0)
 ; RV32IZCMP-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 72(s1)
+; RV32IZCMP-NEXT:    sw a0, 72(s0)
 ; RV32IZCMP-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 68(s1)
+; RV32IZCMP-NEXT:    sw a0, 68(s0)
 ; RV32IZCMP-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 64(s1)
+; RV32IZCMP-NEXT:    sw a0, 64(s0)
 ; RV32IZCMP-NEXT:    lw a0, 32(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 60(s1)
+; RV32IZCMP-NEXT:    sw a0, 60(s0)
 ; RV32IZCMP-NEXT:    lw a0, 36(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 56(s1)
+; RV32IZCMP-NEXT:    sw a0, 56(s0)
 ; RV32IZCMP-NEXT:    lw a0, 40(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 52(s1)
+; RV32IZCMP-NEXT:    sw a0, 52(s0)
 ; RV32IZCMP-NEXT:    lw a0, 44(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 48(s1)
+; RV32IZCMP-NEXT:    sw a0, 48(s0)
 ; RV32IZCMP-NEXT:    lw a0, 48(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 44(s1)
+; RV32IZCMP-NEXT:    sw a0, 44(s0)
 ; RV32IZCMP-NEXT:    lw a0, 52(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 40(s1)
+; RV32IZCMP-NEXT:    sw a0, 40(s0)
 ; RV32IZCMP-NEXT:    lw a0, 56(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 36(s1)
+; RV32IZCMP-NEXT:    sw a0, 36(s0)
 ; RV32IZCMP-NEXT:    lw a0, 60(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 32(s1)
+; RV32IZCMP-NEXT:    sw a0, 32(s0)
 ; RV32IZCMP-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 28(s1)
+; RV32IZCMP-NEXT:    sw a0, 28(s0)
 ; RV32IZCMP-NEXT:    lw a0, 68(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 24(s1)
+; RV32IZCMP-NEXT:    sw a0, 24(s0)
 ; RV32IZCMP-NEXT:    lw a0, 72(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 20(s1)
+; RV32IZCMP-NEXT:    sw a0, 20(s0)
 ; RV32IZCMP-NEXT:    lw a0, 76(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 16(s1)
+; RV32IZCMP-NEXT:    sw a0, 16(s0)
 ; RV32IZCMP-NEXT:    lw a0, 80(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var+12)(s0)
+; RV32IZCMP-NEXT:    sw a0, 12(s0)
 ; RV32IZCMP-NEXT:    lw a0, 84(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var+8)(s0)
+; RV32IZCMP-NEXT:    sw a0, 8(s0)
 ; RV32IZCMP-NEXT:    lw a0, 88(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var+4)(s0)
+; RV32IZCMP-NEXT:    sw a0, 4(s0)
 ; RV32IZCMP-NEXT:    lw a0, 92(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var)(s0)
+; RV32IZCMP-NEXT:    sw a0, 0(s0)
 ; RV32IZCMP-NEXT:    addi sp, sp, 48
 ; RV32IZCMP-NEXT:    cm.popret {ra, s0-s11}, 112
 ;
@@ -1630,16 +1603,16 @@ define void @caller() nounwind {
 ; RV32IZCMP-WITH-FP-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
 ; RV32IZCMP-WITH-FP-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
 ; RV32IZCMP-WITH-FP-NEXT:    addi s0, sp, 144
-; RV32IZCMP-WITH-FP-NEXT:    lui s6, %hi(var)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV32IZCMP-WITH-FP-NEXT:    addi s1, a0, %lo(var)
+; RV32IZCMP-WITH-FP-NEXT:    lw a0, 0(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -56(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+4)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    lw a0, 4(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -60(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+8)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    lw a0, 8(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -64(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+12)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    lw a0, 12(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -68(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    addi s1, s6, %lo(var)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, 16(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -72(s0) # 4-byte Folded Spill
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, 20(s1)
@@ -1676,29 +1649,27 @@ define void @caller() nounwind {
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -136(s0) # 4-byte Folded Spill
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, 84(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, -140(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, 88(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, -144(s0) # 4-byte Folded Spill
-; RV32IZCMP-WITH-FP-NEXT:    lw s8, 92(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s9, 96(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s10, 100(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s11, 104(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s2, 108(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s3, 112(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s4, 116(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s5, 120(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw s7, 124(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s4, 88(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s5, 92(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s6, 96(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s7, 100(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s8, 104(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s9, 108(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s10, 112(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s11, 116(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s2, 120(s1)
+; RV32IZCMP-WITH-FP-NEXT:    lw s3, 124(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    call callee
-; RV32IZCMP-WITH-FP-NEXT:    sw s7, 124(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s5, 120(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s4, 116(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s3, 112(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s2, 108(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s11, 104(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s10, 100(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s9, 96(s1)
-; RV32IZCMP-WITH-FP-NEXT:    sw s8, 92(s1)
-; RV32IZCMP-WITH-FP-NEXT:    lw a0, -144(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, 88(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s3, 124(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s2, 120(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s11, 116(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s10, 112(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s9, 108(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s8, 104(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s7, 100(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s6, 96(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s5, 92(s1)
+; RV32IZCMP-WITH-FP-NEXT:    sw s4, 88(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -140(s0) # 4-byte Folded Reload
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, 84(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -136(s0) # 4-byte Folded Reload
@@ -1736,13 +1707,13 @@ define void @caller() nounwind {
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -72(s0) # 4-byte Folded Reload
 ; RV32IZCMP-WITH-FP-NEXT:    sw a0, 16(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -68(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+12)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    sw a0, 12(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -64(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+8)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    sw a0, 8(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -60(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+4)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    sw a0, 4(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw a0, -56(s0) # 4-byte Folded Reload
-; RV32IZCMP-WITH-FP-NEXT:    sw a0, %lo(var)(s6)
+; RV32IZCMP-WITH-FP-NEXT:    sw a0, 0(s1)
 ; RV32IZCMP-WITH-FP-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
 ; RV32IZCMP-WITH-FP-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
 ; RV32IZCMP-WITH-FP-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
@@ -1761,145 +1732,143 @@ define void @caller() nounwind {
 ;
 ; RV64I-LABEL: caller:
 ; RV64I:       # %bb.0:
-; RV64I-NEXT:    addi sp, sp, -288
-; RV64I-NEXT:    sd ra, 280(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s0, 272(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s1, 264(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s2, 256(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s3, 248(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s4, 240(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s5, 232(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s6, 224(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s7, 216(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s8, 208(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s9, 200(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s10, 192(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s11, 184(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lui s0, %hi(var)
-; RV64I-NEXT:    lw a0, %lo(var)(s0)
-; RV64I-NEXT:    sd a0, 176(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var+4)(s0)
-; RV64I-NEXT:    sd a0, 168(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var+8)(s0)
+; RV64I-NEXT:    addi sp, sp, -272
+; RV64I-NEXT:    sd ra, 264(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s0, 256(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 248(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 240(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 232(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 224(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s5, 216(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s6, 208(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s7, 200(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s8, 192(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s9, 184(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s10, 176(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s11, 168(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var)
+; RV64I-NEXT:    addi s0, a0, %lo(var)
+; RV64I-NEXT:    lw a0, 0(s0)
 ; RV64I-NEXT:    sd a0, 160(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var+12)(s0)
+; RV64I-NEXT:    lw a0, 4(s0)
 ; RV64I-NEXT:    sd a0, 152(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    addi s5, s0, %lo(var)
-; RV64I-NEXT:    lw a0, 16(s5)
+; RV64I-NEXT:    lw a0, 8(s0)
 ; RV64I-NEXT:    sd a0, 144(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 20(s5)
+; RV64I-NEXT:    lw a0, 12(s0)
 ; RV64I-NEXT:    sd a0, 136(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 24(s5)
+; RV64I-NEXT:    lw a0, 16(s0)
 ; RV64I-NEXT:    sd a0, 128(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 28(s5)
+; RV64I-NEXT:    lw a0, 20(s0)
 ; RV64I-NEXT:    sd a0, 120(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 32(s5)
+; RV64I-NEXT:    lw a0, 24(s0)
 ; RV64I-NEXT:    sd a0, 112(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 36(s5)
+; RV64I-NEXT:    lw a0, 28(s0)
 ; RV64I-NEXT:    sd a0, 104(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 40(s5)
+; RV64I-NEXT:    lw a0, 32(s0)
 ; RV64I-NEXT:    sd a0, 96(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 44(s5)
+; RV64I-NEXT:    lw a0, 36(s0)
 ; RV64I-NEXT:    sd a0, 88(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 48(s5)
+; RV64I-NEXT:    lw a0, 40(s0)
 ; RV64I-NEXT:    sd a0, 80(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 52(s5)
+; RV64I-NEXT:    lw a0, 44(s0)
 ; RV64I-NEXT:    sd a0, 72(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 56(s5)
+; RV64I-NEXT:    lw a0, 48(s0)
 ; RV64I-NEXT:    sd a0, 64(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 60(s5)
+; RV64I-NEXT:    lw a0, 52(s0)
 ; RV64I-NEXT:    sd a0, 56(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 64(s5)
+; RV64I-NEXT:    lw a0, 56(s0)
 ; RV64I-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 68(s5)
+; RV64I-NEXT:    lw a0, 60(s0)
 ; RV64I-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 72(s5)
+; RV64I-NEXT:    lw a0, 64(s0)
 ; RV64I-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 76(s5)
+; RV64I-NEXT:    lw a0, 68(s0)
 ; RV64I-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 80(s5)
+; RV64I-NEXT:    lw a0, 72(s0)
 ; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 84(s5)
+; RV64I-NEXT:    lw a0, 76(s0)
 ; RV64I-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw s3, 88(s5)
-; RV64I-NEXT:    lw s4, 92(s5)
-; RV64I-NEXT:    lw s6, 96(s5)
-; RV64I-NEXT:    lw s7, 100(s5)
-; RV64I-NEXT:    lw s8, 104(s5)
-; RV64I-NEXT:    lw s9, 108(s5)
-; RV64I-NEXT:    lw s10, 112(s5)
-; RV64I-NEXT:    lw s11, 116(s5)
-; RV64I-NEXT:    lw s1, 120(s5)
-; RV64I-NEXT:    lw s2, 124(s5)
+; RV64I-NEXT:    lw a0, 80(s0)
+; RV64I-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw s11, 84(s0)
+; RV64I-NEXT:    lw s1, 88(s0)
+; RV64I-NEXT:    lw s2, 92(s0)
+; RV64I-NEXT:    lw s3, 96(s0)
+; RV64I-NEXT:    lw s4, 100(s0)
+; RV64I-NEXT:    lw s5, 104(s0)
+; RV64I-NEXT:    lw s6, 108(s0)
+; RV64I-NEXT:    lw s7, 112(s0)
+; RV64I-NEXT:    lw s8, 116(s0)
+; RV64I-NEXT:    lw s9, 120(s0)
+; RV64I-NEXT:    lw s10, 124(s0)
 ; RV64I-NEXT:    call callee
-; RV64I-NEXT:    sw s2, 124(s5)
-; RV64I-NEXT:    sw s1, 120(s5)
-; RV64I-NEXT:    sw s11, 116(s5)
-; RV64I-NEXT:    sw s10, 112(s5)
-; RV64I-NEXT:    sw s9, 108(s5)
-; RV64I-NEXT:    sw s8, 104(s5)
-; RV64I-NEXT:    sw s7, 100(s5)
-; RV64I-NEXT:    sw s6, 96(s5)
-; RV64I-NEXT:    sw s4, 92(s5)
-; RV64I-NEXT:    sw s3, 88(s5)
+; RV64I-NEXT:    sw s10, 124(s0)
+; RV64I-NEXT:    sw s9, 120(s0)
+; RV64I-NEXT:    sw s8, 116(s0)
+; RV64I-NEXT:    sw s7, 112(s0)
+; RV64I-NEXT:    sw s6, 108(s0)
+; RV64I-NEXT:    sw s5, 104(s0)
+; RV64I-NEXT:    sw s4, 100(s0)
+; RV64I-NEXT:    sw s3, 96(s0)
+; RV64I-NEXT:    sw s2, 92(s0)
+; RV64I-NEXT:    sw s1, 88(s0)
+; RV64I-NEXT:    sw s11, 84(s0)
+; RV64I-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a0, 80(s0)
 ; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 84(s5)
+; RV64I-NEXT:    sw a0, 76(s0)
 ; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 80(s5)
+; RV64I-NEXT:    sw a0, 72(s0)
 ; RV64I-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 76(s5)
+; RV64I-NEXT:    sw a0, 68(s0)
 ; RV64I-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 72(s5)
+; RV64I-NEXT:    sw a0, 64(s0)
 ; RV64I-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 68(s5)
+; RV64I-NEXT:    sw a0, 60(s0)
 ; RV64I-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 64(s5)
+; RV64I-NEXT:    sw a0, 56(s0)
 ; RV64I-NEXT:    ld a0, 56(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 60(s5)
+; RV64I-NEXT:    sw a0, 52(s0)
 ; RV64I-NEXT:    ld a0, 64(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 56(s5)
+; RV64I-NEXT:    sw a0, 48(s0)
 ; RV64I-NEXT:    ld a0, 72(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 52(s5)
+; RV64I-NEXT:    sw a0, 44(s0)
 ; RV64I-NEXT:    ld a0, 80(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 48(s5)
+; RV64I-NEXT:    sw a0, 40(s0)
 ; RV64I-NEXT:    ld a0, 88(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 44(s5)
+; RV64I-NEXT:    sw a0, 36(s0)
 ; RV64I-NEXT:    ld a0, 96(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 40(s5)
+; RV64I-NEXT:    sw a0, 32(s0)
 ; RV64I-NEXT:    ld a0, 104(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 36(s5)
+; RV64I-NEXT:    sw a0, 28(s0)
 ; RV64I-NEXT:    ld a0, 112(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 32(s5)
+; RV64I-NEXT:    sw a0, 24(s0)
 ; RV64I-NEXT:    ld a0, 120(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 28(s5)
+; RV64I-NEXT:    sw a0, 20(s0)
 ; RV64I-NEXT:    ld a0, 128(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 24(s5)
+; RV64I-NEXT:    sw a0, 16(s0)
 ; RV64I-NEXT:    ld a0, 136(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 20(s5)
+; RV64I-NEXT:    sw a0, 12(s0)
 ; RV64I-NEXT:    ld a0, 144(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 16(s5)
+; RV64I-NEXT:    sw a0, 8(s0)
 ; RV64I-NEXT:    ld a0, 152(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var+12)(s0)
+; RV64I-NEXT:    sw a0, 4(s0)
 ; RV64I-NEXT:    ld a0, 160(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var+8)(s0)
-; RV64I-NEXT:    ld a0, 168(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var+4)(s0)
-; RV64I-NEXT:    ld a0, 176(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var)(s0)
-; RV64I-NEXT:    ld ra, 280(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s0, 272(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s1, 264(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s2, 256(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s3, 248(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s4, 240(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s5, 232(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s6, 224(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s7, 216(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s8, 208(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s9, 200(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s10, 192(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s11, 184(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    addi sp, sp, 288
+; RV64I-NEXT:    sw a0, 0(s0)
+; RV64I-NEXT:    ld ra, 264(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s0, 256(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 248(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 240(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 232(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 224(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s5, 216(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s6, 208(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s7, 200(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s8, 192(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s9, 184(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s10, 176(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s11, 168(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 272
 ; RV64I-NEXT:    ret
 ;
 ; RV64I-LP64E-LABEL: caller:
@@ -1909,135 +1878,134 @@ define void @caller() nounwind {
 ; RV64I-LP64E-NEXT:    sd s0, 256(sp) # 8-byte Folded Spill
 ; RV64I-LP64E-NEXT:    sd s1, 248(sp) # 8-byte Folded Spill
 ; RV64I-LP64E-NEXT:    lui a0, %hi(var)
-; RV64I-LP64E-NEXT:    lw a1, %lo(var)(a0)
-; RV64I-LP64E-NEXT:    sd a1, 240(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a1, %lo(var+4)(a0)
-; RV64I-LP64E-NEXT:    sd a1, 232(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a1, %lo(var+8)(a0)
-; RV64I-LP64E-NEXT:    sd a1, 224(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a1, %lo(var+12)(a0)
-; RV64I-LP64E-NEXT:    sd a1, 216(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    addi s1, a0, %lo(var)
-; RV64I-LP64E-NEXT:    lw a0, 16(s1)
+; RV64I-LP64E-NEXT:    addi s0, a0, %lo(var)
+; RV64I-LP64E-NEXT:    lw a0, 0(s0)
+; RV64I-LP64E-NEXT:    sd a0, 240(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a0, 4(s0)
+; RV64I-LP64E-NEXT:    sd a0, 232(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a0, 8(s0)
+; RV64I-LP64E-NEXT:    sd a0, 224(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a0, 12(s0)
+; RV64I-LP64E-NEXT:    sd a0, 216(sp) # 8-byte Folded Spill
+; RV64I-LP64E-NEXT:    lw a0, 16(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 208(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 20(s1)
+; RV64I-LP64E-NEXT:    lw a0, 20(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 200(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 24(s1)
+; RV64I-LP64E-NEXT:    lw a0, 24(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 192(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 28(s1)
+; RV64I-LP64E-NEXT:    lw a0, 28(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 184(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 32(s1)
+; RV64I-LP64E-NEXT:    lw a0, 32(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 176(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 36(s1)
+; RV64I-LP64E-NEXT:    lw a0, 36(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 168(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 40(s1)
+; RV64I-LP64E-NEXT:    lw a0, 40(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 160(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 44(s1)
+; RV64I-LP64E-NEXT:    lw a0, 44(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 152(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 48(s1)
+; RV64I-LP64E-NEXT:    lw a0, 48(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 144(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 52(s1)
+; RV64I-LP64E-NEXT:    lw a0, 52(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 136(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 56(s1)
+; RV64I-LP64E-NEXT:    lw a0, 56(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 128(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 60(s1)
+; RV64I-LP64E-NEXT:    lw a0, 60(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 120(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 64(s1)
+; RV64I-LP64E-NEXT:    lw a0, 64(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 112(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 68(s1)
+; RV64I-LP64E-NEXT:    lw a0, 68(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 104(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 72(s1)
+; RV64I-LP64E-NEXT:    lw a0, 72(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 96(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 76(s1)
+; RV64I-LP64E-NEXT:    lw a0, 76(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 88(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 80(s1)
+; RV64I-LP64E-NEXT:    lw a0, 80(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 80(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 84(s1)
+; RV64I-LP64E-NEXT:    lw a0, 84(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 72(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 88(s1)
+; RV64I-LP64E-NEXT:    lw a0, 88(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 64(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 92(s1)
+; RV64I-LP64E-NEXT:    lw a0, 92(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 56(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 96(s1)
+; RV64I-LP64E-NEXT:    lw a0, 96(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 100(s1)
+; RV64I-LP64E-NEXT:    lw a0, 100(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 104(s1)
+; RV64I-LP64E-NEXT:    lw a0, 104(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 108(s1)
+; RV64I-LP64E-NEXT:    lw a0, 108(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 112(s1)
+; RV64I-LP64E-NEXT:    lw a0, 112(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 116(s1)
+; RV64I-LP64E-NEXT:    lw a0, 116(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw a0, 120(s1)
+; RV64I-LP64E-NEXT:    lw a0, 120(s0)
 ; RV64I-LP64E-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64I-LP64E-NEXT:    lw s0, 124(s1)
+; RV64I-LP64E-NEXT:    lw s1, 124(s0)
 ; RV64I-LP64E-NEXT:    call callee
-; RV64I-LP64E-NEXT:    sw s0, 124(s1)
+; RV64I-LP64E-NEXT:    sw s1, 124(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 120(s1)
+; RV64I-LP64E-NEXT:    sw a0, 120(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 116(s1)
+; RV64I-LP64E-NEXT:    sw a0, 116(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 112(s1)
+; RV64I-LP64E-NEXT:    sw a0, 112(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 108(s1)
+; RV64I-LP64E-NEXT:    sw a0, 108(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 104(s1)
+; RV64I-LP64E-NEXT:    sw a0, 104(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 100(s1)
+; RV64I-LP64E-NEXT:    sw a0, 100(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 96(s1)
+; RV64I-LP64E-NEXT:    sw a0, 96(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 56(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 92(s1)
+; RV64I-LP64E-NEXT:    sw a0, 92(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 64(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 88(s1)
+; RV64I-LP64E-NEXT:    sw a0, 88(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 72(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 84(s1)
+; RV64I-LP64E-NEXT:    sw a0, 84(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 80(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 80(s1)
+; RV64I-LP64E-NEXT:    sw a0, 80(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 88(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 76(s1)
+; RV64I-LP64E-NEXT:    sw a0, 76(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 96(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 72(s1)
+; RV64I-LP64E-NEXT:    sw a0, 72(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 104(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 68(s1)
+; RV64I-LP64E-NEXT:    sw a0, 68(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 112(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 64(s1)
+; RV64I-LP64E-NEXT:    sw a0, 64(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 120(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 60(s1)
+; RV64I-LP64E-NEXT:    sw a0, 60(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 128(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 56(s1)
+; RV64I-LP64E-NEXT:    sw a0, 56(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 136(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 52(s1)
+; RV64I-LP64E-NEXT:    sw a0, 52(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 144(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 48(s1)
+; RV64I-LP64E-NEXT:    sw a0, 48(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 152(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 44(s1)
+; RV64I-LP64E-NEXT:    sw a0, 44(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 160(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 40(s1)
+; RV64I-LP64E-NEXT:    sw a0, 40(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 168(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 36(s1)
+; RV64I-LP64E-NEXT:    sw a0, 36(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 176(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 32(s1)
+; RV64I-LP64E-NEXT:    sw a0, 32(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 184(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 28(s1)
+; RV64I-LP64E-NEXT:    sw a0, 28(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 192(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 24(s1)
+; RV64I-LP64E-NEXT:    sw a0, 24(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 200(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 20(s1)
+; RV64I-LP64E-NEXT:    sw a0, 20(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 208(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, 16(s1)
-; RV64I-LP64E-NEXT:    lui a1, %hi(var)
+; RV64I-LP64E-NEXT:    sw a0, 16(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 216(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var+12)(a1)
+; RV64I-LP64E-NEXT:    sw a0, 12(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 224(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var+8)(a1)
+; RV64I-LP64E-NEXT:    sw a0, 8(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 232(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var+4)(a1)
+; RV64I-LP64E-NEXT:    sw a0, 4(s0)
 ; RV64I-LP64E-NEXT:    ld a0, 240(sp) # 8-byte Folded Reload
-; RV64I-LP64E-NEXT:    sw a0, %lo(var)(a1)
+; RV64I-LP64E-NEXT:    sw a0, 0(s0)
 ; RV64I-LP64E-NEXT:    ld ra, 264(sp) # 8-byte Folded Reload
 ; RV64I-LP64E-NEXT:    ld s0, 256(sp) # 8-byte Folded Reload
 ; RV64I-LP64E-NEXT:    ld s1, 248(sp) # 8-byte Folded Reload
@@ -2061,119 +2029,117 @@ define void @caller() nounwind {
 ; RV64I-WITH-FP-NEXT:    sd s10, 192(sp) # 8-byte Folded Spill
 ; RV64I-WITH-FP-NEXT:    sd s11, 184(sp) # 8-byte Folded Spill
 ; RV64I-WITH-FP-NEXT:    addi s0, sp, 288
-; RV64I-WITH-FP-NEXT:    lui s1, %hi(var)
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var)(s1)
+; RV64I-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV64I-WITH-FP-NEXT:    addi s1, a0, %lo(var)
+; RV64I-WITH-FP-NEXT:    lw a0, 0(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -112(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var+4)(s1)
+; RV64I-WITH-FP-NEXT:    lw a0, 4(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -120(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var+8)(s1)
+; RV64I-WITH-FP-NEXT:    lw a0, 8(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -128(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, %lo(var+12)(s1)
+; RV64I-WITH-FP-NEXT:    lw a0, 12(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -136(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    addi s6, s1, %lo(var)
-; RV64I-WITH-FP-NEXT:    lw a0, 16(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 16(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -144(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 20(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 20(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -152(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 24(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 24(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -160(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 28(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 28(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -168(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 32(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 32(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -176(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 36(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 36(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -184(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 40(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 40(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -192(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 44(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 44(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -200(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 48(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 48(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -208(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 52(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 52(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -216(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 56(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 56(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -224(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 60(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 60(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -232(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 64(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 64(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -240(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 68(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 68(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -248(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 72(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 72(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -256(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 76(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 76(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -264(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 80(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 80(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -272(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 84(s6)
+; RV64I-WITH-FP-NEXT:    lw a0, 84(s1)
 ; RV64I-WITH-FP-NEXT:    sd a0, -280(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw a0, 88(s6)
-; RV64I-WITH-FP-NEXT:    sd a0, -288(s0) # 8-byte Folded Spill
-; RV64I-WITH-FP-NEXT:    lw s8, 92(s6)
-; RV64I-WITH-FP-NEXT:    lw s9, 96(s6)
-; RV64I-WITH-FP-NEXT:    lw s10, 100(s6)
-; RV64I-WITH-FP-NEXT:    lw s11, 104(s6)
-; RV64I-WITH-FP-NEXT:    lw s2, 108(s6)
-; RV64I-WITH-FP-NEXT:    lw s3, 112(s6)
-; RV64I-WITH-FP-NEXT:    lw s4, 116(s6)
-; RV64I-WITH-FP-NEXT:    lw s5, 120(s6)
-; RV64I-WITH-FP-NEXT:    lw s7, 124(s6)
+; RV64I-WITH-FP-NEXT:    lw s4, 88(s1)
+; RV64I-WITH-FP-NEXT:    lw s5, 92(s1)
+; RV64I-WITH-FP-NEXT:    lw s6, 96(s1)
+; RV64I-WITH-FP-NEXT:    lw s7, 100(s1)
+; RV64I-WITH-FP-NEXT:    lw s8, 104(s1)
+; RV64I-WITH-FP-NEXT:    lw s9, 108(s1)
+; RV64I-WITH-FP-NEXT:    lw s10, 112(s1)
+; RV64I-WITH-FP-NEXT:    lw s11, 116(s1)
+; RV64I-WITH-FP-NEXT:    lw s2, 120(s1)
+; RV64I-WITH-FP-NEXT:    lw s3, 124(s1)
 ; RV64I-WITH-FP-NEXT:    call callee
-; RV64I-WITH-FP-NEXT:    sw s7, 124(s6)
-; RV64I-WITH-FP-NEXT:    sw s5, 120(s6)
-; RV64I-WITH-FP-NEXT:    sw s4, 116(s6)
-; RV64I-WITH-FP-NEXT:    sw s3, 112(s6)
-; RV64I-WITH-FP-NEXT:    sw s2, 108(s6)
-; RV64I-WITH-FP-NEXT:    sw s11, 104(s6)
-; RV64I-WITH-FP-NEXT:    sw s10, 100(s6)
-; RV64I-WITH-FP-NEXT:    sw s9, 96(s6)
-; RV64I-WITH-FP-NEXT:    sw s8, 92(s6)
-; RV64I-WITH-FP-NEXT:    ld a0, -288(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 88(s6)
+; RV64I-WITH-FP-NEXT:    sw s3, 124(s1)
+; RV64I-WITH-FP-NEXT:    sw s2, 120(s1)
+; RV64I-WITH-FP-NEXT:    sw s11, 116(s1)
+; RV64I-WITH-FP-NEXT:    sw s10, 112(s1)
+; RV64I-WITH-FP-NEXT:    sw s9, 108(s1)
+; RV64I-WITH-FP-NEXT:    sw s8, 104(s1)
+; RV64I-WITH-FP-NEXT:    sw s7, 100(s1)
+; RV64I-WITH-FP-NEXT:    sw s6, 96(s1)
+; RV64I-WITH-FP-NEXT:    sw s5, 92(s1)
+; RV64I-WITH-FP-NEXT:    sw s4, 88(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -280(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 84(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 84(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -272(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 80(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 80(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -264(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 76(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 76(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -256(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 72(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 72(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -248(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 68(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 68(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -240(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 64(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 64(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -232(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 60(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 60(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -224(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 56(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 56(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -216(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 52(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 52(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -208(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 48(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 48(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -200(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 44(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 44(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -192(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 40(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 40(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -184(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 36(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 36(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -176(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 32(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 32(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -168(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 28(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 28(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -160(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 24(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 24(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -152(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 20(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 20(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -144(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, 16(s6)
+; RV64I-WITH-FP-NEXT:    sw a0, 16(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -136(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var+12)(s1)
+; RV64I-WITH-FP-NEXT:    sw a0, 12(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -128(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var+8)(s1)
+; RV64I-WITH-FP-NEXT:    sw a0, 8(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -120(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var+4)(s1)
+; RV64I-WITH-FP-NEXT:    sw a0, 4(s1)
 ; RV64I-WITH-FP-NEXT:    ld a0, -112(s0) # 8-byte Folded Reload
-; RV64I-WITH-FP-NEXT:    sw a0, %lo(var)(s1)
+; RV64I-WITH-FP-NEXT:    sw a0, 0(s1)
 ; RV64I-WITH-FP-NEXT:    ld ra, 280(sp) # 8-byte Folded Reload
 ; RV64I-WITH-FP-NEXT:    ld s0, 272(sp) # 8-byte Folded Reload
 ; RV64I-WITH-FP-NEXT:    ld s1, 264(sp) # 8-byte Folded Reload
@@ -2194,117 +2160,115 @@ define void @caller() nounwind {
 ; RV64IZCMP:       # %bb.0:
 ; RV64IZCMP-NEXT:    cm.push {ra, s0-s11}, -160
 ; RV64IZCMP-NEXT:    addi sp, sp, -128
-; RV64IZCMP-NEXT:    lui s0, %hi(var)
-; RV64IZCMP-NEXT:    lw a0, %lo(var)(s0)
+; RV64IZCMP-NEXT:    lui a0, %hi(var)
+; RV64IZCMP-NEXT:    addi s0, a0, %lo(var)
+; RV64IZCMP-NEXT:    lw a0, 0(s0)
 ; RV64IZCMP-NEXT:    sd a0, 168(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var+4)(s0)
+; RV64IZCMP-NEXT:    lw a0, 4(s0)
 ; RV64IZCMP-NEXT:    sd a0, 160(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var+8)(s0)
+; RV64IZCMP-NEXT:    lw a0, 8(s0)
 ; RV64IZCMP-NEXT:    sd a0, 152(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var+12)(s0)
+; RV64IZCMP-NEXT:    lw a0, 12(s0)
 ; RV64IZCMP-NEXT:    sd a0, 144(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    addi s1, s0, %lo(var)
-; RV64IZCMP-NEXT:    lw a0, 16(s1)
+; RV64IZCMP-NEXT:    lw a0, 16(s0)
 ; RV64IZCMP-NEXT:    sd a0, 136(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 20(s1)
+; RV64IZCMP-NEXT:    lw a0, 20(s0)
 ; RV64IZCMP-NEXT:    sd a0, 128(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 24(s1)
+; RV64IZCMP-NEXT:    lw a0, 24(s0)
 ; RV64IZCMP-NEXT:    sd a0, 120(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 28(s1)
+; RV64IZCMP-NEXT:    lw a0, 28(s0)
 ; RV64IZCMP-NEXT:    sd a0, 112(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 32(s1)
+; RV64IZCMP-NEXT:    lw a0, 32(s0)
 ; RV64IZCMP-NEXT:    sd a0, 104(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 36(s1)
+; RV64IZCMP-NEXT:    lw a0, 36(s0)
 ; RV64IZCMP-NEXT:    sd a0, 96(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 40(s1)
+; RV64IZCMP-NEXT:    lw a0, 40(s0)
 ; RV64IZCMP-NEXT:    sd a0, 88(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 44(s1)
+; RV64IZCMP-NEXT:    lw a0, 44(s0)
 ; RV64IZCMP-NEXT:    sd a0, 80(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 48(s1)
+; RV64IZCMP-NEXT:    lw a0, 48(s0)
 ; RV64IZCMP-NEXT:    sd a0, 72(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 52(s1)
+; RV64IZCMP-NEXT:    lw a0, 52(s0)
 ; RV64IZCMP-NEXT:    sd a0, 64(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 56(s1)
+; RV64IZCMP-NEXT:    lw a0, 56(s0)
 ; RV64IZCMP-NEXT:    sd a0, 56(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 60(s1)
+; RV64IZCMP-NEXT:    lw a0, 60(s0)
 ; RV64IZCMP-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 64(s1)
+; RV64IZCMP-NEXT:    lw a0, 64(s0)
 ; RV64IZCMP-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 68(s1)
+; RV64IZCMP-NEXT:    lw a0, 68(s0)
 ; RV64IZCMP-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 72(s1)
+; RV64IZCMP-NEXT:    lw a0, 72(s0)
 ; RV64IZCMP-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 76(s1)
+; RV64IZCMP-NEXT:    lw a0, 76(s0)
 ; RV64IZCMP-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 80(s1)
+; RV64IZCMP-NEXT:    lw a0, 80(s0)
 ; RV64IZCMP-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 84(s1)
-; RV64IZCMP-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw s4, 88(s1)
-; RV64IZCMP-NEXT:    lw s5, 92(s1)
-; RV64IZCMP-NEXT:    lw s6, 96(s1)
-; RV64IZCMP-NEXT:    lw s7, 100(s1)
-; RV64IZCMP-NEXT:    lw s8, 104(s1)
-; RV64IZCMP-NEXT:    lw s9, 108(s1)
-; RV64IZCMP-NEXT:    lw s10, 112(s1)
-; RV64IZCMP-NEXT:    lw s11, 116(s1)
-; RV64IZCMP-NEXT:    lw s2, 120(s1)
-; RV64IZCMP-NEXT:    lw s3, 124(s1)
+; RV64IZCMP-NEXT:    lw s1, 84(s0)
+; RV64IZCMP-NEXT:    lw s2, 88(s0)
+; RV64IZCMP-NEXT:    lw s3, 92(s0)
+; RV64IZCMP-NEXT:    lw s4, 96(s0)
+; RV64IZCMP-NEXT:    lw s5, 100(s0)
+; RV64IZCMP-NEXT:    lw s6, 104(s0)
+; RV64IZCMP-NEXT:    lw s7, 108(s0)
+; RV64IZCMP-NEXT:    lw s8, 112(s0)
+; RV64IZCMP-NEXT:    lw s9, 116(s0)
+; RV64IZCMP-NEXT:    lw s10, 120(s0)
+; RV64IZCMP-NEXT:    lw s11, 124(s0)
 ; RV64IZCMP-NEXT:    call callee
-; RV64IZCMP-NEXT:    sw s3, 124(s1)
-; RV64IZCMP-NEXT:    sw s2, 120(s1)
-; RV64IZCMP-NEXT:    sw s11, 116(s1)
-; RV64IZCMP-NEXT:    sw s10, 112(s1)
-; RV64IZCMP-NEXT:    sw s9, 108(s1)
-; RV64IZCMP-NEXT:    sw s8, 104(s1)
-; RV64IZCMP-NEXT:    sw s7, 100(s1)
-; RV64IZCMP-NEXT:    sw s6, 96(s1)
-; RV64IZCMP-NEXT:    sw s5, 92(s1)
-; RV64IZCMP-NEXT:    sw s4, 88(s1)
-; RV64IZCMP-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 84(s1)
+; RV64IZCMP-NEXT:    sw s11, 124(s0)
+; RV64IZCMP-NEXT:    sw s10, 120(s0)
+; RV64IZCMP-NEXT:    sw s9, 116(s0)
+; RV64IZCMP-NEXT:    sw s8, 112(s0)
+; RV64IZCMP-NEXT:    sw s7, 108(s0)
+; RV64IZCMP-NEXT:    sw s6, 104(s0)
+; RV64IZCMP-NEXT:    sw s5, 100(s0)
+; RV64IZCMP-NEXT:    sw s4, 96(s0)
+; RV64IZCMP-NEXT:    sw s3, 92(s0)
+; RV64IZCMP-NEXT:    sw s2, 88(s0)
+; RV64IZCMP-NEXT:    sw s1, 84(s0)
 ; RV64IZCMP-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 80(s1)
+; RV64IZCMP-NEXT:    sw a0, 80(s0)
 ; RV64IZCMP-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 76(s1)
+; RV64IZCMP-NEXT:    sw a0, 76(s0)
 ; RV64IZCMP-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 72(s1)
+; RV64IZCMP-NEXT:    sw a0, 72(s0)
 ; RV64IZCMP-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 68(s1)
+; RV64IZCMP-NEXT:    sw a0, 68(s0)
 ; RV64IZCMP-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 64(s1)
+; RV64IZCMP-NEXT:    sw a0, 64(s0)
 ; RV64IZCMP-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 60(s1)
+; RV64IZCMP-NEXT:    sw a0, 60(s0)
 ; RV64IZCMP-NEXT:    ld a0, 56(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 56(s1)
+; RV64IZCMP-NEXT:    sw a0, 56(s0)
 ; RV64IZCMP-NEXT:    ld a0, 64(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 52(s1)
+; RV64IZCMP-NEXT:    sw a0, 52(s0)
 ; RV64IZCMP-NEXT:    ld a0, 72(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 48(s1)
+; RV64IZCMP-NEXT:    sw a0, 48(s0)
 ; RV64IZCMP-NEXT:    ld a0, 80(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 44(s1)
+; RV64IZCMP-NEXT:    sw a0, 44(s0)
 ; RV64IZCMP-NEXT:    ld a0, 88(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 40(s1)
+; RV64IZCMP-NEXT:    sw a0, 40(s0)
 ; RV64IZCMP-NEXT:    ld a0, 96(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 36(s1)
+; RV64IZCMP-NEXT:    sw a0, 36(s0)
 ; RV64IZCMP-NEXT:    ld a0, 104(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 32(s1)
+; RV64IZCMP-NEXT:    sw a0, 32(s0)
 ; RV64IZCMP-NEXT:    ld a0, 112(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 28(s1)
+; RV64IZCMP-NEXT:    sw a0, 28(s0)
 ; RV64IZCMP-NEXT:    ld a0, 120(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 24(s1)
+; RV64IZCMP-NEXT:    sw a0, 24(s0)
 ; RV64IZCMP-NEXT:    ld a0, 128(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 20(s1)
+; RV64IZCMP-NEXT:    sw a0, 20(s0)
 ; RV64IZCMP-NEXT:    ld a0, 136(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 16(s1)
+; RV64IZCMP-NEXT:    sw a0, 16(s0)
 ; RV64IZCMP-NEXT:    ld a0, 144(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var+12)(s0)
+; RV64IZCMP-NEXT:    sw a0, 12(s0)
 ; RV64IZCMP-NEXT:    ld a0, 152(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var+8)(s0)
+; RV64IZCMP-NEXT:    sw a0, 8(s0)
 ; RV64IZCMP-NEXT:    ld a0, 160(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var+4)(s0)
+; RV64IZCMP-NEXT:    sw a0, 4(s0)
 ; RV64IZCMP-NEXT:    ld a0, 168(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var)(s0)
+; RV64IZCMP-NEXT:    sw a0, 0(s0)
 ; RV64IZCMP-NEXT:    addi sp, sp, 128
 ; RV64IZCMP-NEXT:    cm.popret {ra, s0-s11}, 160
 ;
@@ -2325,16 +2289,16 @@ define void @caller() nounwind {
 ; RV64IZCMP-WITH-FP-NEXT:    sd s10, 192(sp) # 8-byte Folded Spill
 ; RV64IZCMP-WITH-FP-NEXT:    sd s11, 184(sp) # 8-byte Folded Spill
 ; RV64IZCMP-WITH-FP-NEXT:    addi s0, sp, 288
-; RV64IZCMP-WITH-FP-NEXT:    lui s6, %hi(var)
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    lui a0, %hi(var)
+; RV64IZCMP-WITH-FP-NEXT:    addi s1, a0, %lo(var)
+; RV64IZCMP-WITH-FP-NEXT:    lw a0, 0(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -112(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+4)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    lw a0, 4(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -120(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+8)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    lw a0, 8(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -128(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, %lo(var+12)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    lw a0, 12(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -136(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    addi s1, s6, %lo(var)
 ; RV64IZCMP-WITH-FP-NEXT:    lw a0, 16(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -144(s0) # 8-byte Folded Spill
 ; RV64IZCMP-WITH-FP-NEXT:    lw a0, 20(s1)
@@ -2371,29 +2335,27 @@ define void @caller() nounwind {
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -272(s0) # 8-byte Folded Spill
 ; RV64IZCMP-WITH-FP-NEXT:    lw a0, 84(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    sd a0, -280(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw a0, 88(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sd a0, -288(s0) # 8-byte Folded Spill
-; RV64IZCMP-WITH-FP-NEXT:    lw s8, 92(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s9, 96(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s10, 100(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s11, 104(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s2, 108(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s3, 112(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s4, 116(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s5, 120(s1)
-; RV64IZCMP-WITH-FP-NEXT:    lw s7, 124(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s4, 88(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s5, 92(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s6, 96(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s7, 100(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s8, 104(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s9, 108(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s10, 112(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s11, 116(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s2, 120(s1)
+; RV64IZCMP-WITH-FP-NEXT:    lw s3, 124(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    call callee
-; RV64IZCMP-WITH-FP-NEXT:    sw s7, 124(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s5, 120(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s4, 116(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s3, 112(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s2, 108(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s11, 104(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s10, 100(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s9, 96(s1)
-; RV64IZCMP-WITH-FP-NEXT:    sw s8, 92(s1)
-; RV64IZCMP-WITH-FP-NEXT:    ld a0, -288(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, 88(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s3, 124(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s2, 120(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s11, 116(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s10, 112(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s9, 108(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s8, 104(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s7, 100(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s6, 96(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s5, 92(s1)
+; RV64IZCMP-WITH-FP-NEXT:    sw s4, 88(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -280(s0) # 8-byte Folded Reload
 ; RV64IZCMP-WITH-FP-NEXT:    sw a0, 84(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -272(s0) # 8-byte Folded Reload
@@ -2431,13 +2393,13 @@ define void @caller() nounwind {
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -144(s0) # 8-byte Folded Reload
 ; RV64IZCMP-WITH-FP-NEXT:    sw a0, 16(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -136(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+12)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    sw a0, 12(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -128(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+8)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    sw a0, 8(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -120(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var+4)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    sw a0, 4(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld a0, -112(s0) # 8-byte Folded Reload
-; RV64IZCMP-WITH-FP-NEXT:    sw a0, %lo(var)(s6)
+; RV64IZCMP-WITH-FP-NEXT:    sw a0, 0(s1)
 ; RV64IZCMP-WITH-FP-NEXT:    ld ra, 280(sp) # 8-byte Folded Reload
 ; RV64IZCMP-WITH-FP-NEXT:    ld s0, 272(sp) # 8-byte Folded Reload
 ; RV64IZCMP-WITH-FP-NEXT:    ld s1, 264(sp) # 8-byte Folded Reload
diff --git a/llvm/test/CodeGen/RISCV/double-mem.ll b/llvm/test/CodeGen/RISCV/double-mem.ll
index 38cb52b6f4b30..017e06924156a 100644
--- a/llvm/test/CodeGen/RISCV/double-mem.ll
+++ b/llvm/test/CodeGen/RISCV/double-mem.ll
@@ -84,37 +84,37 @@ define dso_local double @fld_fsd_global(double %a, double %b) nounwind {
 ; CHECKIFD:       # %bb.0:
 ; CHECKIFD-NEXT:    fadd.d fa0, fa0, fa1
 ; CHECKIFD-NEXT:    lui a0, %hi(G)
-; CHECKIFD-NEXT:    fld fa5, %lo(G)(a0)
-; CHECKIFD-NEXT:    addi a1, a0, %lo(G)
-; CHECKIFD-NEXT:    fsd fa0, %lo(G)(a0)
-; CHECKIFD-NEXT:    fld fa5, 72(a1)
-; CHECKIFD-NEXT:    fsd fa0, 72(a1)
+; CHECKIFD-NEXT:    addi a0, a0, %lo(G)
+; CHECKIFD-NEXT:    fld fa5, 0(a0)
+; CHECKIFD-NEXT:    fsd fa0, 0(a0)
+; CHECKIFD-NEXT:    fld fa5, 72(a0)
+; CHECKIFD-NEXT:    fsd fa0, 72(a0)
 ; CHECKIFD-NEXT:    ret
 ;
 ; RV32IZFINXZDINX-LABEL: fld_fsd_global:
 ; RV32IZFINXZDINX:       # %bb.0:
 ; RV32IZFINXZDINX-NEXT:    fadd.d a0, a0, a2
 ; RV32IZFINXZDINX-NEXT:    lui a2, %hi(G)
-; RV32IZFINXZDINX-NEXT:    lw a4, %lo(G)(a2)
-; RV32IZFINXZDINX-NEXT:    lw a5, %lo(G+4)(a2)
-; RV32IZFINXZDINX-NEXT:    addi a3, a2, %lo(G)
-; RV32IZFINXZDINX-NEXT:    sw a0, %lo(G)(a2)
-; RV32IZFINXZDINX-NEXT:    sw a1, %lo(G+4)(a2)
-; RV32IZFINXZDINX-NEXT:    lw a4, 72(a3)
-; RV32IZFINXZDINX-NEXT:    lw a5, 76(a3)
-; RV32IZFINXZDINX-NEXT:    sw a0, 72(a3)
-; RV32IZFINXZDINX-NEXT:    sw a1, 76(a3)
+; RV32IZFINXZDINX-NEXT:    addi a2, a2, %lo(G)
+; RV32IZFINXZDINX-NEXT:    lw a4, 0(a2)
+; RV32IZFINXZDINX-NEXT:    lw a5, 4(a2)
+; RV32IZFINXZDINX-NEXT:    sw a0, 0(a2)
+; RV32IZFINXZDINX-NEXT:    sw a1, 4(a2)
+; RV32IZFINXZDINX-NEXT:    lw a4, 72(a2)
+; RV32IZFINXZDINX-NEXT:    lw a5, 76(a2)
+; RV32IZFINXZDINX-NEXT:    sw a0, 72(a2)
+; RV32IZFINXZDINX-NEXT:    sw a1, 76(a2)
 ; RV32IZFINXZDINX-NEXT:    ret
 ;
 ; RV64IZFINXZDINX-LABEL: fld_fsd_global:
 ; RV64IZFINXZDINX:       # %bb.0:
 ; RV64IZFINXZDINX-NEXT:    fadd.d a0, a0, a1
 ; RV64IZFINXZDINX-NEXT:    lui a1, %hi(G)
-; RV64IZFINXZDINX-NEXT:    ld zero, %lo(G)(a1)
-; RV64IZFINXZDINX-NEXT:    addi a2, a1, %lo(G)
-; RV64IZFINXZDINX-NEXT:    sd a0, %lo(G)(a1)
-; RV64IZFINXZDINX-NEXT:    ld zero, 72(a2)
-; RV64IZFINXZDINX-NEXT:    sd a0, 72(a2)
+; RV64IZFINXZDINX-NEXT:    addi a1, a1, %lo(G)
+; RV64IZFINXZDINX-NEXT:    ld zero, 0(a1)
+; RV64IZFINXZDINX-NEXT:    sd a0, 0(a1)
+; RV64IZFINXZDINX-NEXT:    ld zero, 72(a1)
+; RV64IZFINXZDINX-NEXT:    sd a0, 72(a1)
 ; RV64IZFINXZDINX-NEXT:    ret
 ; Use %a and %b in an FP op to ensure floating point registers are used, even
 ; for the soft float ABI
diff --git a/llvm/test/CodeGen/RISCV/float-mem.ll b/llvm/test/CodeGen/RISCV/float-mem.ll
index 3779d39a753e1..55fe5dc598dfb 100644
--- a/llvm/test/CodeGen/RISCV/float-mem.ll
+++ b/llvm/test/CodeGen/RISCV/float-mem.ll
@@ -64,22 +64,22 @@ define dso_local float @flw_fsw_global(float %a, float %b) nounwind {
 ; CHECKIF:       # %bb.0:
 ; CHECKIF-NEXT:    fadd.s fa0, fa0, fa1
 ; CHECKIF-NEXT:    lui a0, %hi(G)
-; CHECKIF-NEXT:    flw fa5, %lo(G)(a0)
-; CHECKIF-NEXT:    addi a1, a0, %lo(G)
-; CHECKIF-NEXT:    fsw fa0, %lo(G)(a0)
-; CHECKIF-NEXT:    flw fa5, 36(a1)
-; CHECKIF-NEXT:    fsw fa0, 36(a1)
+; CHECKIF-NEXT:    addi a0, a0, %lo(G)
+; CHECKIF-NEXT:    flw fa5, 0(a0)
+; CHECKIF-NEXT:    fsw fa0, 0(a0)
+; CHECKIF-NEXT:    flw fa5, 36(a0)
+; CHECKIF-NEXT:    fsw fa0, 36(a0)
 ; CHECKIF-NEXT:    ret
 ;
 ; CHECKIZFINX-LABEL: flw_fsw_global:
 ; CHECKIZFINX:       # %bb.0:
 ; CHECKIZFINX-NEXT:    fadd.s a0, a0, a1
 ; CHECKIZFINX-NEXT:    lui a1, %hi(G)
-; CHECKIZFINX-NEXT:    lw zero, %lo(G)(a1)
-; CHECKIZFINX-NEXT:    addi a2, a1, %lo(G)
-; CHECKIZFINX-NEXT:    sw a0, %lo(G)(a1)
-; CHECKIZFINX-NEXT:    lw zero, 36(a2)
-; CHECKIZFINX-NEXT:    sw a0, 36(a2)
+; CHECKIZFINX-NEXT:    addi a1, a1, %lo(G)
+; CHECKIZFINX-NEXT:    lw zero, 0(a1)
+; CHECKIZFINX-NEXT:    sw a0, 0(a1)
+; CHECKIZFINX-NEXT:    lw zero, 36(a1)
+; CHECKIZFINX-NEXT:    sw a0, 36(a1)
 ; CHECKIZFINX-NEXT:    ret
   %1 = fadd float %a, %b
   %2 = load volatile float, ptr @G
diff --git a/llvm/test/CodeGen/RISCV/fold-addi-loadstore.ll b/llvm/test/CodeGen/RISCV/fold-addi-loadstore.ll
index 3c2e84689c979..2a00604dd07a0 100644
--- a/llvm/test/CodeGen/RISCV/fold-addi-loadstore.ll
+++ b/llvm/test/CodeGen/RISCV/fold-addi-loadstore.ll
@@ -59,9 +59,9 @@ entry:
 define dso_local i64 @load_g_1() nounwind {
 ; RV32I-LABEL: load_g_1:
 ; RV32I:       # %bb.0: # %entry
-; RV32I-NEXT:    lui a1, %hi(g_1)
-; RV32I-NEXT:    lw a0, %lo(g_1)(a1)
-; RV32I-NEXT:    addi a1, a1, %lo(g_1)
+; RV32I-NEXT:    lui a0, %hi(g_1)
+; RV32I-NEXT:    addi a1, a0, %lo(g_1)
+; RV32I-NEXT:    lw a0, 0(a1)
 ; RV32I-NEXT:    lw a1, 4(a1)
 ; RV32I-NEXT:    ret
 ;
@@ -94,9 +94,9 @@ entry:
 define dso_local i64 @load_g_2() nounwind {
 ; RV32I-LABEL: load_g_2:
 ; RV32I:       # %bb.0: # %entry
-; RV32I-NEXT:    lui a1, %hi(g_2)
-; RV32I-NEXT:    lw a0, %lo(g_2)(a1)
-; RV32I-NEXT:    addi a1, a1, %lo(g_2)
+; RV32I-NEXT:    lui a0, %hi(g_2)
+; RV32I-NEXT:    addi a1, a0, %lo(g_2)
+; RV32I-NEXT:    lw a0, 0(a1)
 ; RV32I-NEXT:    lw a1, 4(a1)
 ; RV32I-NEXT:    ret
 ;
@@ -129,9 +129,9 @@ entry:
 define dso_local i64 @load_g_4() nounwind {
 ; RV32I-LABEL: load_g_4:
 ; RV32I:       # %bb.0: # %entry
-; RV32I-NEXT:    lui a1, %hi(g_4)
-; RV32I-NEXT:    lw a0, %lo(g_4)(a1)
-; RV32I-NEXT:    addi a1, a1, %lo(g_4)
+; RV32I-NEXT:    lui a0, %hi(g_4)
+; RV32I-NEXT:    addi a1, a0, %lo(g_4)
+; RV32I-NEXT:    lw a0, 0(a1)
 ; RV32I-NEXT:    lw a1, 4(a1)
 ; RV32I-NEXT:    ret
 ;
@@ -233,9 +233,9 @@ define dso_local void @store_g_4() nounwind {
 ; RV32I-LABEL: store_g_4:
 ; RV32I:       # %bb.0: # %entry
 ; RV32I-NEXT:    lui a0, %hi(g_4)
-; RV32I-NEXT:    sw zero, %lo(g_4)(a0)
 ; RV32I-NEXT:    addi a0, a0, %lo(g_4)
 ; RV32I-NEXT:    sw zero, 4(a0)
+; RV32I-NEXT:    sw zero, 0(a0)
 ; RV32I-NEXT:    ret
 ;
 ; RV32I-MEDIUM-LABEL: store_g_4:
@@ -547,18 +547,18 @@ define dso_local i64 @load_tl_4() nounwind {
 ; RV32I-LABEL: load_tl_4:
 ; RV32I:       # %bb.0: # %entry
 ; RV32I-NEXT:    lui a0, %tprel_hi(tl_4)
-; RV32I-NEXT:    add a1, a0, tp, %tprel_add(tl_4)
-; RV32I-NEXT:    lw a0, %tprel_lo(tl_4)(a1)
-; RV32I-NEXT:    addi a1, a1, %tprel_lo(tl_4)
+; RV32I-NEXT:    add a0, a0, tp, %tprel_add(tl_4)
+; RV32I-NEXT:    addi a1, a0, %tprel_lo(tl_4)
+; RV32I-NEXT:    lw a0, 0(a1)
 ; RV32I-NEXT:    lw a1, 4(a1)
 ; RV32I-NEXT:    ret
 ;
 ; RV32I-MEDIUM-LABEL: load_tl_4:
 ; RV32I-MEDIUM:       # %bb.0: # %entry
 ; RV32I-MEDIUM-NEXT:    lui a0, %tprel_hi(tl_4)
-; RV32I-MEDIUM-NEXT:    add a1, a0, tp, %tprel_add(tl_4)
-; RV32I-MEDIUM-NEXT:    lw a0, %tprel_lo(tl_4)(a1)
-; RV32I-MEDIUM-NEXT:    addi a1, a1, %tprel_lo(tl_4)
+; RV32I-MEDIUM-NEXT:    add a0, a0, tp, %tprel_add(tl_4)
+; RV32I-MEDIUM-NEXT:    addi a1, a0, %tprel_lo(tl_4)
+; RV32I-MEDIUM-NEXT:    lw a0, 0(a1)
 ; RV32I-MEDIUM-NEXT:    lw a1, 4(a1)
 ; RV32I-MEDIUM-NEXT:    ret
 ;
diff --git a/llvm/test/CodeGen/RISCV/global-merge-offset.ll b/llvm/test/CodeGen/RISCV/global-merge-offset.ll
index 13afcba181719..3c1e838f7f6cf 100644
--- a/llvm/test/CodeGen/RISCV/global-merge-offset.ll
+++ b/llvm/test/CodeGen/RISCV/global-merge-offset.ll
@@ -22,20 +22,20 @@ define void @f1(i32 %a) nounwind {
 ; CHECK-LABEL: f1:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    lui a1, %hi(.L_MergedGlobals)
-; CHECK-NEXT:    addi a2, a1, %lo(.L_MergedGlobals)
-; CHECK-NEXT:    sw a0, 2044(a2)
-; CHECK-NEXT:    sw a0, 404(a2)
-; CHECK-NEXT:    sw a0, %lo(.L_MergedGlobals)(a1)
+; CHECK-NEXT:    addi a1, a1, %lo(.L_MergedGlobals)
+; CHECK-NEXT:    sw a0, 2044(a1)
+; CHECK-NEXT:    sw a0, 404(a1)
+; CHECK-NEXT:    sw a0, 0(a1)
 ; CHECK-NEXT:    ret
 ;
 ; CHECK-TOOBIG-LABEL: f1:
 ; CHECK-TOOBIG:       # %bb.0:
 ; CHECK-TOOBIG-NEXT:    lui a1, %hi(ga1+1640)
 ; CHECK-TOOBIG-NEXT:    lui a2, %hi(.L_MergedGlobals)
-; CHECK-TOOBIG-NEXT:    addi a3, a2, %lo(.L_MergedGlobals)
+; CHECK-TOOBIG-NEXT:    addi a2, a2, %lo(.L_MergedGlobals)
 ; CHECK-TOOBIG-NEXT:    sw a0, %lo(ga1+1640)(a1)
-; CHECK-TOOBIG-NEXT:    sw a0, 408(a3)
-; CHECK-TOOBIG-NEXT:    sw a0, %lo(.L_MergedGlobals)(a2)
+; CHECK-TOOBIG-NEXT:    sw a0, 408(a2)
+; CHECK-TOOBIG-NEXT:    sw a0, 0(a2)
 ; CHECK-TOOBIG-NEXT:    ret
   %ga1_end = getelementptr inbounds [410 x i32], ptr @ga1, i32 0, i64 410
   %ga2_end = getelementptr inbounds [ArrSize x i32], ptr @ga2, i32 0, i64 ArrSize
diff --git a/llvm/test/CodeGen/RISCV/global-merge.ll b/llvm/test/CodeGen/RISCV/global-merge.ll
index 20379ee2e7dac..2c286119ba52f 100644
--- a/llvm/test/CodeGen/RISCV/global-merge.ll
+++ b/llvm/test/CodeGen/RISCV/global-merge.ll
@@ -18,8 +18,8 @@ define void @f1(i32 %a) nounwind {
 ; CHECK-LABEL: f1:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    lui a1, %hi(.L_MergedGlobals)
-; CHECK-NEXT:    sw a0, %lo(.L_MergedGlobals)(a1)
 ; CHECK-NEXT:    addi a1, a1, %lo(.L_MergedGlobals)
+; CHECK-NEXT:    sw a0, 0(a1)
 ; CHECK-NEXT:    sw a0, 4(a1)
 ; CHECK-NEXT:    sw a0, 8(a1)
 ; CHECK-NEXT:    sw a0, 12(a1)
diff --git a/llvm/test/CodeGen/RISCV/half-mem.ll b/llvm/test/CodeGen/RISCV/half-mem.ll
index 5b6a94a83f94b..8ff342c1b7c3a 100644
--- a/llvm/test/CodeGen/RISCV/half-mem.ll
+++ b/llvm/test/CodeGen/RISCV/half-mem.ll
@@ -112,22 +112,22 @@ define half @flh_fsh_global(half %a, half %b) nounwind {
 ; CHECKIZFH:       # %bb.0:
 ; CHECKIZFH-NEXT:    fadd.h fa0, fa0, fa1
 ; CHECKIZFH-NEXT:    lui a0, %hi(G)
-; CHECKIZFH-NEXT:    flh fa5, %lo(G)(a0)
-; CHECKIZFH-NEXT:    addi a1, a0, %lo(G)
-; CHECKIZFH-NEXT:    fsh fa0, %lo(G)(a0)
-; CHECKIZFH-NEXT:    flh fa5, 18(a1)
-; CHECKIZFH-NEXT:    fsh fa0, 18(a1)
+; CHECKIZFH-NEXT:    addi a0, a0, %lo(G)
+; CHECKIZFH-NEXT:    flh fa5, 0(a0)
+; CHECKIZFH-NEXT:    fsh fa0, 0(a0)
+; CHECKIZFH-NEXT:    flh fa5, 18(a0)
+; CHECKIZFH-NEXT:    fsh fa0, 18(a0)
 ; CHECKIZFH-NEXT:    ret
 ;
 ; CHECKIZHINX-LABEL: flh_fsh_global:
 ; CHECKIZHINX:       # %bb.0:
 ; CHECKIZHINX-NEXT:    fadd.h a0, a0, a1
 ; CHECKIZHINX-NEXT:    lui a1, %hi(G)
-; CHECKIZHINX-NEXT:    lh zero, %lo(G)(a1)
-; CHECKIZHINX-NEXT:    addi a2, a1, %lo(G)
-; CHECKIZHINX-NEXT:    sh a0, %lo(G)(a1)
-; CHECKIZHINX-NEXT:    lh zero, 18(a2)
-; CHECKIZHINX-NEXT:    sh a0, 18(a2)
+; CHECKIZHINX-NEXT:    addi a1, a1, %lo(G)
+; CHECKIZHINX-NEXT:    lh zero, 0(a1)
+; CHECKIZHINX-NEXT:    sh a0, 0(a1)
+; CHECKIZHINX-NEXT:    lh zero, 18(a1)
+; CHECKIZHINX-NEXT:    sh a0, 18(a1)
 ; CHECKIZHINX-NEXT:    ret
 ;
 ; CHECKIZFHMIN-LABEL: flh_fsh_global:
@@ -137,11 +137,11 @@ define half @flh_fsh_global(half %a, half %b) nounwind {
 ; CHECKIZFHMIN-NEXT:    fadd.s fa5, fa4, fa5
 ; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa5
 ; CHECKIZFHMIN-NEXT:    lui a0, %hi(G)
-; CHECKIZFHMIN-NEXT:    flh fa5, %lo(G)(a0)
-; CHECKIZFHMIN-NEXT:    addi a1, a0, %lo(G)
-; CHECKIZFHMIN-NEXT:    fsh fa0, %lo(G)(a0)
-; CHECKIZFHMIN-NEXT:    flh fa5, 18(a1)
-; CHECKIZFHMIN-NEXT:    fsh fa0, 18(a1)
+; CHECKIZFHMIN-NEXT:    addi a0, a0, %lo(G)
+; CHECKIZFHMIN-NEXT:    flh fa5, 0(a0)
+; CHECKIZFHMIN-NEXT:    fsh fa0, 0(a0)
+; CHECKIZFHMIN-NEXT:    flh fa5, 18(a0)
+; CHECKIZFHMIN-NEXT:    fsh fa0, 18(a0)
 ; CHECKIZFHMIN-NEXT:    ret
 ;
 ; CHECKIZHINXMIN-LABEL: flh_fsh_global:
@@ -151,11 +151,11 @@ define half @flh_fsh_global(half %a, half %b) nounwind {
 ; CHECKIZHINXMIN-NEXT:    fadd.s a0, a0, a1
 ; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a0
 ; CHECKIZHINXMIN-NEXT:    lui a1, %hi(G)
-; CHECKIZHINXMIN-NEXT:    lh zero, %lo(G)(a1)
-; CHECKIZHINXMIN-NEXT:    addi a2, a1, %lo(G)
-; CHECKIZHINXMIN-NEXT:    sh a0, %lo(G)(a1)
-; CHECKIZHINXMIN-NEXT:    lh zero, 18(a2)
-; CHECKIZHINXMIN-NEXT:    sh a0, 18(a2)
+; CHECKIZHINXMIN-NEXT:    addi a1, a1, %lo(G)
+; CHECKIZHINXMIN-NEXT:    lh zero, 0(a1)
+; CHECKIZHINXMIN-NEXT:    sh a0, 0(a1)
+; CHECKIZHINXMIN-NEXT:    lh zero, 18(a1)
+; CHECKIZHINXMIN-NEXT:    sh a0, 18(a1)
 ; CHECKIZHINXMIN-NEXT:    ret
   %1 = fadd half %a, %b
   %2 = load volatile half, ptr @G
diff --git a/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll b/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll
index 5f9866f08c821..18f9db0edccbe 100644
--- a/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll
+++ b/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll
@@ -306,8 +306,8 @@ define void @self_store() {
 ; RV32-LABEL: self_store:
 ; RV32:       # %bb.0:
 ; RV32-NEXT:    lui a0, %hi(f)
-; RV32-NEXT:    addi a1, a0, %lo(f)
-; RV32-NEXT:    sw a1, %lo(f+4)(a0)
+; RV32-NEXT:    addi a0, a0, %lo(f)
+; RV32-NEXT:    sw a0, 4(a0)
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: self_store:
diff --git a/llvm/test/CodeGen/RISCV/mem.ll b/llvm/test/CodeGen/RISCV/mem.ll
index a9cb80cb66349..5d55595b3158b 100644
--- a/llvm/test/CodeGen/RISCV/mem.ll
+++ b/llvm/test/CodeGen/RISCV/mem.ll
@@ -168,12 +168,12 @@ define dso_local i16 @load_sext_zext_anyext_i1_i16(ptr %a) nounwind {
 define dso_local i32 @lw_sw_global(i32 %a) nounwind {
 ; RV32I-LABEL: lw_sw_global:
 ; RV32I:       # %bb.0:
-; RV32I-NEXT:    lui a2, %hi(G)
-; RV32I-NEXT:    lw a1, %lo(G)(a2)
-; RV32I-NEXT:    addi a3, a2, %lo(G)
-; RV32I-NEXT:    sw a0, %lo(G)(a2)
-; RV32I-NEXT:    lw zero, 36(a3)
-; RV32I-NEXT:    sw a0, 36(a3)
+; RV32I-NEXT:    lui a1, %hi(G)
+; RV32I-NEXT:    addi a2, a1, %lo(G)
+; RV32I-NEXT:    lw a1, 0(a2)
+; RV32I-NEXT:    sw a0, 0(a2)
+; RV32I-NEXT:    lw zero, 36(a2)
+; RV32I-NEXT:    sw a0, 36(a2)
 ; RV32I-NEXT:    mv a0, a1
 ; RV32I-NEXT:    ret
   %1 = load volatile i32, ptr @G
diff --git a/llvm/test/CodeGen/RISCV/mem64.ll b/llvm/test/CodeGen/RISCV/mem64.ll
index 248964146325a..379b3483a1b91 100644
--- a/llvm/test/CodeGen/RISCV/mem64.ll
+++ b/llvm/test/CodeGen/RISCV/mem64.ll
@@ -213,12 +213,12 @@ define dso_local i16 @load_sext_zext_anyext_i1_i16(ptr %a) nounwind {
 define dso_local i64 @ld_sd_global(i64 %a) nounwind {
 ; RV64I-LABEL: ld_sd_global:
 ; RV64I:       # %bb.0:
-; RV64I-NEXT:    lui a2, %hi(G)
-; RV64I-NEXT:    ld a1, %lo(G)(a2)
-; RV64I-NEXT:    addi a3, a2, %lo(G)
-; RV64I-NEXT:    sd a0, %lo(G)(a2)
-; RV64I-NEXT:    ld zero, 72(a3)
-; RV64I-NEXT:    sd a0, 72(a3)
+; RV64I-NEXT:    lui a1, %hi(G)
+; RV64I-NEXT:    addi a2, a1, %lo(G)
+; RV64I-NEXT:    ld a1, 0(a2)
+; RV64I-NEXT:    sd a0, 0(a2)
+; RV64I-NEXT:    ld zero, 72(a2)
+; RV64I-NEXT:    sd a0, 72(a2)
 ; RV64I-NEXT:    mv a0, a1
 ; RV64I-NEXT:    ret
   %1 = load volatile i64, ptr @G
diff --git a/llvm/test/CodeGen/RISCV/memcpy.ll b/llvm/test/CodeGen/RISCV/memcpy.ll
index 02f582339d0b7..6cbd27bc21256 100644
--- a/llvm/test/CodeGen/RISCV/memcpy.ll
+++ b/llvm/test/CodeGen/RISCV/memcpy.ll
@@ -23,61 +23,61 @@
 define i32 @t0() {
 ; RV32-LABEL: t0:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    lui a0, %hi(src)
-; RV32-NEXT:    lw a1, %lo(src)(a0)
-; RV32-NEXT:    lui a2, %hi(dst)
-; RV32-NEXT:    sw a1, %lo(dst)(a2)
-; RV32-NEXT:    addi a0, a0, %lo(src)
-; RV32-NEXT:    lbu a1, 10(a0)
-; RV32-NEXT:    lh a3, 8(a0)
-; RV32-NEXT:    lw a0, 4(a0)
-; RV32-NEXT:    addi a2, a2, %lo(dst)
-; RV32-NEXT:    sb a1, 10(a2)
-; RV32-NEXT:    sh a3, 8(a2)
-; RV32-NEXT:    sw a0, 4(a2)
+; RV32-NEXT:    lui a0, %hi(dst)
+; RV32-NEXT:    addi a0, a0, %lo(dst)
+; RV32-NEXT:    lui a1, %hi(src)
+; RV32-NEXT:    addi a1, a1, %lo(src)
+; RV32-NEXT:    lbu a2, 10(a1)
+; RV32-NEXT:    lh a3, 8(a1)
+; RV32-NEXT:    lw a4, 4(a1)
+; RV32-NEXT:    lw a1, 0(a1)
+; RV32-NEXT:    sb a2, 10(a0)
+; RV32-NEXT:    sh a3, 8(a0)
+; RV32-NEXT:    sw a4, 4(a0)
+; RV32-NEXT:    sw a1, 0(a0)
 ; RV32-NEXT:    li a0, 0
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: t0:
 ; RV64:       # %bb.0: # %entry
-; RV64-NEXT:    lui a0, %hi(src)
-; RV64-NEXT:    ld a1, %lo(src)(a0)
-; RV64-NEXT:    lui a2, %hi(dst)
-; RV64-NEXT:    addi a0, a0, %lo(src)
-; RV64-NEXT:    lbu a3, 10(a0)
-; RV64-NEXT:    lh a0, 8(a0)
-; RV64-NEXT:    sd a1, %lo(dst)(a2)
-; RV64-NEXT:    addi a1, a2, %lo(dst)
-; RV64-NEXT:    sb a3, 10(a1)
-; RV64-NEXT:    sh a0, 8(a1)
+; RV64-NEXT:    lui a0, %hi(dst)
+; RV64-NEXT:    lui a1, %hi(src)
+; RV64-NEXT:    addi a1, a1, %lo(src)
+; RV64-NEXT:    lbu a2, 10(a1)
+; RV64-NEXT:    lh a3, 8(a1)
+; RV64-NEXT:    ld a1, 0(a1)
+; RV64-NEXT:    addi a0, a0, %lo(dst)
+; RV64-NEXT:    sb a2, 10(a0)
+; RV64-NEXT:    sh a3, 8(a0)
+; RV64-NEXT:    sd a1, 0(a0)
 ; RV64-NEXT:    li a0, 0
 ; RV64-NEXT:    ret
 ;
 ; RV32-FAST-LABEL: t0:
 ; RV32-FAST:       # %bb.0: # %entry
-; RV32-FAST-NEXT:    lui a0, %hi(src)
-; RV32-FAST-NEXT:    lw a1, %lo(src)(a0)
-; RV32-FAST-NEXT:    lui a2, %hi(dst)
-; RV32-FAST-NEXT:    addi a0, a0, %lo(src)
-; RV32-FAST-NEXT:    lw a3, 7(a0)
-; RV32-FAST-NEXT:    lw a0, 4(a0)
-; RV32-FAST-NEXT:    sw a1, %lo(dst)(a2)
-; RV32-FAST-NEXT:    addi a1, a2, %lo(dst)
-; RV32-FAST-NEXT:    sw a3, 7(a1)
-; RV32-FAST-NEXT:    sw a0, 4(a1)
+; RV32-FAST-NEXT:    lui a0, %hi(dst)
+; RV32-FAST-NEXT:    lui a1, %hi(src)
+; RV32-FAST-NEXT:    addi a1, a1, %lo(src)
+; RV32-FAST-NEXT:    lw a2, 7(a1)
+; RV32-FAST-NEXT:    lw a3, 4(a1)
+; RV32-FAST-NEXT:    lw a1, 0(a1)
+; RV32-FAST-NEXT:    addi a0, a0, %lo(dst)
+; RV32-FAST-NEXT:    sw a2, 7(a0)
+; RV32-FAST-NEXT:    sw a3, 4(a0)
+; RV32-FAST-NEXT:    sw a1, 0(a0)
 ; RV32-FAST-NEXT:    li a0, 0
 ; RV32-FAST-NEXT:    ret
 ;
 ; RV64-FAST-LABEL: t0:
 ; RV64-FAST:       # %bb.0: # %entry
 ; RV64-FAST-NEXT:    lui a0, %hi(src)
-; RV64-FAST-NEXT:    ld a1, %lo(src)(a0)
 ; RV64-FAST-NEXT:    addi a0, a0, %lo(src)
-; RV64-FAST-NEXT:    lw a0, 7(a0)
+; RV64-FAST-NEXT:    lw a1, 7(a0)
+; RV64-FAST-NEXT:    ld a0, 0(a0)
 ; RV64-FAST-NEXT:    lui a2, %hi(dst)
-; RV64-FAST-NEXT:    sd a1, %lo(dst)(a2)
-; RV64-FAST-NEXT:    addi a1, a2, %lo(dst)
-; RV64-FAST-NEXT:    sw a0, 7(a1)
+; RV64-FAST-NEXT:    addi a2, a2, %lo(dst)
+; RV64-FAST-NEXT:    sw a1, 7(a2)
+; RV64-FAST-NEXT:    sd a0, 0(a2)
 ; RV64-FAST-NEXT:    li a0, 0
 ; RV64-FAST-NEXT:    ret
 entry:
@@ -131,15 +131,15 @@ define void @t1(ptr nocapture %C) nounwind {
 ; RV64-FAST-LABEL: t1:
 ; RV64-FAST:       # %bb.0: # %entry
 ; RV64-FAST-NEXT:    lui a1, %hi(.L.str1)
-; RV64-FAST-NEXT:    ld a2, %lo(.L.str1)(a1)
 ; RV64-FAST-NEXT:    addi a1, a1, %lo(.L.str1)
-; RV64-FAST-NEXT:    ld a3, 23(a1)
-; RV64-FAST-NEXT:    ld a4, 16(a1)
-; RV64-FAST-NEXT:    ld a1, 8(a1)
-; RV64-FAST-NEXT:    sd a2, 0(a0)
-; RV64-FAST-NEXT:    sd a3, 23(a0)
-; RV64-FAST-NEXT:    sd a4, 16(a0)
-; RV64-FAST-NEXT:    sd a1, 8(a0)
+; RV64-FAST-NEXT:    ld a2, 23(a1)
+; RV64-FAST-NEXT:    ld a3, 16(a1)
+; RV64-FAST-NEXT:    ld a4, 8(a1)
+; RV64-FAST-NEXT:    ld a1, 0(a1)
+; RV64-FAST-NEXT:    sd a2, 23(a0)
+; RV64-FAST-NEXT:    sd a3, 16(a0)
+; RV64-FAST-NEXT:    sd a4, 8(a0)
+; RV64-FAST-NEXT:    sd a1, 0(a0)
 ; RV64-FAST-NEXT:    ret
 entry:
   tail call void @llvm.memcpy.p0.p0.i64(ptr %C, ptr @.str1, i64 31, i1 false)
@@ -163,19 +163,19 @@ define void @t2(ptr nocapture %C) nounwind {
 ;
 ; RV64-FAST-LABEL: t2:
 ; RV64-FAST:       # %bb.0: # %entry
+; RV64-FAST-NEXT:    lui a1, 1156
+; RV64-FAST-NEXT:    addi a1, a1, 332
+; RV64-FAST-NEXT:    sw a1, 32(a0)
 ; RV64-FAST-NEXT:    lui a1, %hi(.L.str2)
-; RV64-FAST-NEXT:    ld a2, %lo(.L.str2)(a1)
-; RV64-FAST-NEXT:    sd a2, 0(a0)
-; RV64-FAST-NEXT:    lui a2, 1156
-; RV64-FAST-NEXT:    addi a2, a2, 332
 ; RV64-FAST-NEXT:    addi a1, a1, %lo(.L.str2)
-; RV64-FAST-NEXT:    ld a3, 24(a1)
-; RV64-FAST-NEXT:    ld a4, 16(a1)
-; RV64-FAST-NEXT:    ld a1, 8(a1)
-; RV64-FAST-NEXT:    sw a2, 32(a0)
-; RV64-FAST-NEXT:    sd a3, 24(a0)
-; RV64-FAST-NEXT:    sd a4, 16(a0)
-; RV64-FAST-NEXT:    sd a1, 8(a0)
+; RV64-FAST-NEXT:    ld a2, 24(a1)
+; RV64-FAST-NEXT:    ld a3, 16(a1)
+; RV64-FAST-NEXT:    ld a4, 8(a1)
+; RV64-FAST-NEXT:    ld a1, 0(a1)
+; RV64-FAST-NEXT:    sd a2, 24(a0)
+; RV64-FAST-NEXT:    sd a3, 16(a0)
+; RV64-FAST-NEXT:    sd a4, 8(a0)
+; RV64-FAST-NEXT:    sd a1, 0(a0)
 ; RV64-FAST-NEXT:    ret
 entry:
   tail call void @llvm.memcpy.p0.p0.i64(ptr %C, ptr @.str2, i64 36, i1 false)
@@ -222,13 +222,13 @@ define void @t3(ptr nocapture %C) nounwind {
 ; RV64-FAST-LABEL: t3:
 ; RV64-FAST:       # %bb.0: # %entry
 ; RV64-FAST-NEXT:    lui a1, %hi(.L.str3)
-; RV64-FAST-NEXT:    ld a2, %lo(.L.str3)(a1)
 ; RV64-FAST-NEXT:    addi a1, a1, %lo(.L.str3)
-; RV64-FAST-NEXT:    ld a3, 16(a1)
-; RV64-FAST-NEXT:    ld a1, 8(a1)
-; RV64-FAST-NEXT:    sd a2, 0(a0)
-; RV64-FAST-NEXT:    sd a3, 16(a0)
-; RV64-FAST-NEXT:    sd a1, 8(a0)
+; RV64-FAST-NEXT:    ld a2, 16(a1)
+; RV64-FAST-NEXT:    ld a3, 8(a1)
+; RV64-FAST-NEXT:    ld a1, 0(a1)
+; RV64-FAST-NEXT:    sd a2, 16(a0)
+; RV64-FAST-NEXT:    sd a3, 8(a0)
+; RV64-FAST-NEXT:    sd a1, 0(a0)
 ; RV64-FAST-NEXT:    ret
 entry:
   tail call void @llvm.memcpy.p0.p0.i64(ptr %C, ptr @.str3, i64 24, i1 false)
@@ -271,13 +271,13 @@ define void @t4(ptr nocapture %C) nounwind {
 ; RV64-FAST-LABEL: t4:
 ; RV64-FAST:       # %bb.0: # %entry
 ; RV64-FAST-NEXT:    lui a1, %hi(.L.str4)
-; RV64-FAST-NEXT:    ld a2, %lo(.L.str4)(a1)
 ; RV64-FAST-NEXT:    addi a1, a1, %lo(.L.str4)
-; RV64-FAST-NEXT:    ld a1, 8(a1)
+; RV64-FAST-NEXT:    ld a2, 8(a1)
+; RV64-FAST-NEXT:    ld a1, 0(a1)
 ; RV64-FAST-NEXT:    li a3, 32
 ; RV64-FAST-NEXT:    sh a3, 16(a0)
-; RV64-FAST-NEXT:    sd a2, 0(a0)
-; RV64-FAST-NEXT:    sd a1, 8(a0)
+; RV64-FAST-NEXT:    sd a2, 8(a0)
+; RV64-FAST-NEXT:    sd a1, 0(a0)
 ; RV64-FAST-NEXT:    ret
 entry:
   tail call void @llvm.memcpy.p0.p0.i64(ptr %C, ptr @.str4, i64 18, i1 false)
@@ -391,12 +391,12 @@ define void @t6() nounwind {
 ; RV64-FAST-LABEL: t6:
 ; RV64-FAST:       # %bb.0: # %entry
 ; RV64-FAST-NEXT:    lui a0, %hi(.L.str6)
-; RV64-FAST-NEXT:    ld a1, %lo(.L.str6)(a0)
 ; RV64-FAST-NEXT:    addi a0, a0, %lo(.L.str6)
-; RV64-FAST-NEXT:    ld a0, 6(a0)
+; RV64-FAST-NEXT:    ld a1, 6(a0)
+; RV64-FAST-NEXT:    ld a0, 0(a0)
 ; RV64-FAST-NEXT:    lui a2, %hi(spool.splbuf)
-; RV64-FAST-NEXT:    sd a1, %lo(spool.splbuf)(a2)
-; RV64-FAST-NEXT:    sd a0, %lo(spool.splbuf+6)(a2)
+; RV64-FAST-NEXT:    sd a1, %lo(spool.splbuf+6)(a2)
+; RV64-FAST-NEXT:    sd a0, %lo(spool.splbuf)(a2)
 ; RV64-FAST-NEXT:    ret
 entry:
   call void @llvm.memcpy.p0.p0.i64(ptr @spool.splbuf, ptr @.str6, i64 14, i1 false)
diff --git a/llvm/test/CodeGen/RISCV/push-pop-popret.ll b/llvm/test/CodeGen/RISCV/push-pop-popret.ll
index 7548faaae61f4..89c50914f61db 100644
--- a/llvm/test/CodeGen/RISCV/push-pop-popret.ll
+++ b/llvm/test/CodeGen/RISCV/push-pop-popret.ll
@@ -704,57 +704,55 @@ entry:
 define i32 @nocompress(i32 signext %size) {
 ; RV32IZCMP-LABEL: nocompress:
 ; RV32IZCMP:       # %bb.0: # %entry
-; RV32IZCMP-NEXT:    cm.push {ra, s0-s8}, -48
+; RV32IZCMP-NEXT:    cm.push {ra, s0-s7}, -48
 ; RV32IZCMP-NEXT:    .cfi_def_cfa_offset 48
-; RV32IZCMP-NEXT:    .cfi_offset ra, -40
-; RV32IZCMP-NEXT:    .cfi_offset s0, -36
-; RV32IZCMP-NEXT:    .cfi_offset s1, -32
-; RV32IZCMP-NEXT:    .cfi_offset s2, -28
-; RV32IZCMP-NEXT:    .cfi_offset s3, -24
-; RV32IZCMP-NEXT:    .cfi_offset s4, -20
-; RV32IZCMP-NEXT:    .cfi_offset s5, -16
-; RV32IZCMP-NEXT:    .cfi_offset s6, -12
-; RV32IZCMP-NEXT:    .cfi_offset s7, -8
-; RV32IZCMP-NEXT:    .cfi_offset s8, -4
+; RV32IZCMP-NEXT:    .cfi_offset ra, -36
+; RV32IZCMP-NEXT:    .cfi_offset s0, -32
+; RV32IZCMP-NEXT:    .cfi_offset s1, -28
+; RV32IZCMP-NEXT:    .cfi_offset s2, -24
+; RV32IZCMP-NEXT:    .cfi_offset s3, -20
+; RV32IZCMP-NEXT:    .cfi_offset s4, -16
+; RV32IZCMP-NEXT:    .cfi_offset s5, -12
+; RV32IZCMP-NEXT:    .cfi_offset s6, -8
+; RV32IZCMP-NEXT:    .cfi_offset s7, -4
 ; RV32IZCMP-NEXT:    addi s0, sp, 48
 ; RV32IZCMP-NEXT:    .cfi_def_cfa s0, 0
 ; RV32IZCMP-NEXT:    addi a0, a0, 15
 ; RV32IZCMP-NEXT:    andi a0, a0, -16
 ; RV32IZCMP-NEXT:    sub s2, sp, a0
 ; RV32IZCMP-NEXT:    mv sp, s2
-; RV32IZCMP-NEXT:    lui s1, %hi(var)
-; RV32IZCMP-NEXT:    lw s3, %lo(var)(s1)
-; RV32IZCMP-NEXT:    lw s4, %lo(var+4)(s1)
-; RV32IZCMP-NEXT:    lw s5, %lo(var+8)(s1)
-; RV32IZCMP-NEXT:    lw s6, %lo(var+12)(s1)
-; RV32IZCMP-NEXT:    addi s7, s1, %lo(var)
-; RV32IZCMP-NEXT:    lw s8, 16(s7)
+; RV32IZCMP-NEXT:    lui a0, %hi(var)
+; RV32IZCMP-NEXT:    addi s1, a0, %lo(var)
+; RV32IZCMP-NEXT:    lw s3, 0(s1)
+; RV32IZCMP-NEXT:    lw s4, 4(s1)
+; RV32IZCMP-NEXT:    lw s5, 8(s1)
+; RV32IZCMP-NEXT:    lw s6, 12(s1)
+; RV32IZCMP-NEXT:    lw s7, 16(s1)
 ; RV32IZCMP-NEXT:    mv a0, s2
 ; RV32IZCMP-NEXT:    call callee_void
-; RV32IZCMP-NEXT:    sw s8, 16(s7)
-; RV32IZCMP-NEXT:    sw s6, %lo(var+12)(s1)
-; RV32IZCMP-NEXT:    sw s5, %lo(var+8)(s1)
-; RV32IZCMP-NEXT:    sw s4, %lo(var+4)(s1)
-; RV32IZCMP-NEXT:    sw s3, %lo(var)(s1)
+; RV32IZCMP-NEXT:    sw s7, 16(s1)
+; RV32IZCMP-NEXT:    sw s6, 12(s1)
+; RV32IZCMP-NEXT:    sw s5, 8(s1)
+; RV32IZCMP-NEXT:    sw s4, 4(s1)
+; RV32IZCMP-NEXT:    sw s3, 0(s1)
 ; RV32IZCMP-NEXT:    mv a0, s2
 ; RV32IZCMP-NEXT:    addi sp, s0, -48
-; RV32IZCMP-NEXT:    cm.pop {ra, s0-s8}, 48
+; RV32IZCMP-NEXT:    cm.pop {ra, s0-s7}, 48
 ; RV32IZCMP-NEXT:    tail callee
 ;
 ; RV64IZCMP-LABEL: nocompress:
 ; RV64IZCMP:       # %bb.0: # %entry
-; RV64IZCMP-NEXT:    cm.push {ra, s0-s8}, -80
+; RV64IZCMP-NEXT:    cm.push {ra, s0-s7}, -80
 ; RV64IZCMP-NEXT:    .cfi_def_cfa_offset 80
-; RV64IZCMP-NEXT:    .cfi_offset ra, -80
-; RV64IZCMP-NEXT:    .cfi_offset s0, -72
-; RV64IZCMP-NEXT:    .cfi_offset s1, -64
-; RV64IZCMP-NEXT:    .cfi_offset s2, -56
-; RV64IZCMP-NEXT:    .cfi_offset s3, -48
-; RV64IZCMP-NEXT:    .cfi_offset s4, -40
-; RV64IZCMP-NEXT:    .cfi_offset s5, -32
-; RV64IZCMP-NEXT:    .cfi_offset s6, -24
-; RV64IZCMP-NEXT:    .cfi_offset s7, -16
-; RV64IZCMP-NEXT:    .cfi_offset s8, -8
+; RV64IZCMP-NEXT:    .cfi_offset ra, -72
+; RV64IZCMP-NEXT:    .cfi_offset s0, -64
+; RV64IZCMP-NEXT:    .cfi_offset s1, -56
+; RV64IZCMP-NEXT:    .cfi_offset s2, -48
+; RV64IZCMP-NEXT:    .cfi_offset s3, -40
+; RV64IZCMP-NEXT:    .cfi_offset s4, -32
+; RV64IZCMP-NEXT:    .cfi_offset s5, -24
+; RV64IZCMP-NEXT:    .cfi_offset s6, -16
+; RV64IZCMP-NEXT:    .cfi_offset s7, -8
 ; RV64IZCMP-NEXT:    addi s0, sp, 80
 ; RV64IZCMP-NEXT:    .cfi_def_cfa s0, 0
 ; RV64IZCMP-NEXT:    slli a0, a0, 32
@@ -763,78 +761,76 @@ define i32 @nocompress(i32 signext %size) {
 ; RV64IZCMP-NEXT:    andi a0, a0, -16
 ; RV64IZCMP-NEXT:    sub s2, sp, a0
 ; RV64IZCMP-NEXT:    mv sp, s2
-; RV64IZCMP-NEXT:    lui s1, %hi(var)
-; RV64IZCMP-NEXT:    lw s3, %lo(var)(s1)
-; RV64IZCMP-NEXT:    lw s4, %lo(var+4)(s1)
-; RV64IZCMP-NEXT:    lw s5, %lo(var+8)(s1)
-; RV64IZCMP-NEXT:    lw s6, %lo(var+12)(s1)
-; RV64IZCMP-NEXT:    addi s7, s1, %lo(var)
-; RV64IZCMP-NEXT:    lw s8, 16(s7)
+; RV64IZCMP-NEXT:    lui a0, %hi(var)
+; RV64IZCMP-NEXT:    addi s1, a0, %lo(var)
+; RV64IZCMP-NEXT:    lw s3, 0(s1)
+; RV64IZCMP-NEXT:    lw s4, 4(s1)
+; RV64IZCMP-NEXT:    lw s5, 8(s1)
+; RV64IZCMP-NEXT:    lw s6, 12(s1)
+; RV64IZCMP-NEXT:    lw s7, 16(s1)
 ; RV64IZCMP-NEXT:    mv a0, s2
 ; RV64IZCMP-NEXT:    call callee_void
-; RV64IZCMP-NEXT:    sw s8, 16(s7)
-; RV64IZCMP-NEXT:    sw s6, %lo(var+12)(s1)
-; RV64IZCMP-NEXT:    sw s5, %lo(var+8)(s1)
-; RV64IZCMP-NEXT:    sw s4, %lo(var+4)(s1)
-; RV64IZCMP-NEXT:    sw s3, %lo(var)(s1)
+; RV64IZCMP-NEXT:    sw s7, 16(s1)
+; RV64IZCMP-NEXT:    sw s6, 12(s1)
+; RV64IZCMP-NEXT:    sw s5, 8(s1)
+; RV64IZCMP-NEXT:    sw s4, 4(s1)
+; RV64IZCMP-NEXT:    sw s3, 0(s1)
 ; RV64IZCMP-NEXT:    mv a0, s2
 ; RV64IZCMP-NEXT:    addi sp, s0, -80
-; RV64IZCMP-NEXT:    cm.pop {ra, s0-s8}, 80
+; RV64IZCMP-NEXT:    cm.pop {ra, s0-s7}, 80
 ; RV64IZCMP-NEXT:    tail callee
 ;
 ; RV32IZCMP-SR-LABEL: nocompress:
 ; RV32IZCMP-SR:       # %bb.0: # %entry
-; RV32IZCMP-SR-NEXT:    cm.push {ra, s0-s8}, -48
+; RV32IZCMP-SR-NEXT:    cm.push {ra, s0-s7}, -48
 ; RV32IZCMP-SR-NEXT:    .cfi_def_cfa_offset 48
-; RV32IZCMP-SR-NEXT:    .cfi_offset ra, -40
-; RV32IZCMP-SR-NEXT:    .cfi_offset s0, -36
-; RV32IZCMP-SR-NEXT:    .cfi_offset s1, -32
-; RV32IZCMP-SR-NEXT:    .cfi_offset s2, -28
-; RV32IZCMP-SR-NEXT:    .cfi_offset s3, -24
-; RV32IZCMP-SR-NEXT:    .cfi_offset s4, -20
-; RV32IZCMP-SR-NEXT:    .cfi_offset s5, -16
-; RV32IZCMP-SR-NEXT:    .cfi_offset s6, -12
-; RV32IZCMP-SR-NEXT:    .cfi_offset s7, -8
-; RV32IZCMP-SR-NEXT:    .cfi_offset s8, -4
+; RV32IZCMP-SR-NEXT:    .cfi_offset ra, -36
+; RV32IZCMP-SR-NEXT:    .cfi_offset s0, -32
+; RV32IZCMP-SR-NEXT:    .cfi_offset s1, -28
+; RV32IZCMP-SR-NEXT:    .cfi_offset s2, -24
+; RV32IZCMP-SR-NEXT:    .cfi_offset s3, -20
+; RV32IZCMP-SR-NEXT:    .cfi_offset s4, -16
+; RV32IZCMP-SR-NEXT:    .cfi_offset s5, -12
+; RV32IZCMP-SR-NEXT:    .cfi_offset s6, -8
+; RV32IZCMP-SR-NEXT:    .cfi_offset s7, -4
 ; RV32IZCMP-SR-NEXT:    addi s0, sp, 48
 ; RV32IZCMP-SR-NEXT:    .cfi_def_cfa s0, 0
 ; RV32IZCMP-SR-NEXT:    addi a0, a0, 15
 ; RV32IZCMP-SR-NEXT:    andi a0, a0, -16
 ; RV32IZCMP-SR-NEXT:    sub s2, sp, a0
 ; RV32IZCMP-SR-NEXT:    mv sp, s2
-; RV32IZCMP-SR-NEXT:    lui s1, %hi(var)
-; RV32IZCMP-SR-NEXT:    lw s3, %lo(var)(s1)
-; RV32IZCMP-SR-NEXT:    lw s4, %lo(var+4)(s1)
-; RV32IZCMP-SR-NEXT:    lw s5, %lo(var+8)(s1)
-; RV32IZCMP-SR-NEXT:    lw s6, %lo(var+12)(s1)
-; RV32IZCMP-SR-NEXT:    addi s7, s1, %lo(var)
-; RV32IZCMP-SR-NEXT:    lw s8, 16(s7)
+; RV32IZCMP-SR-NEXT:    lui a0, %hi(var)
+; RV32IZCMP-SR-NEXT:    addi s1, a0, %lo(var)
+; RV32IZCMP-SR-NEXT:    lw s3, 0(s1)
+; RV32IZCMP-SR-NEXT:    lw s4, 4(s1)
+; RV32IZCMP-SR-NEXT:    lw s5, 8(s1)
+; RV32IZCMP-SR-NEXT:    lw s6, 12(s1)
+; RV32IZCMP-SR-NEXT:    lw s7, 16(s1)
 ; RV32IZCMP-SR-NEXT:    mv a0, s2
 ; RV32IZCMP-SR-NEXT:    call callee_void
-; RV32IZCMP-SR-NEXT:    sw s8, 16(s7)
-; RV32IZCMP-SR-NEXT:    sw s6, %lo(var+12)(s1)
-; RV32IZCMP-SR-NEXT:    sw s5, %lo(var+8)(s1)
-; RV32IZCMP-SR-NEXT:    sw s4, %lo(var+4)(s1)
-; RV32IZCMP-SR-NEXT:    sw s3, %lo(var)(s1)
+; RV32IZCMP-SR-NEXT:    sw s7, 16(s1)
+; RV32IZCMP-SR-NEXT:    sw s6, 12(s1)
+; RV32IZCMP-SR-NEXT:    sw s5, 8(s1)
+; RV32IZCMP-SR-NEXT:    sw s4, 4(s1)
+; RV32IZCMP-SR-NEXT:    sw s3, 0(s1)
 ; RV32IZCMP-SR-NEXT:    mv a0, s2
 ; RV32IZCMP-SR-NEXT:    addi sp, s0, -48
-; RV32IZCMP-SR-NEXT:    cm.pop {ra, s0-s8}, 48
+; RV32IZCMP-SR-NEXT:    cm.pop {ra, s0-s7}, 48
 ; RV32IZCMP-SR-NEXT:    tail callee
 ;
 ; RV64IZCMP-SR-LABEL: nocompress:
 ; RV64IZCMP-SR:       # %bb.0: # %entry
-; RV64IZCMP-SR-NEXT:    cm.push {ra, s0-s8}, -80
+; RV64IZCMP-SR-NEXT:    cm.push {ra, s0-s7}, -80
 ; RV64IZCMP-SR-NEXT:    .cfi_def_cfa_offset 80
-; RV64IZCMP-SR-NEXT:    .cfi_offset ra, -80
-; RV64IZCMP-SR-NEXT:    .cfi_offset s0, -72
-; RV64IZCMP-SR-NEXT:    .cfi_offset s1, -64
-; RV64IZCMP-SR-NEXT:    .cfi_offset s2, -56
-; RV64IZCMP-SR-NEXT:    .cfi_offset s3, -48
-; RV64IZCMP-SR-NEXT:    .cfi_offset s4, -40
-; RV64IZCMP-SR-NEXT:    .cfi_offset s5, -32
-; RV64IZCMP-SR-NEXT:    .cfi_offset s6, -24
-; RV64IZCMP-SR-NEXT:    .cfi_offset s7, -16
-; RV64IZCMP-SR-NEXT:    .cfi_offset s8, -8
+; RV64IZCMP-SR-NEXT:    .cfi_offset ra, -72
+; RV64IZCMP-SR-NEXT:    .cfi_offset s0, -64
+; RV64IZCMP-SR-NEXT:    .cfi_offset s1, -56
+; RV64IZCMP-SR-NEXT:    .cfi_offset s2, -48
+; RV64IZCMP-SR-NEXT:    .cfi_offset s3, -40
+; RV64IZCMP-SR-NEXT:    .cfi_offset s4, -32
+; RV64IZCMP-SR-NEXT:    .cfi_offset s5, -24
+; RV64IZCMP-SR-NEXT:    .cfi_offset s6, -16
+; RV64IZCMP-SR-NEXT:    .cfi_offset s7, -8
 ; RV64IZCMP-SR-NEXT:    addi s0, sp, 80
 ; RV64IZCMP-SR-NEXT:    .cfi_def_cfa s0, 0
 ; RV64IZCMP-SR-NEXT:    slli a0, a0, 32
@@ -843,23 +839,23 @@ define i32 @nocompress(i32 signext %size) {
 ; RV64IZCMP-SR-NEXT:    andi a0, a0, -16
 ; RV64IZCMP-SR-NEXT:    sub s2, sp, a0
 ; RV64IZCMP-SR-NEXT:    mv sp, s2
-; RV64IZCMP-SR-NEXT:    lui s1, %hi(var)
-; RV64IZCMP-SR-NEXT:    lw s3, %lo(var)(s1)
-; RV64IZCMP-SR-NEXT:    lw s4, %lo(var+4)(s1)
-; RV64IZCMP-SR-NEXT:    lw s5, %lo(var+8)(s1)
-; RV64IZCMP-SR-NEXT:    lw s6, %lo(var+12)(s1)
-; RV64IZCMP-SR-NEXT:    addi s7, s1, %lo(var)
-; RV64IZCMP-SR-NEXT:    lw s8, 16(s7)
+; RV64IZCMP-SR-NEXT:    lui a0, %hi(var)
+; RV64IZCMP-SR-NEXT:    addi s1, a0, %lo(var)
+; RV64IZCMP-SR-NEXT:    lw s3, 0(s1)
+; RV64IZCMP-SR-NEXT:    lw s4, 4(s1)
+; RV64IZCMP-SR-NEXT:    lw s5, 8(s1)
+; RV64IZCMP-SR-NEXT:    lw s6, 12(s1)
+; RV64IZCMP-SR-NEXT:    lw s7, 16(s1)
 ; RV64IZCMP-SR-NEXT:    mv a0, s2
 ; RV64IZCMP-SR-NEXT:    call callee_void
-; RV64IZCMP-SR-NEXT:    sw s8, 16(s7)
-; RV64IZCMP-SR-NEXT:    sw s6, %lo(var+12)(s1)
-; RV64IZCMP-SR-NEXT:    sw s5, %lo(var+8)(s1)
-; RV64IZCMP-SR-NEXT:    sw s4, %lo(var+4)(s1)
-; RV64IZCMP-SR-NEXT:    sw s3, %lo(var)(s1)
+; RV64IZCMP-SR-NEXT:    sw s7, 16(s1)
+; RV64IZCMP-SR-NEXT:    sw s6, 12(s1)
+; RV64IZCMP-SR-NEXT:    sw s5, 8(s1)
+; RV64IZCMP-SR-NEXT:    sw s4, 4(s1)
+; RV64IZCMP-SR-NEXT:    sw s3, 0(s1)
 ; RV64IZCMP-SR-NEXT:    mv a0, s2
 ; RV64IZCMP-SR-NEXT:    addi sp, s0, -80
-; RV64IZCMP-SR-NEXT:    cm.pop {ra, s0-s8}, 80
+; RV64IZCMP-SR-NEXT:    cm.pop {ra, s0-s7}, 80
 ; RV64IZCMP-SR-NEXT:    tail callee
 ;
 ; RV32I-LABEL: nocompress:
@@ -875,7 +871,6 @@ define i32 @nocompress(i32 signext %size) {
 ; RV32I-NEXT:    sw s5, 20(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s6, 16(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s7, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    sw s8, 8(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    .cfi_offset ra, -4
 ; RV32I-NEXT:    .cfi_offset s0, -8
 ; RV32I-NEXT:    .cfi_offset s1, -12
@@ -885,27 +880,26 @@ define i32 @nocompress(i32 signext %size) {
 ; RV32I-NEXT:    .cfi_offset s5, -28
 ; RV32I-NEXT:    .cfi_offset s6, -32
 ; RV32I-NEXT:    .cfi_offset s7, -36
-; RV32I-NEXT:    .cfi_offset s8, -40
 ; RV32I-NEXT:    addi s0, sp, 48
 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
 ; RV32I-NEXT:    addi a0, a0, 15
 ; RV32I-NEXT:    andi a0, a0, -16
 ; RV32I-NEXT:    sub s1, sp, a0
 ; RV32I-NEXT:    mv sp, s1
-; RV32I-NEXT:    lui s2, %hi(var)
-; RV32I-NEXT:    lw s3, %lo(var)(s2)
-; RV32I-NEXT:    lw s4, %lo(var+4)(s2)
-; RV32I-NEXT:    lw s5, %lo(var+8)(s2)
-; RV32I-NEXT:    lw s6, %lo(var+12)(s2)
-; RV32I-NEXT:    addi s7, s2, %lo(var)
-; RV32I-NEXT:    lw s8, 16(s7)
+; RV32I-NEXT:    lui a0, %hi(var)
+; RV32I-NEXT:    addi s2, a0, %lo(var)
+; RV32I-NEXT:    lw s3, 0(s2)
+; RV32I-NEXT:    lw s4, 4(s2)
+; RV32I-NEXT:    lw s5, 8(s2)
+; RV32I-NEXT:    lw s6, 12(s2)
+; RV32I-NEXT:    lw s7, 16(s2)
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    call callee_void
-; RV32I-NEXT:    sw s8, 16(s7)
-; RV32I-NEXT:    sw s6, %lo(var+12)(s2)
-; RV32I-NEXT:    sw s5, %lo(var+8)(s2)
-; RV32I-NEXT:    sw s4, %lo(var+4)(s2)
-; RV32I-NEXT:    sw s3, %lo(var)(s2)
+; RV32I-NEXT:    sw s7, 16(s2)
+; RV32I-NEXT:    sw s6, 12(s2)
+; RV32I-NEXT:    sw s5, 8(s2)
+; RV32I-NEXT:    sw s4, 4(s2)
+; RV32I-NEXT:    sw s3, 0(s2)
 ; RV32I-NEXT:    mv a0, s1
 ; RV32I-NEXT:    addi sp, s0, -48
 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
@@ -917,7 +911,6 @@ define i32 @nocompress(i32 signext %size) {
 ; RV32I-NEXT:    lw s5, 20(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s6, 16(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s7, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    lw s8, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    addi sp, sp, 48
 ; RV32I-NEXT:    tail callee
 ;
@@ -934,7 +927,6 @@ define i32 @nocompress(i32 signext %size) {
 ; RV64I-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    sd s7, 8(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s8, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    .cfi_offset ra, -8
 ; RV64I-NEXT:    .cfi_offset s0, -16
 ; RV64I-NEXT:    .cfi_offset s1, -24
@@ -944,7 +936,6 @@ define i32 @nocompress(i32 signext %size) {
 ; RV64I-NEXT:    .cfi_offset s5, -56
 ; RV64I-NEXT:    .cfi_offset s6, -64
 ; RV64I-NEXT:    .cfi_offset s7, -72
-; RV64I-NEXT:    .cfi_offset s8, -80
 ; RV64I-NEXT:    addi s0, sp, 80
 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
 ; RV64I-NEXT:    slli a0, a0, 32
@@ -953,20 +944,20 @@ define i32 @nocompress(i32 signext %size) {
 ; RV64I-NEXT:    andi a0, a0, -16
 ; RV64I-NEXT:    sub s1, sp, a0
 ; RV64I-NEXT:    mv sp, s1
-; RV64I-NEXT:    lui s2, %hi(var)
-; RV64I-NEXT:    lw s3, %lo(var)(s2)
-; RV64I-NEXT:    lw s4, %lo(var+4)(s2)
-; RV64I-NEXT:    lw s5, %lo(var+8)(s2)
-; RV64I-NEXT:    lw s6, %lo(var+12)(s2)
-; RV64I-NEXT:    addi s7, s2, %lo(var)
-; RV64I-NEXT:    lw s8, 16(s7)
+; RV64I-NEXT:    lui a0, %hi(var)
+; RV64I-NEXT:    addi s2, a0, %lo(var)
+; RV64I-NEXT:    lw s3, 0(s2)
+; RV64I-NEXT:    lw s4, 4(s2)
+; RV64I-NEXT:    lw s5, 8(s2)
+; RV64I-NEXT:    lw s6, 12(s2)
+; RV64I-NEXT:    lw s7, 16(s2)
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    call callee_void
-; RV64I-NEXT:    sw s8, 16(s7)
-; RV64I-NEXT:    sw s6, %lo(var+12)(s2)
-; RV64I-NEXT:    sw s5, %lo(var+8)(s2)
-; RV64I-NEXT:    sw s4, %lo(var+4)(s2)
-; RV64I-NEXT:    sw s3, %lo(var)(s2)
+; RV64I-NEXT:    sw s7, 16(s2)
+; RV64I-NEXT:    sw s6, 12(s2)
+; RV64I-NEXT:    sw s5, 8(s2)
+; RV64I-NEXT:    sw s4, 4(s2)
+; RV64I-NEXT:    sw s3, 0(s2)
 ; RV64I-NEXT:    mv a0, s1
 ; RV64I-NEXT:    addi sp, s0, -80
 ; RV64I-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -978,7 +969,6 @@ define i32 @nocompress(i32 signext %size) {
 ; RV64I-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s7, 8(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s8, 0(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    addi sp, sp, 80
 ; RV64I-NEXT:    tail callee
 entry:
@@ -1106,282 +1096,278 @@ define i32 @varargs(ptr %fmt, ...) nounwind {
 define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind {
 ; RV32IZCMP-LABEL: many_args:
 ; RV32IZCMP:       # %bb.0: # %entry
-; RV32IZCMP-NEXT:    cm.push {ra, s0-s4}, -32
+; RV32IZCMP-NEXT:    cm.push {ra, s0-s3}, -32
 ; RV32IZCMP-NEXT:    lui a0, %hi(var0)
-; RV32IZCMP-NEXT:    lw a6, %lo(var0)(a0)
-; RV32IZCMP-NEXT:    lw a7, %lo(var0+4)(a0)
-; RV32IZCMP-NEXT:    lw t0, %lo(var0+8)(a0)
-; RV32IZCMP-NEXT:    lw t1, %lo(var0+12)(a0)
-; RV32IZCMP-NEXT:    addi a5, a0, %lo(var0)
-; RV32IZCMP-NEXT:    lw t2, 16(a5)
-; RV32IZCMP-NEXT:    lw t3, 20(a5)
-; RV32IZCMP-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-NEXT:    lw a1, 48(a5)
-; RV32IZCMP-NEXT:    lw s0, 52(a5)
-; RV32IZCMP-NEXT:    lw s1, 68(a5)
-; RV32IZCMP-NEXT:    lw a2, 64(a5)
-; RV32IZCMP-NEXT:    lw a3, 60(a5)
-; RV32IZCMP-NEXT:    lw a4, 56(a5)
-; RV32IZCMP-NEXT:    sw s1, 68(a5)
-; RV32IZCMP-NEXT:    sw a2, 64(a5)
-; RV32IZCMP-NEXT:    sw a3, 60(a5)
-; RV32IZCMP-NEXT:    sw a4, 56(a5)
-; RV32IZCMP-NEXT:    sw s0, 52(a5)
-; RV32IZCMP-NEXT:    sw a1, 48(a5)
-; RV32IZCMP-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-NEXT:    sw t3, 20(a5)
-; RV32IZCMP-NEXT:    sw t2, 16(a5)
-; RV32IZCMP-NEXT:    sw t1, %lo(var0+12)(a0)
-; RV32IZCMP-NEXT:    sw t0, %lo(var0+8)(a0)
-; RV32IZCMP-NEXT:    sw a7, %lo(var0+4)(a0)
-; RV32IZCMP-NEXT:    sw a6, %lo(var0)(a0)
-; RV32IZCMP-NEXT:    cm.popret {ra, s0-s4}, 32
+; RV32IZCMP-NEXT:    addi a0, a0, %lo(var0)
+; RV32IZCMP-NEXT:    lw a6, 0(a0)
+; RV32IZCMP-NEXT:    lw a7, 4(a0)
+; RV32IZCMP-NEXT:    lw t0, 8(a0)
+; RV32IZCMP-NEXT:    lw t1, 12(a0)
+; RV32IZCMP-NEXT:    lw t2, 16(a0)
+; RV32IZCMP-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-NEXT:    lw a2, 44(a0)
+; RV32IZCMP-NEXT:    lw a3, 48(a0)
+; RV32IZCMP-NEXT:    lw a4, 52(a0)
+; RV32IZCMP-NEXT:    lw s0, 68(a0)
+; RV32IZCMP-NEXT:    lw s1, 64(a0)
+; RV32IZCMP-NEXT:    lw a5, 60(a0)
+; RV32IZCMP-NEXT:    lw a1, 56(a0)
+; RV32IZCMP-NEXT:    sw s0, 68(a0)
+; RV32IZCMP-NEXT:    sw s1, 64(a0)
+; RV32IZCMP-NEXT:    sw a5, 60(a0)
+; RV32IZCMP-NEXT:    sw a1, 56(a0)
+; RV32IZCMP-NEXT:    sw a4, 52(a0)
+; RV32IZCMP-NEXT:    sw a3, 48(a0)
+; RV32IZCMP-NEXT:    sw a2, 44(a0)
+; RV32IZCMP-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-NEXT:    sw t2, 16(a0)
+; RV32IZCMP-NEXT:    sw t1, 12(a0)
+; RV32IZCMP-NEXT:    sw t0, 8(a0)
+; RV32IZCMP-NEXT:    sw a7, 4(a0)
+; RV32IZCMP-NEXT:    sw a6, 0(a0)
+; RV32IZCMP-NEXT:    cm.popret {ra, s0-s3}, 32
 ;
 ; RV64IZCMP-LABEL: many_args:
 ; RV64IZCMP:       # %bb.0: # %entry
-; RV64IZCMP-NEXT:    cm.push {ra, s0-s4}, -48
+; RV64IZCMP-NEXT:    cm.push {ra, s0-s3}, -48
 ; RV64IZCMP-NEXT:    lui a0, %hi(var0)
-; RV64IZCMP-NEXT:    lw a6, %lo(var0)(a0)
-; RV64IZCMP-NEXT:    lw a7, %lo(var0+4)(a0)
-; RV64IZCMP-NEXT:    lw t0, %lo(var0+8)(a0)
-; RV64IZCMP-NEXT:    lw t1, %lo(var0+12)(a0)
-; RV64IZCMP-NEXT:    addi a5, a0, %lo(var0)
-; RV64IZCMP-NEXT:    lw t2, 16(a5)
-; RV64IZCMP-NEXT:    lw t3, 20(a5)
-; RV64IZCMP-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-NEXT:    lw a1, 48(a5)
-; RV64IZCMP-NEXT:    lw s0, 52(a5)
-; RV64IZCMP-NEXT:    lw s1, 68(a5)
-; RV64IZCMP-NEXT:    lw a2, 64(a5)
-; RV64IZCMP-NEXT:    lw a3, 60(a5)
-; RV64IZCMP-NEXT:    lw a4, 56(a5)
-; RV64IZCMP-NEXT:    sw s1, 68(a5)
-; RV64IZCMP-NEXT:    sw a2, 64(a5)
-; RV64IZCMP-NEXT:    sw a3, 60(a5)
-; RV64IZCMP-NEXT:    sw a4, 56(a5)
-; RV64IZCMP-NEXT:    sw s0, 52(a5)
-; RV64IZCMP-NEXT:    sw a1, 48(a5)
-; RV64IZCMP-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-NEXT:    sw t3, 20(a5)
-; RV64IZCMP-NEXT:    sw t2, 16(a5)
-; RV64IZCMP-NEXT:    sw t1, %lo(var0+12)(a0)
-; RV64IZCMP-NEXT:    sw t0, %lo(var0+8)(a0)
-; RV64IZCMP-NEXT:    sw a7, %lo(var0+4)(a0)
-; RV64IZCMP-NEXT:    sw a6, %lo(var0)(a0)
-; RV64IZCMP-NEXT:    cm.popret {ra, s0-s4}, 48
+; RV64IZCMP-NEXT:    addi a0, a0, %lo(var0)
+; RV64IZCMP-NEXT:    lw a6, 0(a0)
+; RV64IZCMP-NEXT:    lw a7, 4(a0)
+; RV64IZCMP-NEXT:    lw t0, 8(a0)
+; RV64IZCMP-NEXT:    lw t1, 12(a0)
+; RV64IZCMP-NEXT:    lw t2, 16(a0)
+; RV64IZCMP-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-NEXT:    lw a2, 44(a0)
+; RV64IZCMP-NEXT:    lw a3, 48(a0)
+; RV64IZCMP-NEXT:    lw a4, 52(a0)
+; RV64IZCMP-NEXT:    lw s0, 68(a0)
+; RV64IZCMP-NEXT:    lw s1, 64(a0)
+; RV64IZCMP-NEXT:    lw a5, 60(a0)
+; RV64IZCMP-NEXT:    lw a1, 56(a0)
+; RV64IZCMP-NEXT:    sw s0, 68(a0)
+; RV64IZCMP-NEXT:    sw s1, 64(a0)
+; RV64IZCMP-NEXT:    sw a5, 60(a0)
+; RV64IZCMP-NEXT:    sw a1, 56(a0)
+; RV64IZCMP-NEXT:    sw a4, 52(a0)
+; RV64IZCMP-NEXT:    sw a3, 48(a0)
+; RV64IZCMP-NEXT:    sw a2, 44(a0)
+; RV64IZCMP-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-NEXT:    sw t2, 16(a0)
+; RV64IZCMP-NEXT:    sw t1, 12(a0)
+; RV64IZCMP-NEXT:    sw t0, 8(a0)
+; RV64IZCMP-NEXT:    sw a7, 4(a0)
+; RV64IZCMP-NEXT:    sw a6, 0(a0)
+; RV64IZCMP-NEXT:    cm.popret {ra, s0-s3}, 48
 ;
 ; RV32IZCMP-SR-LABEL: many_args:
 ; RV32IZCMP-SR:       # %bb.0: # %entry
-; RV32IZCMP-SR-NEXT:    cm.push {ra, s0-s4}, -32
+; RV32IZCMP-SR-NEXT:    cm.push {ra, s0-s3}, -32
 ; RV32IZCMP-SR-NEXT:    lui a0, %hi(var0)
-; RV32IZCMP-SR-NEXT:    lw a6, %lo(var0)(a0)
-; RV32IZCMP-SR-NEXT:    lw a7, %lo(var0+4)(a0)
-; RV32IZCMP-SR-NEXT:    lw t0, %lo(var0+8)(a0)
-; RV32IZCMP-SR-NEXT:    lw t1, %lo(var0+12)(a0)
-; RV32IZCMP-SR-NEXT:    addi a5, a0, %lo(var0)
-; RV32IZCMP-SR-NEXT:    lw t2, 16(a5)
-; RV32IZCMP-SR-NEXT:    lw t3, 20(a5)
-; RV32IZCMP-SR-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-SR-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-SR-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-SR-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-SR-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-SR-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-SR-NEXT:    lw a1, 48(a5)
-; RV32IZCMP-SR-NEXT:    lw s0, 52(a5)
-; RV32IZCMP-SR-NEXT:    lw s1, 68(a5)
-; RV32IZCMP-SR-NEXT:    lw a2, 64(a5)
-; RV32IZCMP-SR-NEXT:    lw a3, 60(a5)
-; RV32IZCMP-SR-NEXT:    lw a4, 56(a5)
-; RV32IZCMP-SR-NEXT:    sw s1, 68(a5)
-; RV32IZCMP-SR-NEXT:    sw a2, 64(a5)
-; RV32IZCMP-SR-NEXT:    sw a3, 60(a5)
-; RV32IZCMP-SR-NEXT:    sw a4, 56(a5)
-; RV32IZCMP-SR-NEXT:    sw s0, 52(a5)
-; RV32IZCMP-SR-NEXT:    sw a1, 48(a5)
-; RV32IZCMP-SR-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-SR-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-SR-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-SR-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-SR-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-SR-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-SR-NEXT:    sw t3, 20(a5)
-; RV32IZCMP-SR-NEXT:    sw t2, 16(a5)
-; RV32IZCMP-SR-NEXT:    sw t1, %lo(var0+12)(a0)
-; RV32IZCMP-SR-NEXT:    sw t0, %lo(var0+8)(a0)
-; RV32IZCMP-SR-NEXT:    sw a7, %lo(var0+4)(a0)
-; RV32IZCMP-SR-NEXT:    sw a6, %lo(var0)(a0)
-; RV32IZCMP-SR-NEXT:    cm.popret {ra, s0-s4}, 32
+; RV32IZCMP-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV32IZCMP-SR-NEXT:    lw a6, 0(a0)
+; RV32IZCMP-SR-NEXT:    lw a7, 4(a0)
+; RV32IZCMP-SR-NEXT:    lw t0, 8(a0)
+; RV32IZCMP-SR-NEXT:    lw t1, 12(a0)
+; RV32IZCMP-SR-NEXT:    lw t2, 16(a0)
+; RV32IZCMP-SR-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-SR-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-SR-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-SR-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-SR-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-SR-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-SR-NEXT:    lw a2, 44(a0)
+; RV32IZCMP-SR-NEXT:    lw a3, 48(a0)
+; RV32IZCMP-SR-NEXT:    lw a4, 52(a0)
+; RV32IZCMP-SR-NEXT:    lw s0, 68(a0)
+; RV32IZCMP-SR-NEXT:    lw s1, 64(a0)
+; RV32IZCMP-SR-NEXT:    lw a5, 60(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 56(a0)
+; RV32IZCMP-SR-NEXT:    sw s0, 68(a0)
+; RV32IZCMP-SR-NEXT:    sw s1, 64(a0)
+; RV32IZCMP-SR-NEXT:    sw a5, 60(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 56(a0)
+; RV32IZCMP-SR-NEXT:    sw a4, 52(a0)
+; RV32IZCMP-SR-NEXT:    sw a3, 48(a0)
+; RV32IZCMP-SR-NEXT:    sw a2, 44(a0)
+; RV32IZCMP-SR-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-SR-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-SR-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-SR-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-SR-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-SR-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-SR-NEXT:    sw t2, 16(a0)
+; RV32IZCMP-SR-NEXT:    sw t1, 12(a0)
+; RV32IZCMP-SR-NEXT:    sw t0, 8(a0)
+; RV32IZCMP-SR-NEXT:    sw a7, 4(a0)
+; RV32IZCMP-SR-NEXT:    sw a6, 0(a0)
+; RV32IZCMP-SR-NEXT:    cm.popret {ra, s0-s3}, 32
 ;
 ; RV64IZCMP-SR-LABEL: many_args:
 ; RV64IZCMP-SR:       # %bb.0: # %entry
-; RV64IZCMP-SR-NEXT:    cm.push {ra, s0-s4}, -48
+; RV64IZCMP-SR-NEXT:    cm.push {ra, s0-s3}, -48
 ; RV64IZCMP-SR-NEXT:    lui a0, %hi(var0)
-; RV64IZCMP-SR-NEXT:    lw a6, %lo(var0)(a0)
-; RV64IZCMP-SR-NEXT:    lw a7, %lo(var0+4)(a0)
-; RV64IZCMP-SR-NEXT:    lw t0, %lo(var0+8)(a0)
-; RV64IZCMP-SR-NEXT:    lw t1, %lo(var0+12)(a0)
-; RV64IZCMP-SR-NEXT:    addi a5, a0, %lo(var0)
-; RV64IZCMP-SR-NEXT:    lw t2, 16(a5)
-; RV64IZCMP-SR-NEXT:    lw t3, 20(a5)
-; RV64IZCMP-SR-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-SR-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-SR-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-SR-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-SR-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-SR-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-SR-NEXT:    lw a1, 48(a5)
-; RV64IZCMP-SR-NEXT:    lw s0, 52(a5)
-; RV64IZCMP-SR-NEXT:    lw s1, 68(a5)
-; RV64IZCMP-SR-NEXT:    lw a2, 64(a5)
-; RV64IZCMP-SR-NEXT:    lw a3, 60(a5)
-; RV64IZCMP-SR-NEXT:    lw a4, 56(a5)
-; RV64IZCMP-SR-NEXT:    sw s1, 68(a5)
-; RV64IZCMP-SR-NEXT:    sw a2, 64(a5)
-; RV64IZCMP-SR-NEXT:    sw a3, 60(a5)
-; RV64IZCMP-SR-NEXT:    sw a4, 56(a5)
-; RV64IZCMP-SR-NEXT:    sw s0, 52(a5)
-; RV64IZCMP-SR-NEXT:    sw a1, 48(a5)
-; RV64IZCMP-SR-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-SR-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-SR-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-SR-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-SR-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-SR-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-SR-NEXT:    sw t3, 20(a5)
-; RV64IZCMP-SR-NEXT:    sw t2, 16(a5)
-; RV64IZCMP-SR-NEXT:    sw t1, %lo(var0+12)(a0)
-; RV64IZCMP-SR-NEXT:    sw t0, %lo(var0+8)(a0)
-; RV64IZCMP-SR-NEXT:    sw a7, %lo(var0+4)(a0)
-; RV64IZCMP-SR-NEXT:    sw a6, %lo(var0)(a0)
-; RV64IZCMP-SR-NEXT:    cm.popret {ra, s0-s4}, 48
+; RV64IZCMP-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV64IZCMP-SR-NEXT:    lw a6, 0(a0)
+; RV64IZCMP-SR-NEXT:    lw a7, 4(a0)
+; RV64IZCMP-SR-NEXT:    lw t0, 8(a0)
+; RV64IZCMP-SR-NEXT:    lw t1, 12(a0)
+; RV64IZCMP-SR-NEXT:    lw t2, 16(a0)
+; RV64IZCMP-SR-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-SR-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-SR-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-SR-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-SR-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-SR-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-SR-NEXT:    lw a2, 44(a0)
+; RV64IZCMP-SR-NEXT:    lw a3, 48(a0)
+; RV64IZCMP-SR-NEXT:    lw a4, 52(a0)
+; RV64IZCMP-SR-NEXT:    lw s0, 68(a0)
+; RV64IZCMP-SR-NEXT:    lw s1, 64(a0)
+; RV64IZCMP-SR-NEXT:    lw a5, 60(a0)
+; RV64IZCMP-SR-NEXT:    lw a1, 56(a0)
+; RV64IZCMP-SR-NEXT:    sw s0, 68(a0)
+; RV64IZCMP-SR-NEXT:    sw s1, 64(a0)
+; RV64IZCMP-SR-NEXT:    sw a5, 60(a0)
+; RV64IZCMP-SR-NEXT:    sw a1, 56(a0)
+; RV64IZCMP-SR-NEXT:    sw a4, 52(a0)
+; RV64IZCMP-SR-NEXT:    sw a3, 48(a0)
+; RV64IZCMP-SR-NEXT:    sw a2, 44(a0)
+; RV64IZCMP-SR-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-SR-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-SR-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-SR-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-SR-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-SR-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-SR-NEXT:    sw t2, 16(a0)
+; RV64IZCMP-SR-NEXT:    sw t1, 12(a0)
+; RV64IZCMP-SR-NEXT:    sw t0, 8(a0)
+; RV64IZCMP-SR-NEXT:    sw a7, 4(a0)
+; RV64IZCMP-SR-NEXT:    sw a6, 0(a0)
+; RV64IZCMP-SR-NEXT:    cm.popret {ra, s0-s3}, 48
 ;
 ; RV32I-LABEL: many_args:
 ; RV32I:       # %bb.0: # %entry
-; RV32I-NEXT:    addi sp, sp, -32
-; RV32I-NEXT:    sw s0, 28(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    sw s1, 24(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    sw s2, 20(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    sw s3, 16(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    sw s4, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    addi sp, sp, -16
+; RV32I-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 4(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 0(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    lui a0, %hi(var0)
-; RV32I-NEXT:    lw a1, %lo(var0)(a0)
-; RV32I-NEXT:    lw a2, %lo(var0+4)(a0)
-; RV32I-NEXT:    lw a3, %lo(var0+8)(a0)
-; RV32I-NEXT:    lw a4, %lo(var0+12)(a0)
-; RV32I-NEXT:    addi a5, a0, %lo(var0)
-; RV32I-NEXT:    lw a6, 16(a5)
-; RV32I-NEXT:    lw a7, 20(a5)
-; RV32I-NEXT:    lw t0, 24(a5)
-; RV32I-NEXT:    lw t1, 28(a5)
-; RV32I-NEXT:    lw t2, 32(a5)
-; RV32I-NEXT:    lw t3, 36(a5)
-; RV32I-NEXT:    lw t4, 40(a5)
-; RV32I-NEXT:    lw t5, 44(a5)
-; RV32I-NEXT:    lw t6, 48(a5)
-; RV32I-NEXT:    lw s0, 52(a5)
-; RV32I-NEXT:    lw s1, 68(a5)
-; RV32I-NEXT:    lw s2, 64(a5)
-; RV32I-NEXT:    lw s3, 60(a5)
-; RV32I-NEXT:    lw s4, 56(a5)
-; RV32I-NEXT:    sw s1, 68(a5)
-; RV32I-NEXT:    sw s2, 64(a5)
-; RV32I-NEXT:    sw s3, 60(a5)
-; RV32I-NEXT:    sw s4, 56(a5)
-; RV32I-NEXT:    sw s0, 52(a5)
-; RV32I-NEXT:    sw t6, 48(a5)
-; RV32I-NEXT:    sw t5, 44(a5)
-; RV32I-NEXT:    sw t4, 40(a5)
-; RV32I-NEXT:    sw t3, 36(a5)
-; RV32I-NEXT:    sw t2, 32(a5)
-; RV32I-NEXT:    sw t1, 28(a5)
-; RV32I-NEXT:    sw t0, 24(a5)
-; RV32I-NEXT:    sw a7, 20(a5)
-; RV32I-NEXT:    sw a6, 16(a5)
-; RV32I-NEXT:    sw a4, %lo(var0+12)(a0)
-; RV32I-NEXT:    sw a3, %lo(var0+8)(a0)
-; RV32I-NEXT:    sw a2, %lo(var0+4)(a0)
-; RV32I-NEXT:    sw a1, %lo(var0)(a0)
-; RV32I-NEXT:    lw s0, 28(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    lw s1, 24(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    lw s2, 20(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    lw s3, 16(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    lw s4, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    addi sp, sp, 32
+; RV32I-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    lw a2, 4(a0)
+; RV32I-NEXT:    lw a3, 8(a0)
+; RV32I-NEXT:    lw a4, 12(a0)
+; RV32I-NEXT:    lw a5, 16(a0)
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 68(a0)
+; RV32I-NEXT:    lw s1, 64(a0)
+; RV32I-NEXT:    lw s2, 60(a0)
+; RV32I-NEXT:    lw s3, 56(a0)
+; RV32I-NEXT:    sw s0, 68(a0)
+; RV32I-NEXT:    sw s1, 64(a0)
+; RV32I-NEXT:    sw s2, 60(a0)
+; RV32I-NEXT:    sw s3, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    sw a5, 16(a0)
+; RV32I-NEXT:    sw a4, 12(a0)
+; RV32I-NEXT:    sw a3, 8(a0)
+; RV32I-NEXT:    sw a2, 4(a0)
+; RV32I-NEXT:    sw a1, 0(a0)
+; RV32I-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 0(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 16
 ; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: many_args:
 ; RV64I:       # %bb.0: # %entry
-; RV64I-NEXT:    addi sp, sp, -48
-; RV64I-NEXT:    sd s0, 40(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s1, 32(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s2, 24(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s3, 16(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s4, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    addi sp, sp, -32
+; RV64I-NEXT:    sd s0, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 0(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    lui a0, %hi(var0)
-; RV64I-NEXT:    lw a1, %lo(var0)(a0)
-; RV64I-NEXT:    lw a2, %lo(var0+4)(a0)
-; RV64I-NEXT:    lw a3, %lo(var0+8)(a0)
-; RV64I-NEXT:    lw a4, %lo(var0+12)(a0)
-; RV64I-NEXT:    addi a5, a0, %lo(var0)
-; RV64I-NEXT:    lw a6, 16(a5)
-; RV64I-NEXT:    lw a7, 20(a5)
-; RV64I-NEXT:    lw t0, 24(a5)
-; RV64I-NEXT:    lw t1, 28(a5)
-; RV64I-NEXT:    lw t2, 32(a5)
-; RV64I-NEXT:    lw t3, 36(a5)
-; RV64I-NEXT:    lw t4, 40(a5)
-; RV64I-NEXT:    lw t5, 44(a5)
-; RV64I-NEXT:    lw t6, 48(a5)
-; RV64I-NEXT:    lw s0, 52(a5)
-; RV64I-NEXT:    lw s1, 68(a5)
-; RV64I-NEXT:    lw s2, 64(a5)
-; RV64I-NEXT:    lw s3, 60(a5)
-; RV64I-NEXT:    lw s4, 56(a5)
-; RV64I-NEXT:    sw s1, 68(a5)
-; RV64I-NEXT:    sw s2, 64(a5)
-; RV64I-NEXT:    sw s3, 60(a5)
-; RV64I-NEXT:    sw s4, 56(a5)
-; RV64I-NEXT:    sw s0, 52(a5)
-; RV64I-NEXT:    sw t6, 48(a5)
-; RV64I-NEXT:    sw t5, 44(a5)
-; RV64I-NEXT:    sw t4, 40(a5)
-; RV64I-NEXT:    sw t3, 36(a5)
-; RV64I-NEXT:    sw t2, 32(a5)
-; RV64I-NEXT:    sw t1, 28(a5)
-; RV64I-NEXT:    sw t0, 24(a5)
-; RV64I-NEXT:    sw a7, 20(a5)
-; RV64I-NEXT:    sw a6, 16(a5)
-; RV64I-NEXT:    sw a4, %lo(var0+12)(a0)
-; RV64I-NEXT:    sw a3, %lo(var0+8)(a0)
-; RV64I-NEXT:    sw a2, %lo(var0+4)(a0)
-; RV64I-NEXT:    sw a1, %lo(var0)(a0)
-; RV64I-NEXT:    ld s0, 40(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s1, 32(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s2, 24(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s3, 16(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s4, 8(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    addi sp, sp, 48
+; RV64I-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    lw a2, 4(a0)
+; RV64I-NEXT:    lw a3, 8(a0)
+; RV64I-NEXT:    lw a4, 12(a0)
+; RV64I-NEXT:    lw a5, 16(a0)
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 68(a0)
+; RV64I-NEXT:    lw s1, 64(a0)
+; RV64I-NEXT:    lw s2, 60(a0)
+; RV64I-NEXT:    lw s3, 56(a0)
+; RV64I-NEXT:    sw s0, 68(a0)
+; RV64I-NEXT:    sw s1, 64(a0)
+; RV64I-NEXT:    sw s2, 60(a0)
+; RV64I-NEXT:    sw s3, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    sw a5, 16(a0)
+; RV64I-NEXT:    sw a4, 12(a0)
+; RV64I-NEXT:    sw a3, 8(a0)
+; RV64I-NEXT:    sw a2, 4(a0)
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld s0, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 32
 ; RV64I-NEXT:    ret
 entry:
   %val = load [18 x i32], ptr @var0
@@ -1797,464 +1783,456 @@ define void @callee_with_irq() nounwind "interrupt"="user" {
 ; RV32IZCMP-LABEL: callee_with_irq:
 ; RV32IZCMP:       # %bb.0:
 ; RV32IZCMP-NEXT:    cm.push {ra, s0-s11}, -112
-; RV32IZCMP-NEXT:    addi sp, sp, -48
-; RV32IZCMP-NEXT:    sw t0, 92(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw t1, 88(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw t2, 84(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a0, 80(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a1, 76(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a2, 72(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a3, 68(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a4, 64(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a5, 60(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a6, 56(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw a7, 52(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw t3, 48(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw t4, 44(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw t5, 40(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    sw t6, 36(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lui a6, %hi(var_test_irq)
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV32IZCMP-NEXT:    sw a0, 32(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV32IZCMP-NEXT:    lw a0, 16(a5)
-; RV32IZCMP-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 20(a5)
-; RV32IZCMP-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-NEXT:    lw s5, 48(a5)
-; RV32IZCMP-NEXT:    lw s6, 52(a5)
-; RV32IZCMP-NEXT:    lw s7, 56(a5)
-; RV32IZCMP-NEXT:    lw s8, 60(a5)
-; RV32IZCMP-NEXT:    lw s9, 64(a5)
-; RV32IZCMP-NEXT:    lw s10, 68(a5)
-; RV32IZCMP-NEXT:    lw s11, 72(a5)
-; RV32IZCMP-NEXT:    lw ra, 76(a5)
-; RV32IZCMP-NEXT:    lw s1, 80(a5)
-; RV32IZCMP-NEXT:    lw t3, 84(a5)
-; RV32IZCMP-NEXT:    lw t2, 88(a5)
-; RV32IZCMP-NEXT:    lw t1, 92(a5)
-; RV32IZCMP-NEXT:    lw t0, 96(a5)
-; RV32IZCMP-NEXT:    lw s0, 100(a5)
-; RV32IZCMP-NEXT:    lw a7, 104(a5)
-; RV32IZCMP-NEXT:    lw a4, 108(a5)
-; RV32IZCMP-NEXT:    lw a0, 124(a5)
-; RV32IZCMP-NEXT:    lw a1, 120(a5)
-; RV32IZCMP-NEXT:    lw a2, 116(a5)
-; RV32IZCMP-NEXT:    lw a3, 112(a5)
-; RV32IZCMP-NEXT:    sw a0, 124(a5)
-; RV32IZCMP-NEXT:    sw a1, 120(a5)
-; RV32IZCMP-NEXT:    sw a2, 116(a5)
-; RV32IZCMP-NEXT:    sw a3, 112(a5)
-; RV32IZCMP-NEXT:    sw a4, 108(a5)
-; RV32IZCMP-NEXT:    sw a7, 104(a5)
-; RV32IZCMP-NEXT:    sw s0, 100(a5)
-; RV32IZCMP-NEXT:    sw t0, 96(a5)
-; RV32IZCMP-NEXT:    sw t1, 92(a5)
-; RV32IZCMP-NEXT:    sw t2, 88(a5)
-; RV32IZCMP-NEXT:    sw t3, 84(a5)
-; RV32IZCMP-NEXT:    sw s1, 80(a5)
-; RV32IZCMP-NEXT:    sw ra, 76(a5)
-; RV32IZCMP-NEXT:    sw s11, 72(a5)
-; RV32IZCMP-NEXT:    sw s10, 68(a5)
-; RV32IZCMP-NEXT:    sw s9, 64(a5)
-; RV32IZCMP-NEXT:    sw s8, 60(a5)
-; RV32IZCMP-NEXT:    sw s7, 56(a5)
-; RV32IZCMP-NEXT:    sw s6, 52(a5)
-; RV32IZCMP-NEXT:    sw s5, 48(a5)
-; RV32IZCMP-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 20(a5)
-; RV32IZCMP-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 16(a5)
-; RV32IZCMP-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-NEXT:    lw a0, 32(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq)(a6)
-; RV32IZCMP-NEXT:    lw t0, 92(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw t1, 88(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw t2, 84(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a0, 80(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a1, 76(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a2, 72(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a3, 68(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a4, 64(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a5, 60(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a6, 56(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw a7, 52(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw t3, 48(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw t4, 44(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw t5, 40(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    lw t6, 36(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    addi sp, sp, 48
+; RV32IZCMP-NEXT:    addi sp, sp, -32
+; RV32IZCMP-NEXT:    sw t0, 76(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw t1, 72(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw t2, 68(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a1, 60(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a2, 56(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a3, 52(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a4, 48(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a5, 44(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a6, 40(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw a7, 36(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw t3, 32(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw t4, 28(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw t5, 24(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    sw t6, 20(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lui a0, %hi(var_test_irq)
+; RV32IZCMP-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV32IZCMP-NEXT:    lw a1, 0(a0)
+; RV32IZCMP-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 4(a0)
+; RV32IZCMP-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 8(a0)
+; RV32IZCMP-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 12(a0)
+; RV32IZCMP-NEXT:    sw a1, 4(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 16(a0)
+; RV32IZCMP-NEXT:    sw a1, 0(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-NEXT:    lw s4, 44(a0)
+; RV32IZCMP-NEXT:    lw s5, 48(a0)
+; RV32IZCMP-NEXT:    lw s6, 52(a0)
+; RV32IZCMP-NEXT:    lw s7, 56(a0)
+; RV32IZCMP-NEXT:    lw s8, 60(a0)
+; RV32IZCMP-NEXT:    lw s9, 64(a0)
+; RV32IZCMP-NEXT:    lw s10, 68(a0)
+; RV32IZCMP-NEXT:    lw s11, 72(a0)
+; RV32IZCMP-NEXT:    lw ra, 76(a0)
+; RV32IZCMP-NEXT:    lw t2, 80(a0)
+; RV32IZCMP-NEXT:    lw s0, 84(a0)
+; RV32IZCMP-NEXT:    lw s1, 88(a0)
+; RV32IZCMP-NEXT:    lw t1, 92(a0)
+; RV32IZCMP-NEXT:    lw t0, 96(a0)
+; RV32IZCMP-NEXT:    lw a7, 100(a0)
+; RV32IZCMP-NEXT:    lw a6, 104(a0)
+; RV32IZCMP-NEXT:    lw a5, 108(a0)
+; RV32IZCMP-NEXT:    lw a1, 124(a0)
+; RV32IZCMP-NEXT:    lw a2, 120(a0)
+; RV32IZCMP-NEXT:    lw a3, 116(a0)
+; RV32IZCMP-NEXT:    lw a4, 112(a0)
+; RV32IZCMP-NEXT:    sw a1, 124(a0)
+; RV32IZCMP-NEXT:    sw a2, 120(a0)
+; RV32IZCMP-NEXT:    sw a3, 116(a0)
+; RV32IZCMP-NEXT:    sw a4, 112(a0)
+; RV32IZCMP-NEXT:    sw a5, 108(a0)
+; RV32IZCMP-NEXT:    sw a6, 104(a0)
+; RV32IZCMP-NEXT:    sw a7, 100(a0)
+; RV32IZCMP-NEXT:    sw t0, 96(a0)
+; RV32IZCMP-NEXT:    sw t1, 92(a0)
+; RV32IZCMP-NEXT:    sw s1, 88(a0)
+; RV32IZCMP-NEXT:    sw s0, 84(a0)
+; RV32IZCMP-NEXT:    sw t2, 80(a0)
+; RV32IZCMP-NEXT:    sw ra, 76(a0)
+; RV32IZCMP-NEXT:    sw s11, 72(a0)
+; RV32IZCMP-NEXT:    sw s10, 68(a0)
+; RV32IZCMP-NEXT:    sw s9, 64(a0)
+; RV32IZCMP-NEXT:    sw s8, 60(a0)
+; RV32IZCMP-NEXT:    sw s7, 56(a0)
+; RV32IZCMP-NEXT:    sw s6, 52(a0)
+; RV32IZCMP-NEXT:    sw s5, 48(a0)
+; RV32IZCMP-NEXT:    sw s4, 44(a0)
+; RV32IZCMP-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw a1, 0(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 16(a0)
+; RV32IZCMP-NEXT:    lw a1, 4(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 12(a0)
+; RV32IZCMP-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 8(a0)
+; RV32IZCMP-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 4(a0)
+; RV32IZCMP-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 0(a0)
+; RV32IZCMP-NEXT:    lw t0, 76(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw t1, 72(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw t2, 68(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a1, 60(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a2, 56(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a3, 52(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a4, 48(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a5, 44(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a6, 40(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw a7, 36(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw t3, 32(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw t4, 28(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw t5, 24(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    lw t6, 20(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    addi sp, sp, 32
 ; RV32IZCMP-NEXT:    cm.pop {ra, s0-s11}, 112
 ; RV32IZCMP-NEXT:    mret
 ;
 ; RV64IZCMP-LABEL: callee_with_irq:
 ; RV64IZCMP:       # %bb.0:
 ; RV64IZCMP-NEXT:    cm.push {ra, s0-s11}, -160
-; RV64IZCMP-NEXT:    addi sp, sp, -128
-; RV64IZCMP-NEXT:    sd t0, 168(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd t1, 160(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd t2, 152(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a0, 144(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a1, 136(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a2, 128(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a3, 120(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a4, 112(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a5, 104(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a6, 96(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd a7, 88(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd t3, 80(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd t4, 72(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd t5, 64(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    sd t6, 56(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lui a6, %hi(var_test_irq)
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV64IZCMP-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV64IZCMP-NEXT:    lw a0, 16(a5)
-; RV64IZCMP-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 20(a5)
-; RV64IZCMP-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-NEXT:    lw s5, 48(a5)
-; RV64IZCMP-NEXT:    lw s6, 52(a5)
-; RV64IZCMP-NEXT:    lw s7, 56(a5)
-; RV64IZCMP-NEXT:    lw s8, 60(a5)
-; RV64IZCMP-NEXT:    lw s9, 64(a5)
-; RV64IZCMP-NEXT:    lw s10, 68(a5)
-; RV64IZCMP-NEXT:    lw s11, 72(a5)
-; RV64IZCMP-NEXT:    lw ra, 76(a5)
-; RV64IZCMP-NEXT:    lw s1, 80(a5)
-; RV64IZCMP-NEXT:    lw t3, 84(a5)
-; RV64IZCMP-NEXT:    lw t2, 88(a5)
-; RV64IZCMP-NEXT:    lw t1, 92(a5)
-; RV64IZCMP-NEXT:    lw t0, 96(a5)
-; RV64IZCMP-NEXT:    lw s0, 100(a5)
-; RV64IZCMP-NEXT:    lw a7, 104(a5)
-; RV64IZCMP-NEXT:    lw a4, 108(a5)
-; RV64IZCMP-NEXT:    lw a0, 124(a5)
-; RV64IZCMP-NEXT:    lw a1, 120(a5)
-; RV64IZCMP-NEXT:    lw a2, 116(a5)
-; RV64IZCMP-NEXT:    lw a3, 112(a5)
-; RV64IZCMP-NEXT:    sw a0, 124(a5)
-; RV64IZCMP-NEXT:    sw a1, 120(a5)
-; RV64IZCMP-NEXT:    sw a2, 116(a5)
-; RV64IZCMP-NEXT:    sw a3, 112(a5)
-; RV64IZCMP-NEXT:    sw a4, 108(a5)
-; RV64IZCMP-NEXT:    sw a7, 104(a5)
-; RV64IZCMP-NEXT:    sw s0, 100(a5)
-; RV64IZCMP-NEXT:    sw t0, 96(a5)
-; RV64IZCMP-NEXT:    sw t1, 92(a5)
-; RV64IZCMP-NEXT:    sw t2, 88(a5)
-; RV64IZCMP-NEXT:    sw t3, 84(a5)
-; RV64IZCMP-NEXT:    sw s1, 80(a5)
-; RV64IZCMP-NEXT:    sw ra, 76(a5)
-; RV64IZCMP-NEXT:    sw s11, 72(a5)
-; RV64IZCMP-NEXT:    sw s10, 68(a5)
-; RV64IZCMP-NEXT:    sw s9, 64(a5)
-; RV64IZCMP-NEXT:    sw s8, 60(a5)
-; RV64IZCMP-NEXT:    sw s7, 56(a5)
-; RV64IZCMP-NEXT:    sw s6, 52(a5)
-; RV64IZCMP-NEXT:    sw s5, 48(a5)
-; RV64IZCMP-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 20(a5)
-; RV64IZCMP-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 16(a5)
-; RV64IZCMP-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq)(a6)
-; RV64IZCMP-NEXT:    ld t0, 168(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld t1, 160(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld t2, 152(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a0, 144(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a1, 136(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a2, 128(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a3, 120(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a4, 112(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a5, 104(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a6, 96(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld a7, 88(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld t3, 80(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld t4, 72(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld t5, 64(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    ld t6, 56(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    addi sp, sp, 128
+; RV64IZCMP-NEXT:    addi sp, sp, -112
+; RV64IZCMP-NEXT:    sd t0, 152(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd t1, 144(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd t2, 136(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a0, 128(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a1, 120(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a2, 112(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a3, 104(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a4, 96(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a5, 88(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a6, 80(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd a7, 72(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd t3, 64(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd t4, 56(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd t5, 48(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    sd t6, 40(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lui a0, %hi(var_test_irq)
+; RV64IZCMP-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV64IZCMP-NEXT:    lw a1, 0(a0)
+; RV64IZCMP-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 4(a0)
+; RV64IZCMP-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 8(a0)
+; RV64IZCMP-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 12(a0)
+; RV64IZCMP-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 16(a0)
+; RV64IZCMP-NEXT:    sd a1, 0(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-NEXT:    lw s4, 44(a0)
+; RV64IZCMP-NEXT:    lw s5, 48(a0)
+; RV64IZCMP-NEXT:    lw s6, 52(a0)
+; RV64IZCMP-NEXT:    lw s7, 56(a0)
+; RV64IZCMP-NEXT:    lw s8, 60(a0)
+; RV64IZCMP-NEXT:    lw s9, 64(a0)
+; RV64IZCMP-NEXT:    lw s10, 68(a0)
+; RV64IZCMP-NEXT:    lw s11, 72(a0)
+; RV64IZCMP-NEXT:    lw ra, 76(a0)
+; RV64IZCMP-NEXT:    lw t2, 80(a0)
+; RV64IZCMP-NEXT:    lw s0, 84(a0)
+; RV64IZCMP-NEXT:    lw s1, 88(a0)
+; RV64IZCMP-NEXT:    lw t1, 92(a0)
+; RV64IZCMP-NEXT:    lw t0, 96(a0)
+; RV64IZCMP-NEXT:    lw a7, 100(a0)
+; RV64IZCMP-NEXT:    lw a6, 104(a0)
+; RV64IZCMP-NEXT:    lw a5, 108(a0)
+; RV64IZCMP-NEXT:    lw a1, 124(a0)
+; RV64IZCMP-NEXT:    lw a2, 120(a0)
+; RV64IZCMP-NEXT:    lw a3, 116(a0)
+; RV64IZCMP-NEXT:    lw a4, 112(a0)
+; RV64IZCMP-NEXT:    sw a1, 124(a0)
+; RV64IZCMP-NEXT:    sw a2, 120(a0)
+; RV64IZCMP-NEXT:    sw a3, 116(a0)
+; RV64IZCMP-NEXT:    sw a4, 112(a0)
+; RV64IZCMP-NEXT:    sw a5, 108(a0)
+; RV64IZCMP-NEXT:    sw a6, 104(a0)
+; RV64IZCMP-NEXT:    sw a7, 100(a0)
+; RV64IZCMP-NEXT:    sw t0, 96(a0)
+; RV64IZCMP-NEXT:    sw t1, 92(a0)
+; RV64IZCMP-NEXT:    sw s1, 88(a0)
+; RV64IZCMP-NEXT:    sw s0, 84(a0)
+; RV64IZCMP-NEXT:    sw t2, 80(a0)
+; RV64IZCMP-NEXT:    sw ra, 76(a0)
+; RV64IZCMP-NEXT:    sw s11, 72(a0)
+; RV64IZCMP-NEXT:    sw s10, 68(a0)
+; RV64IZCMP-NEXT:    sw s9, 64(a0)
+; RV64IZCMP-NEXT:    sw s8, 60(a0)
+; RV64IZCMP-NEXT:    sw s7, 56(a0)
+; RV64IZCMP-NEXT:    sw s6, 52(a0)
+; RV64IZCMP-NEXT:    sw s5, 48(a0)
+; RV64IZCMP-NEXT:    sw s4, 44(a0)
+; RV64IZCMP-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 16(a0)
+; RV64IZCMP-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 12(a0)
+; RV64IZCMP-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 8(a0)
+; RV64IZCMP-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 4(a0)
+; RV64IZCMP-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 0(a0)
+; RV64IZCMP-NEXT:    ld t0, 152(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld t1, 144(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld t2, 136(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a0, 128(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a1, 120(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a2, 112(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a3, 104(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a4, 96(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a5, 88(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a6, 80(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld a7, 72(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld t3, 64(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld t4, 56(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld t5, 48(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    ld t6, 40(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    addi sp, sp, 112
 ; RV64IZCMP-NEXT:    cm.pop {ra, s0-s11}, 160
 ; RV64IZCMP-NEXT:    mret
 ;
 ; RV32IZCMP-SR-LABEL: callee_with_irq:
 ; RV32IZCMP-SR:       # %bb.0:
 ; RV32IZCMP-SR-NEXT:    cm.push {ra, s0-s11}, -112
-; RV32IZCMP-SR-NEXT:    addi sp, sp, -48
-; RV32IZCMP-SR-NEXT:    sw t0, 92(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw t1, 88(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw t2, 84(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a0, 80(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a1, 76(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a2, 72(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a3, 68(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a4, 64(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a5, 60(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a6, 56(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw a7, 52(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw t3, 48(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw t4, 44(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw t5, 40(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    sw t6, 36(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lui a6, %hi(var_test_irq)
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 32(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV32IZCMP-SR-NEXT:    lw a0, 16(a5)
-; RV32IZCMP-SR-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, 20(a5)
-; RV32IZCMP-SR-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-SR-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-SR-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-SR-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-SR-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-SR-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-SR-NEXT:    lw s5, 48(a5)
-; RV32IZCMP-SR-NEXT:    lw s6, 52(a5)
-; RV32IZCMP-SR-NEXT:    lw s7, 56(a5)
-; RV32IZCMP-SR-NEXT:    lw s8, 60(a5)
-; RV32IZCMP-SR-NEXT:    lw s9, 64(a5)
-; RV32IZCMP-SR-NEXT:    lw s10, 68(a5)
-; RV32IZCMP-SR-NEXT:    lw s11, 72(a5)
-; RV32IZCMP-SR-NEXT:    lw ra, 76(a5)
-; RV32IZCMP-SR-NEXT:    lw s1, 80(a5)
-; RV32IZCMP-SR-NEXT:    lw t3, 84(a5)
-; RV32IZCMP-SR-NEXT:    lw t2, 88(a5)
-; RV32IZCMP-SR-NEXT:    lw t1, 92(a5)
-; RV32IZCMP-SR-NEXT:    lw t0, 96(a5)
-; RV32IZCMP-SR-NEXT:    lw s0, 100(a5)
-; RV32IZCMP-SR-NEXT:    lw a7, 104(a5)
-; RV32IZCMP-SR-NEXT:    lw a4, 108(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 124(a5)
-; RV32IZCMP-SR-NEXT:    lw a1, 120(a5)
-; RV32IZCMP-SR-NEXT:    lw a2, 116(a5)
-; RV32IZCMP-SR-NEXT:    lw a3, 112(a5)
-; RV32IZCMP-SR-NEXT:    sw a0, 124(a5)
-; RV32IZCMP-SR-NEXT:    sw a1, 120(a5)
-; RV32IZCMP-SR-NEXT:    sw a2, 116(a5)
-; RV32IZCMP-SR-NEXT:    sw a3, 112(a5)
-; RV32IZCMP-SR-NEXT:    sw a4, 108(a5)
-; RV32IZCMP-SR-NEXT:    sw a7, 104(a5)
-; RV32IZCMP-SR-NEXT:    sw s0, 100(a5)
-; RV32IZCMP-SR-NEXT:    sw t0, 96(a5)
-; RV32IZCMP-SR-NEXT:    sw t1, 92(a5)
-; RV32IZCMP-SR-NEXT:    sw t2, 88(a5)
-; RV32IZCMP-SR-NEXT:    sw t3, 84(a5)
-; RV32IZCMP-SR-NEXT:    sw s1, 80(a5)
-; RV32IZCMP-SR-NEXT:    sw ra, 76(a5)
-; RV32IZCMP-SR-NEXT:    sw s11, 72(a5)
-; RV32IZCMP-SR-NEXT:    sw s10, 68(a5)
-; RV32IZCMP-SR-NEXT:    sw s9, 64(a5)
-; RV32IZCMP-SR-NEXT:    sw s8, 60(a5)
-; RV32IZCMP-SR-NEXT:    sw s7, 56(a5)
-; RV32IZCMP-SR-NEXT:    sw s6, 52(a5)
-; RV32IZCMP-SR-NEXT:    sw s5, 48(a5)
-; RV32IZCMP-SR-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-SR-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-SR-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-SR-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-SR-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-SR-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, 20(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, 16(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-SR-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-SR-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-SR-NEXT:    lw a0, 32(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq)(a6)
-; RV32IZCMP-SR-NEXT:    lw t0, 92(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw t1, 88(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw t2, 84(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a0, 80(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a1, 76(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a2, 72(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a3, 68(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a4, 64(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a5, 60(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a6, 56(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw a7, 52(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw t3, 48(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw t4, 44(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw t5, 40(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    lw t6, 36(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    addi sp, sp, 48
+; RV32IZCMP-SR-NEXT:    addi sp, sp, -32
+; RV32IZCMP-SR-NEXT:    sw t0, 76(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw t1, 72(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw t2, 68(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a1, 60(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a2, 56(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a3, 52(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a4, 48(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a5, 44(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a6, 40(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw a7, 36(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw t3, 32(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw t4, 28(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw t5, 24(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    sw t6, 20(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lui a0, %hi(var_test_irq)
+; RV32IZCMP-SR-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV32IZCMP-SR-NEXT:    lw a1, 0(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 4(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 8(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 12(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 4(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 16(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 0(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-SR-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-SR-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-SR-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-SR-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-SR-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-SR-NEXT:    lw s4, 44(a0)
+; RV32IZCMP-SR-NEXT:    lw s5, 48(a0)
+; RV32IZCMP-SR-NEXT:    lw s6, 52(a0)
+; RV32IZCMP-SR-NEXT:    lw s7, 56(a0)
+; RV32IZCMP-SR-NEXT:    lw s8, 60(a0)
+; RV32IZCMP-SR-NEXT:    lw s9, 64(a0)
+; RV32IZCMP-SR-NEXT:    lw s10, 68(a0)
+; RV32IZCMP-SR-NEXT:    lw s11, 72(a0)
+; RV32IZCMP-SR-NEXT:    lw ra, 76(a0)
+; RV32IZCMP-SR-NEXT:    lw t2, 80(a0)
+; RV32IZCMP-SR-NEXT:    lw s0, 84(a0)
+; RV32IZCMP-SR-NEXT:    lw s1, 88(a0)
+; RV32IZCMP-SR-NEXT:    lw t1, 92(a0)
+; RV32IZCMP-SR-NEXT:    lw t0, 96(a0)
+; RV32IZCMP-SR-NEXT:    lw a7, 100(a0)
+; RV32IZCMP-SR-NEXT:    lw a6, 104(a0)
+; RV32IZCMP-SR-NEXT:    lw a5, 108(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 124(a0)
+; RV32IZCMP-SR-NEXT:    lw a2, 120(a0)
+; RV32IZCMP-SR-NEXT:    lw a3, 116(a0)
+; RV32IZCMP-SR-NEXT:    lw a4, 112(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 124(a0)
+; RV32IZCMP-SR-NEXT:    sw a2, 120(a0)
+; RV32IZCMP-SR-NEXT:    sw a3, 116(a0)
+; RV32IZCMP-SR-NEXT:    sw a4, 112(a0)
+; RV32IZCMP-SR-NEXT:    sw a5, 108(a0)
+; RV32IZCMP-SR-NEXT:    sw a6, 104(a0)
+; RV32IZCMP-SR-NEXT:    sw a7, 100(a0)
+; RV32IZCMP-SR-NEXT:    sw t0, 96(a0)
+; RV32IZCMP-SR-NEXT:    sw t1, 92(a0)
+; RV32IZCMP-SR-NEXT:    sw s1, 88(a0)
+; RV32IZCMP-SR-NEXT:    sw s0, 84(a0)
+; RV32IZCMP-SR-NEXT:    sw t2, 80(a0)
+; RV32IZCMP-SR-NEXT:    sw ra, 76(a0)
+; RV32IZCMP-SR-NEXT:    sw s11, 72(a0)
+; RV32IZCMP-SR-NEXT:    sw s10, 68(a0)
+; RV32IZCMP-SR-NEXT:    sw s9, 64(a0)
+; RV32IZCMP-SR-NEXT:    sw s8, 60(a0)
+; RV32IZCMP-SR-NEXT:    sw s7, 56(a0)
+; RV32IZCMP-SR-NEXT:    sw s6, 52(a0)
+; RV32IZCMP-SR-NEXT:    sw s5, 48(a0)
+; RV32IZCMP-SR-NEXT:    sw s4, 44(a0)
+; RV32IZCMP-SR-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-SR-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-SR-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-SR-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-SR-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-SR-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 0(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 16(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 4(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 12(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 8(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 4(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 0(a0)
+; RV32IZCMP-SR-NEXT:    lw t0, 76(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw t1, 72(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw t2, 68(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a1, 60(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a2, 56(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a3, 52(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a4, 48(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a5, 44(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a6, 40(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw a7, 36(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw t3, 32(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw t4, 28(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw t5, 24(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    lw t6, 20(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    addi sp, sp, 32
 ; RV32IZCMP-SR-NEXT:    cm.pop {ra, s0-s11}, 112
 ; RV32IZCMP-SR-NEXT:    mret
 ;
 ; RV64IZCMP-SR-LABEL: callee_with_irq:
 ; RV64IZCMP-SR:       # %bb.0:
 ; RV64IZCMP-SR-NEXT:    cm.push {ra, s0-s11}, -160
-; RV64IZCMP-SR-NEXT:    addi sp, sp, -128
-; RV64IZCMP-SR-NEXT:    sd t0, 168(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd t1, 160(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd t2, 152(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a0, 144(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a1, 136(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a2, 128(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a3, 120(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a4, 112(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a5, 104(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a6, 96(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd a7, 88(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd t3, 80(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd t4, 72(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd t5, 64(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    sd t6, 56(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lui a6, %hi(var_test_irq)
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV64IZCMP-SR-NEXT:    lw a0, 16(a5)
-; RV64IZCMP-SR-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, 20(a5)
-; RV64IZCMP-SR-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-SR-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-SR-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-SR-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-SR-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-SR-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-SR-NEXT:    lw s5, 48(a5)
-; RV64IZCMP-SR-NEXT:    lw s6, 52(a5)
-; RV64IZCMP-SR-NEXT:    lw s7, 56(a5)
-; RV64IZCMP-SR-NEXT:    lw s8, 60(a5)
-; RV64IZCMP-SR-NEXT:    lw s9, 64(a5)
-; RV64IZCMP-SR-NEXT:    lw s10, 68(a5)
-; RV64IZCMP-SR-NEXT:    lw s11, 72(a5)
-; RV64IZCMP-SR-NEXT:    lw ra, 76(a5)
-; RV64IZCMP-SR-NEXT:    lw s1, 80(a5)
-; RV64IZCMP-SR-NEXT:    lw t3, 84(a5)
-; RV64IZCMP-SR-NEXT:    lw t2, 88(a5)
-; RV64IZCMP-SR-NEXT:    lw t1, 92(a5)
-; RV64IZCMP-SR-NEXT:    lw t0, 96(a5)
-; RV64IZCMP-SR-NEXT:    lw s0, 100(a5)
-; RV64IZCMP-SR-NEXT:    lw a7, 104(a5)
-; RV64IZCMP-SR-NEXT:    lw a4, 108(a5)
-; RV64IZCMP-SR-NEXT:    lw a0, 124(a5)
-; RV64IZCMP-SR-NEXT:    lw a1, 120(a5)
-; RV64IZCMP-SR-NEXT:    lw a2, 116(a5)
-; RV64IZCMP-SR-NEXT:    lw a3, 112(a5)
-; RV64IZCMP-SR-NEXT:    sw a0, 124(a5)
-; RV64IZCMP-SR-NEXT:    sw a1, 120(a5)
-; RV64IZCMP-SR-NEXT:    sw a2, 116(a5)
-; RV64IZCMP-SR-NEXT:    sw a3, 112(a5)
-; RV64IZCMP-SR-NEXT:    sw a4, 108(a5)
-; RV64IZCMP-SR-NEXT:    sw a7, 104(a5)
-; RV64IZCMP-SR-NEXT:    sw s0, 100(a5)
-; RV64IZCMP-SR-NEXT:    sw t0, 96(a5)
-; RV64IZCMP-SR-NEXT:    sw t1, 92(a5)
-; RV64IZCMP-SR-NEXT:    sw t2, 88(a5)
-; RV64IZCMP-SR-NEXT:    sw t3, 84(a5)
-; RV64IZCMP-SR-NEXT:    sw s1, 80(a5)
-; RV64IZCMP-SR-NEXT:    sw ra, 76(a5)
-; RV64IZCMP-SR-NEXT:    sw s11, 72(a5)
-; RV64IZCMP-SR-NEXT:    sw s10, 68(a5)
-; RV64IZCMP-SR-NEXT:    sw s9, 64(a5)
-; RV64IZCMP-SR-NEXT:    sw s8, 60(a5)
-; RV64IZCMP-SR-NEXT:    sw s7, 56(a5)
-; RV64IZCMP-SR-NEXT:    sw s6, 52(a5)
-; RV64IZCMP-SR-NEXT:    sw s5, 48(a5)
-; RV64IZCMP-SR-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-SR-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-SR-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-SR-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-SR-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-SR-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-SR-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, 20(a5)
-; RV64IZCMP-SR-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, 16(a5)
-; RV64IZCMP-SR-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-SR-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-SR-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-SR-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq)(a6)
-; RV64IZCMP-SR-NEXT:    ld t0, 168(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld t1, 160(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld t2, 152(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a0, 144(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a1, 136(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a2, 128(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a3, 120(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a4, 112(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a5, 104(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a6, 96(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld a7, 88(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld t3, 80(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld t4, 72(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld t5, 64(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    ld t6, 56(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    addi sp, sp, 128
+; RV64IZCMP-SR-NEXT:    addi sp, sp, -112
+; RV64IZCMP-SR-NEXT:    sd t0, 152(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd t1, 144(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd t2, 136(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a0, 128(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a1, 120(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a2, 112(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a3, 104(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a4, 96(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a5, 88(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a6, 80(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd a7, 72(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd t3, 64(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd t4, 56(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd t5, 48(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    sd t6, 40(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lui a0, %hi(var_test_irq)
+; RV64IZCMP-SR-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV64IZCMP-SR-NEXT:    lw a1, 0(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 4(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 8(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 12(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 16(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 0(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-SR-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-SR-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-SR-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-SR-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-SR-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-SR-NEXT:    lw s4, 44(a0)
+; RV64IZCMP-SR-NEXT:    lw s5, 48(a0)
+; RV64IZCMP-SR-NEXT:    lw s6, 52(a0)
+; RV64IZCMP-SR-NEXT:    lw s7, 56(a0)
+; RV64IZCMP-SR-NEXT:    lw s8, 60(a0)
+; RV64IZCMP-SR-NEXT:    lw s9, 64(a0)
+; RV64IZCMP-SR-NEXT:    lw s10, 68(a0)
+; RV64IZCMP-SR-NEXT:    lw s11, 72(a0)
+; RV64IZCMP-SR-NEXT:    lw ra, 76(a0)
+; RV64IZCMP-SR-NEXT:    lw t2, 80(a0)
+; RV64IZCMP-SR-NEXT:    lw s0, 84(a0)
+; RV64IZCMP-SR-NEXT:    lw s1, 88(a0)
+; RV64IZCMP-SR-NEXT:    lw t1, 92(a0)
+; RV64IZCMP-SR-NEXT:    lw t0, 96(a0)
+; RV64IZCMP-SR-NEXT:    lw a7, 100(a0)
+; RV64IZCMP-SR-NEXT:    lw a6, 104(a0)
+; RV64IZCMP-SR-NEXT:    lw a5, 108(a0)
+; RV64IZCMP-SR-NEXT:    lw a1, 124(a0)
+; RV64IZCMP-SR-NEXT:    lw a2, 120(a0)
+; RV64IZCMP-SR-NEXT:    lw a3, 116(a0)
+; RV64IZCMP-SR-NEXT:    lw a4, 112(a0)
+; RV64IZCMP-SR-NEXT:    sw a1, 124(a0)
+; RV64IZCMP-SR-NEXT:    sw a2, 120(a0)
+; RV64IZCMP-SR-NEXT:    sw a3, 116(a0)
+; RV64IZCMP-SR-NEXT:    sw a4, 112(a0)
+; RV64IZCMP-SR-NEXT:    sw a5, 108(a0)
+; RV64IZCMP-SR-NEXT:    sw a6, 104(a0)
+; RV64IZCMP-SR-NEXT:    sw a7, 100(a0)
+; RV64IZCMP-SR-NEXT:    sw t0, 96(a0)
+; RV64IZCMP-SR-NEXT:    sw t1, 92(a0)
+; RV64IZCMP-SR-NEXT:    sw s1, 88(a0)
+; RV64IZCMP-SR-NEXT:    sw s0, 84(a0)
+; RV64IZCMP-SR-NEXT:    sw t2, 80(a0)
+; RV64IZCMP-SR-NEXT:    sw ra, 76(a0)
+; RV64IZCMP-SR-NEXT:    sw s11, 72(a0)
+; RV64IZCMP-SR-NEXT:    sw s10, 68(a0)
+; RV64IZCMP-SR-NEXT:    sw s9, 64(a0)
+; RV64IZCMP-SR-NEXT:    sw s8, 60(a0)
+; RV64IZCMP-SR-NEXT:    sw s7, 56(a0)
+; RV64IZCMP-SR-NEXT:    sw s6, 52(a0)
+; RV64IZCMP-SR-NEXT:    sw s5, 48(a0)
+; RV64IZCMP-SR-NEXT:    sw s4, 44(a0)
+; RV64IZCMP-SR-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-SR-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-SR-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-SR-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-SR-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-SR-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 16(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 12(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 8(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 4(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 0(a0)
+; RV64IZCMP-SR-NEXT:    ld t0, 152(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld t1, 144(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld t2, 136(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a0, 128(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a1, 120(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a2, 112(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a3, 104(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a4, 96(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a5, 88(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a6, 80(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld a7, 72(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld t3, 64(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld t4, 56(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld t5, 48(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    ld t6, 40(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    addi sp, sp, 112
 ; RV64IZCMP-SR-NEXT:    cm.pop {ra, s0-s11}, 160
 ; RV64IZCMP-SR-NEXT:    mret
 ;
@@ -2289,84 +2267,82 @@ define void @callee_with_irq() nounwind "interrupt"="user" {
 ; RV32I-NEXT:    sw t4, 40(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw t5, 36(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw t6, 32(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lui a6, %hi(var_test_irq)
-; RV32I-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV32I-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV32I-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV32I-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV32I-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV32I-NEXT:    lw a0, 16(a5)
-; RV32I-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 20(a5)
-; RV32I-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw t0, 24(a5)
-; RV32I-NEXT:    lw t1, 28(a5)
-; RV32I-NEXT:    lw t2, 32(a5)
-; RV32I-NEXT:    lw t3, 36(a5)
-; RV32I-NEXT:    lw t4, 40(a5)
-; RV32I-NEXT:    lw t5, 44(a5)
-; RV32I-NEXT:    lw t6, 48(a5)
-; RV32I-NEXT:    lw s0, 52(a5)
-; RV32I-NEXT:    lw s1, 56(a5)
-; RV32I-NEXT:    lw s2, 60(a5)
-; RV32I-NEXT:    lw s3, 64(a5)
-; RV32I-NEXT:    lw s4, 68(a5)
-; RV32I-NEXT:    lw s5, 72(a5)
-; RV32I-NEXT:    lw s6, 76(a5)
-; RV32I-NEXT:    lw s7, 80(a5)
-; RV32I-NEXT:    lw s8, 84(a5)
-; RV32I-NEXT:    lw s9, 88(a5)
-; RV32I-NEXT:    lw s10, 92(a5)
-; RV32I-NEXT:    lw s11, 96(a5)
-; RV32I-NEXT:    lw ra, 100(a5)
-; RV32I-NEXT:    lw a7, 104(a5)
-; RV32I-NEXT:    lw a4, 108(a5)
-; RV32I-NEXT:    lw a0, 124(a5)
-; RV32I-NEXT:    lw a1, 120(a5)
-; RV32I-NEXT:    lw a2, 116(a5)
-; RV32I-NEXT:    lw a3, 112(a5)
-; RV32I-NEXT:    sw a0, 124(a5)
-; RV32I-NEXT:    sw a1, 120(a5)
-; RV32I-NEXT:    sw a2, 116(a5)
-; RV32I-NEXT:    sw a3, 112(a5)
-; RV32I-NEXT:    sw a4, 108(a5)
-; RV32I-NEXT:    sw a7, 104(a5)
-; RV32I-NEXT:    sw ra, 100(a5)
-; RV32I-NEXT:    sw s11, 96(a5)
-; RV32I-NEXT:    sw s10, 92(a5)
-; RV32I-NEXT:    sw s9, 88(a5)
-; RV32I-NEXT:    sw s8, 84(a5)
-; RV32I-NEXT:    sw s7, 80(a5)
-; RV32I-NEXT:    sw s6, 76(a5)
-; RV32I-NEXT:    sw s5, 72(a5)
-; RV32I-NEXT:    sw s4, 68(a5)
-; RV32I-NEXT:    sw s3, 64(a5)
-; RV32I-NEXT:    sw s2, 60(a5)
-; RV32I-NEXT:    sw s1, 56(a5)
-; RV32I-NEXT:    sw s0, 52(a5)
-; RV32I-NEXT:    sw t6, 48(a5)
-; RV32I-NEXT:    sw t5, 44(a5)
-; RV32I-NEXT:    sw t4, 40(a5)
-; RV32I-NEXT:    sw t3, 36(a5)
-; RV32I-NEXT:    sw t2, 32(a5)
-; RV32I-NEXT:    sw t1, 28(a5)
-; RV32I-NEXT:    sw t0, 24(a5)
-; RV32I-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 20(a5)
-; RV32I-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 16(a5)
-; RV32I-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV32I-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV32I-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV32I-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV32I-NEXT:    lui a0, %hi(var_test_irq)
+; RV32I-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    sw a1, 28(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 4(a0)
+; RV32I-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 8(a0)
+; RV32I-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 12(a0)
+; RV32I-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 16(a0)
+; RV32I-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 56(a0)
+; RV32I-NEXT:    lw s1, 60(a0)
+; RV32I-NEXT:    lw s2, 64(a0)
+; RV32I-NEXT:    lw s3, 68(a0)
+; RV32I-NEXT:    lw s4, 72(a0)
+; RV32I-NEXT:    lw s5, 76(a0)
+; RV32I-NEXT:    lw s6, 80(a0)
+; RV32I-NEXT:    lw s7, 84(a0)
+; RV32I-NEXT:    lw s8, 88(a0)
+; RV32I-NEXT:    lw s9, 92(a0)
+; RV32I-NEXT:    lw s10, 96(a0)
+; RV32I-NEXT:    lw s11, 100(a0)
+; RV32I-NEXT:    lw ra, 104(a0)
+; RV32I-NEXT:    lw a5, 108(a0)
+; RV32I-NEXT:    lw a1, 124(a0)
+; RV32I-NEXT:    lw a2, 120(a0)
+; RV32I-NEXT:    lw a3, 116(a0)
+; RV32I-NEXT:    lw a4, 112(a0)
+; RV32I-NEXT:    sw a1, 124(a0)
+; RV32I-NEXT:    sw a2, 120(a0)
+; RV32I-NEXT:    sw a3, 116(a0)
+; RV32I-NEXT:    sw a4, 112(a0)
+; RV32I-NEXT:    sw a5, 108(a0)
+; RV32I-NEXT:    sw ra, 104(a0)
+; RV32I-NEXT:    sw s11, 100(a0)
+; RV32I-NEXT:    sw s10, 96(a0)
+; RV32I-NEXT:    sw s9, 92(a0)
+; RV32I-NEXT:    sw s8, 88(a0)
+; RV32I-NEXT:    sw s7, 84(a0)
+; RV32I-NEXT:    sw s6, 80(a0)
+; RV32I-NEXT:    sw s5, 76(a0)
+; RV32I-NEXT:    sw s4, 72(a0)
+; RV32I-NEXT:    sw s3, 68(a0)
+; RV32I-NEXT:    sw s2, 64(a0)
+; RV32I-NEXT:    sw s1, 60(a0)
+; RV32I-NEXT:    sw s0, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 16(a0)
+; RV32I-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 12(a0)
+; RV32I-NEXT:    lw a1, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 8(a0)
+; RV32I-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 4(a0)
+; RV32I-NEXT:    lw a1, 28(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 0(a0)
 ; RV32I-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw t0, 136(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw t1, 132(sp) # 4-byte Folded Reload
@@ -2429,84 +2405,82 @@ define void @callee_with_irq() nounwind "interrupt"="user" {
 ; RV64I-NEXT:    sd t4, 64(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    sd t5, 56(sp) # 8-byte Folded Spill
 ; RV64I-NEXT:    sd t6, 48(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lui a6, %hi(var_test_irq)
-; RV64I-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV64I-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV64I-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV64I-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV64I-NEXT:    lw a0, 16(a5)
-; RV64I-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 20(a5)
-; RV64I-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw t0, 24(a5)
-; RV64I-NEXT:    lw t1, 28(a5)
-; RV64I-NEXT:    lw t2, 32(a5)
-; RV64I-NEXT:    lw t3, 36(a5)
-; RV64I-NEXT:    lw t4, 40(a5)
-; RV64I-NEXT:    lw t5, 44(a5)
-; RV64I-NEXT:    lw t6, 48(a5)
-; RV64I-NEXT:    lw s0, 52(a5)
-; RV64I-NEXT:    lw s1, 56(a5)
-; RV64I-NEXT:    lw s2, 60(a5)
-; RV64I-NEXT:    lw s3, 64(a5)
-; RV64I-NEXT:    lw s4, 68(a5)
-; RV64I-NEXT:    lw s5, 72(a5)
-; RV64I-NEXT:    lw s6, 76(a5)
-; RV64I-NEXT:    lw s7, 80(a5)
-; RV64I-NEXT:    lw s8, 84(a5)
-; RV64I-NEXT:    lw s9, 88(a5)
-; RV64I-NEXT:    lw s10, 92(a5)
-; RV64I-NEXT:    lw s11, 96(a5)
-; RV64I-NEXT:    lw ra, 100(a5)
-; RV64I-NEXT:    lw a7, 104(a5)
-; RV64I-NEXT:    lw a4, 108(a5)
-; RV64I-NEXT:    lw a0, 124(a5)
-; RV64I-NEXT:    lw a1, 120(a5)
-; RV64I-NEXT:    lw a2, 116(a5)
-; RV64I-NEXT:    lw a3, 112(a5)
-; RV64I-NEXT:    sw a0, 124(a5)
-; RV64I-NEXT:    sw a1, 120(a5)
-; RV64I-NEXT:    sw a2, 116(a5)
-; RV64I-NEXT:    sw a3, 112(a5)
-; RV64I-NEXT:    sw a4, 108(a5)
-; RV64I-NEXT:    sw a7, 104(a5)
-; RV64I-NEXT:    sw ra, 100(a5)
-; RV64I-NEXT:    sw s11, 96(a5)
-; RV64I-NEXT:    sw s10, 92(a5)
-; RV64I-NEXT:    sw s9, 88(a5)
-; RV64I-NEXT:    sw s8, 84(a5)
-; RV64I-NEXT:    sw s7, 80(a5)
-; RV64I-NEXT:    sw s6, 76(a5)
-; RV64I-NEXT:    sw s5, 72(a5)
-; RV64I-NEXT:    sw s4, 68(a5)
-; RV64I-NEXT:    sw s3, 64(a5)
-; RV64I-NEXT:    sw s2, 60(a5)
-; RV64I-NEXT:    sw s1, 56(a5)
-; RV64I-NEXT:    sw s0, 52(a5)
-; RV64I-NEXT:    sw t6, 48(a5)
-; RV64I-NEXT:    sw t5, 44(a5)
-; RV64I-NEXT:    sw t4, 40(a5)
-; RV64I-NEXT:    sw t3, 36(a5)
-; RV64I-NEXT:    sw t2, 32(a5)
-; RV64I-NEXT:    sw t1, 28(a5)
-; RV64I-NEXT:    sw t0, 24(a5)
-; RV64I-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 20(a5)
-; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 16(a5)
-; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV64I-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV64I-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV64I-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV64I-NEXT:    lui a0, %hi(var_test_irq)
+; RV64I-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    sd a1, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 4(a0)
+; RV64I-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 8(a0)
+; RV64I-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 12(a0)
+; RV64I-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 16(a0)
+; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 56(a0)
+; RV64I-NEXT:    lw s1, 60(a0)
+; RV64I-NEXT:    lw s2, 64(a0)
+; RV64I-NEXT:    lw s3, 68(a0)
+; RV64I-NEXT:    lw s4, 72(a0)
+; RV64I-NEXT:    lw s5, 76(a0)
+; RV64I-NEXT:    lw s6, 80(a0)
+; RV64I-NEXT:    lw s7, 84(a0)
+; RV64I-NEXT:    lw s8, 88(a0)
+; RV64I-NEXT:    lw s9, 92(a0)
+; RV64I-NEXT:    lw s10, 96(a0)
+; RV64I-NEXT:    lw s11, 100(a0)
+; RV64I-NEXT:    lw ra, 104(a0)
+; RV64I-NEXT:    lw a5, 108(a0)
+; RV64I-NEXT:    lw a1, 124(a0)
+; RV64I-NEXT:    lw a2, 120(a0)
+; RV64I-NEXT:    lw a3, 116(a0)
+; RV64I-NEXT:    lw a4, 112(a0)
+; RV64I-NEXT:    sw a1, 124(a0)
+; RV64I-NEXT:    sw a2, 120(a0)
+; RV64I-NEXT:    sw a3, 116(a0)
+; RV64I-NEXT:    sw a4, 112(a0)
+; RV64I-NEXT:    sw a5, 108(a0)
+; RV64I-NEXT:    sw ra, 104(a0)
+; RV64I-NEXT:    sw s11, 100(a0)
+; RV64I-NEXT:    sw s10, 96(a0)
+; RV64I-NEXT:    sw s9, 92(a0)
+; RV64I-NEXT:    sw s8, 88(a0)
+; RV64I-NEXT:    sw s7, 84(a0)
+; RV64I-NEXT:    sw s6, 80(a0)
+; RV64I-NEXT:    sw s5, 76(a0)
+; RV64I-NEXT:    sw s4, 72(a0)
+; RV64I-NEXT:    sw s3, 68(a0)
+; RV64I-NEXT:    sw s2, 64(a0)
+; RV64I-NEXT:    sw s1, 60(a0)
+; RV64I-NEXT:    sw s0, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 16(a0)
+; RV64I-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 12(a0)
+; RV64I-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 8(a0)
+; RV64I-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 4(a0)
+; RV64I-NEXT:    ld a1, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 0(a0)
 ; RV64I-NEXT:    ld ra, 264(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld t0, 256(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld t1, 248(sp) # 8-byte Folded Reload
@@ -2546,333 +2520,325 @@ define void @callee_no_irq() nounwind{
 ; RV32IZCMP-LABEL: callee_no_irq:
 ; RV32IZCMP:       # %bb.0:
 ; RV32IZCMP-NEXT:    cm.push {ra, s0-s11}, -96
-; RV32IZCMP-NEXT:    lui a6, %hi(var_test_irq)
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV32IZCMP-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV32IZCMP-NEXT:    lw a0, 16(a5)
-; RV32IZCMP-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw a0, 20(a5)
-; RV32IZCMP-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32IZCMP-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-NEXT:    lw s5, 48(a5)
-; RV32IZCMP-NEXT:    lw s6, 52(a5)
-; RV32IZCMP-NEXT:    lw s7, 56(a5)
-; RV32IZCMP-NEXT:    lw s8, 60(a5)
-; RV32IZCMP-NEXT:    lw s9, 64(a5)
-; RV32IZCMP-NEXT:    lw s10, 68(a5)
-; RV32IZCMP-NEXT:    lw s11, 72(a5)
-; RV32IZCMP-NEXT:    lw ra, 76(a5)
-; RV32IZCMP-NEXT:    lw s1, 80(a5)
-; RV32IZCMP-NEXT:    lw t3, 84(a5)
-; RV32IZCMP-NEXT:    lw t2, 88(a5)
-; RV32IZCMP-NEXT:    lw t1, 92(a5)
-; RV32IZCMP-NEXT:    lw t0, 96(a5)
-; RV32IZCMP-NEXT:    lw s0, 100(a5)
-; RV32IZCMP-NEXT:    lw a7, 104(a5)
-; RV32IZCMP-NEXT:    lw a4, 108(a5)
-; RV32IZCMP-NEXT:    lw a0, 124(a5)
-; RV32IZCMP-NEXT:    lw a1, 120(a5)
-; RV32IZCMP-NEXT:    lw a2, 116(a5)
-; RV32IZCMP-NEXT:    lw a3, 112(a5)
-; RV32IZCMP-NEXT:    sw a0, 124(a5)
-; RV32IZCMP-NEXT:    sw a1, 120(a5)
-; RV32IZCMP-NEXT:    sw a2, 116(a5)
-; RV32IZCMP-NEXT:    sw a3, 112(a5)
-; RV32IZCMP-NEXT:    sw a4, 108(a5)
-; RV32IZCMP-NEXT:    sw a7, 104(a5)
-; RV32IZCMP-NEXT:    sw s0, 100(a5)
-; RV32IZCMP-NEXT:    sw t0, 96(a5)
-; RV32IZCMP-NEXT:    sw t1, 92(a5)
-; RV32IZCMP-NEXT:    sw t2, 88(a5)
-; RV32IZCMP-NEXT:    sw t3, 84(a5)
-; RV32IZCMP-NEXT:    sw s1, 80(a5)
-; RV32IZCMP-NEXT:    sw ra, 76(a5)
-; RV32IZCMP-NEXT:    sw s11, 72(a5)
-; RV32IZCMP-NEXT:    sw s10, 68(a5)
-; RV32IZCMP-NEXT:    sw s9, 64(a5)
-; RV32IZCMP-NEXT:    sw s8, 60(a5)
-; RV32IZCMP-NEXT:    sw s7, 56(a5)
-; RV32IZCMP-NEXT:    sw s6, 52(a5)
-; RV32IZCMP-NEXT:    sw s5, 48(a5)
-; RV32IZCMP-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 20(a5)
-; RV32IZCMP-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, 16(a5)
-; RV32IZCMP-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32IZCMP-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV32IZCMP-NEXT:    lui a0, %hi(var_test_irq)
+; RV32IZCMP-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV32IZCMP-NEXT:    lw a1, 0(a0)
+; RV32IZCMP-NEXT:    sw a1, 28(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 4(a0)
+; RV32IZCMP-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 8(a0)
+; RV32IZCMP-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 12(a0)
+; RV32IZCMP-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw a1, 16(a0)
+; RV32IZCMP-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32IZCMP-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-NEXT:    lw s4, 44(a0)
+; RV32IZCMP-NEXT:    lw s5, 48(a0)
+; RV32IZCMP-NEXT:    lw s6, 52(a0)
+; RV32IZCMP-NEXT:    lw s7, 56(a0)
+; RV32IZCMP-NEXT:    lw s8, 60(a0)
+; RV32IZCMP-NEXT:    lw s9, 64(a0)
+; RV32IZCMP-NEXT:    lw s10, 68(a0)
+; RV32IZCMP-NEXT:    lw s11, 72(a0)
+; RV32IZCMP-NEXT:    lw ra, 76(a0)
+; RV32IZCMP-NEXT:    lw t2, 80(a0)
+; RV32IZCMP-NEXT:    lw s0, 84(a0)
+; RV32IZCMP-NEXT:    lw s1, 88(a0)
+; RV32IZCMP-NEXT:    lw t1, 92(a0)
+; RV32IZCMP-NEXT:    lw t0, 96(a0)
+; RV32IZCMP-NEXT:    lw a7, 100(a0)
+; RV32IZCMP-NEXT:    lw a6, 104(a0)
+; RV32IZCMP-NEXT:    lw a5, 108(a0)
+; RV32IZCMP-NEXT:    lw a1, 124(a0)
+; RV32IZCMP-NEXT:    lw a2, 120(a0)
+; RV32IZCMP-NEXT:    lw a3, 116(a0)
+; RV32IZCMP-NEXT:    lw a4, 112(a0)
+; RV32IZCMP-NEXT:    sw a1, 124(a0)
+; RV32IZCMP-NEXT:    sw a2, 120(a0)
+; RV32IZCMP-NEXT:    sw a3, 116(a0)
+; RV32IZCMP-NEXT:    sw a4, 112(a0)
+; RV32IZCMP-NEXT:    sw a5, 108(a0)
+; RV32IZCMP-NEXT:    sw a6, 104(a0)
+; RV32IZCMP-NEXT:    sw a7, 100(a0)
+; RV32IZCMP-NEXT:    sw t0, 96(a0)
+; RV32IZCMP-NEXT:    sw t1, 92(a0)
+; RV32IZCMP-NEXT:    sw s1, 88(a0)
+; RV32IZCMP-NEXT:    sw s0, 84(a0)
+; RV32IZCMP-NEXT:    sw t2, 80(a0)
+; RV32IZCMP-NEXT:    sw ra, 76(a0)
+; RV32IZCMP-NEXT:    sw s11, 72(a0)
+; RV32IZCMP-NEXT:    sw s10, 68(a0)
+; RV32IZCMP-NEXT:    sw s9, 64(a0)
+; RV32IZCMP-NEXT:    sw s8, 60(a0)
+; RV32IZCMP-NEXT:    sw s7, 56(a0)
+; RV32IZCMP-NEXT:    sw s6, 52(a0)
+; RV32IZCMP-NEXT:    sw s5, 48(a0)
+; RV32IZCMP-NEXT:    sw s4, 44(a0)
+; RV32IZCMP-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 16(a0)
+; RV32IZCMP-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 12(a0)
+; RV32IZCMP-NEXT:    lw a1, 20(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 8(a0)
+; RV32IZCMP-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 4(a0)
+; RV32IZCMP-NEXT:    lw a1, 28(sp) # 4-byte Folded Reload
+; RV32IZCMP-NEXT:    sw a1, 0(a0)
 ; RV32IZCMP-NEXT:    cm.popret {ra, s0-s11}, 96
 ;
 ; RV64IZCMP-LABEL: callee_no_irq:
 ; RV64IZCMP:       # %bb.0:
 ; RV64IZCMP-NEXT:    cm.push {ra, s0-s11}, -160
-; RV64IZCMP-NEXT:    lui a6, %hi(var_test_irq)
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV64IZCMP-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV64IZCMP-NEXT:    lw a0, 16(a5)
-; RV64IZCMP-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw a0, 20(a5)
-; RV64IZCMP-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64IZCMP-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-NEXT:    lw s5, 48(a5)
-; RV64IZCMP-NEXT:    lw s6, 52(a5)
-; RV64IZCMP-NEXT:    lw s7, 56(a5)
-; RV64IZCMP-NEXT:    lw s8, 60(a5)
-; RV64IZCMP-NEXT:    lw s9, 64(a5)
-; RV64IZCMP-NEXT:    lw s10, 68(a5)
-; RV64IZCMP-NEXT:    lw s11, 72(a5)
-; RV64IZCMP-NEXT:    lw ra, 76(a5)
-; RV64IZCMP-NEXT:    lw s1, 80(a5)
-; RV64IZCMP-NEXT:    lw t3, 84(a5)
-; RV64IZCMP-NEXT:    lw t2, 88(a5)
-; RV64IZCMP-NEXT:    lw t1, 92(a5)
-; RV64IZCMP-NEXT:    lw t0, 96(a5)
-; RV64IZCMP-NEXT:    lw s0, 100(a5)
-; RV64IZCMP-NEXT:    lw a7, 104(a5)
-; RV64IZCMP-NEXT:    lw a4, 108(a5)
-; RV64IZCMP-NEXT:    lw a0, 124(a5)
-; RV64IZCMP-NEXT:    lw a1, 120(a5)
-; RV64IZCMP-NEXT:    lw a2, 116(a5)
-; RV64IZCMP-NEXT:    lw a3, 112(a5)
-; RV64IZCMP-NEXT:    sw a0, 124(a5)
-; RV64IZCMP-NEXT:    sw a1, 120(a5)
-; RV64IZCMP-NEXT:    sw a2, 116(a5)
-; RV64IZCMP-NEXT:    sw a3, 112(a5)
-; RV64IZCMP-NEXT:    sw a4, 108(a5)
-; RV64IZCMP-NEXT:    sw a7, 104(a5)
-; RV64IZCMP-NEXT:    sw s0, 100(a5)
-; RV64IZCMP-NEXT:    sw t0, 96(a5)
-; RV64IZCMP-NEXT:    sw t1, 92(a5)
-; RV64IZCMP-NEXT:    sw t2, 88(a5)
-; RV64IZCMP-NEXT:    sw t3, 84(a5)
-; RV64IZCMP-NEXT:    sw s1, 80(a5)
-; RV64IZCMP-NEXT:    sw ra, 76(a5)
-; RV64IZCMP-NEXT:    sw s11, 72(a5)
-; RV64IZCMP-NEXT:    sw s10, 68(a5)
-; RV64IZCMP-NEXT:    sw s9, 64(a5)
-; RV64IZCMP-NEXT:    sw s8, 60(a5)
-; RV64IZCMP-NEXT:    sw s7, 56(a5)
-; RV64IZCMP-NEXT:    sw s6, 52(a5)
-; RV64IZCMP-NEXT:    sw s5, 48(a5)
-; RV64IZCMP-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 20(a5)
-; RV64IZCMP-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, 16(a5)
-; RV64IZCMP-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64IZCMP-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV64IZCMP-NEXT:    lui a0, %hi(var_test_irq)
+; RV64IZCMP-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV64IZCMP-NEXT:    lw a1, 0(a0)
+; RV64IZCMP-NEXT:    sd a1, 40(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 4(a0)
+; RV64IZCMP-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 8(a0)
+; RV64IZCMP-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 12(a0)
+; RV64IZCMP-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw a1, 16(a0)
+; RV64IZCMP-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64IZCMP-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-NEXT:    lw s4, 44(a0)
+; RV64IZCMP-NEXT:    lw s5, 48(a0)
+; RV64IZCMP-NEXT:    lw s6, 52(a0)
+; RV64IZCMP-NEXT:    lw s7, 56(a0)
+; RV64IZCMP-NEXT:    lw s8, 60(a0)
+; RV64IZCMP-NEXT:    lw s9, 64(a0)
+; RV64IZCMP-NEXT:    lw s10, 68(a0)
+; RV64IZCMP-NEXT:    lw s11, 72(a0)
+; RV64IZCMP-NEXT:    lw ra, 76(a0)
+; RV64IZCMP-NEXT:    lw t2, 80(a0)
+; RV64IZCMP-NEXT:    lw s0, 84(a0)
+; RV64IZCMP-NEXT:    lw s1, 88(a0)
+; RV64IZCMP-NEXT:    lw t1, 92(a0)
+; RV64IZCMP-NEXT:    lw t0, 96(a0)
+; RV64IZCMP-NEXT:    lw a7, 100(a0)
+; RV64IZCMP-NEXT:    lw a6, 104(a0)
+; RV64IZCMP-NEXT:    lw a5, 108(a0)
+; RV64IZCMP-NEXT:    lw a1, 124(a0)
+; RV64IZCMP-NEXT:    lw a2, 120(a0)
+; RV64IZCMP-NEXT:    lw a3, 116(a0)
+; RV64IZCMP-NEXT:    lw a4, 112(a0)
+; RV64IZCMP-NEXT:    sw a1, 124(a0)
+; RV64IZCMP-NEXT:    sw a2, 120(a0)
+; RV64IZCMP-NEXT:    sw a3, 116(a0)
+; RV64IZCMP-NEXT:    sw a4, 112(a0)
+; RV64IZCMP-NEXT:    sw a5, 108(a0)
+; RV64IZCMP-NEXT:    sw a6, 104(a0)
+; RV64IZCMP-NEXT:    sw a7, 100(a0)
+; RV64IZCMP-NEXT:    sw t0, 96(a0)
+; RV64IZCMP-NEXT:    sw t1, 92(a0)
+; RV64IZCMP-NEXT:    sw s1, 88(a0)
+; RV64IZCMP-NEXT:    sw s0, 84(a0)
+; RV64IZCMP-NEXT:    sw t2, 80(a0)
+; RV64IZCMP-NEXT:    sw ra, 76(a0)
+; RV64IZCMP-NEXT:    sw s11, 72(a0)
+; RV64IZCMP-NEXT:    sw s10, 68(a0)
+; RV64IZCMP-NEXT:    sw s9, 64(a0)
+; RV64IZCMP-NEXT:    sw s8, 60(a0)
+; RV64IZCMP-NEXT:    sw s7, 56(a0)
+; RV64IZCMP-NEXT:    sw s6, 52(a0)
+; RV64IZCMP-NEXT:    sw s5, 48(a0)
+; RV64IZCMP-NEXT:    sw s4, 44(a0)
+; RV64IZCMP-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 16(a0)
+; RV64IZCMP-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 12(a0)
+; RV64IZCMP-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 8(a0)
+; RV64IZCMP-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 4(a0)
+; RV64IZCMP-NEXT:    ld a1, 40(sp) # 8-byte Folded Reload
+; RV64IZCMP-NEXT:    sw a1, 0(a0)
 ; RV64IZCMP-NEXT:    cm.popret {ra, s0-s11}, 160
 ;
 ; RV32IZCMP-SR-LABEL: callee_no_irq:
 ; RV32IZCMP-SR:       # %bb.0:
 ; RV32IZCMP-SR-NEXT:    cm.push {ra, s0-s11}, -96
-; RV32IZCMP-SR-NEXT:    lui a6, %hi(var_test_irq)
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-SR-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV32IZCMP-SR-NEXT:    lw a0, 16(a5)
-; RV32IZCMP-SR-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw a0, 20(a5)
-; RV32IZCMP-SR-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32IZCMP-SR-NEXT:    lw t4, 24(a5)
-; RV32IZCMP-SR-NEXT:    lw t5, 28(a5)
-; RV32IZCMP-SR-NEXT:    lw t6, 32(a5)
-; RV32IZCMP-SR-NEXT:    lw s2, 36(a5)
-; RV32IZCMP-SR-NEXT:    lw s3, 40(a5)
-; RV32IZCMP-SR-NEXT:    lw s4, 44(a5)
-; RV32IZCMP-SR-NEXT:    lw s5, 48(a5)
-; RV32IZCMP-SR-NEXT:    lw s6, 52(a5)
-; RV32IZCMP-SR-NEXT:    lw s7, 56(a5)
-; RV32IZCMP-SR-NEXT:    lw s8, 60(a5)
-; RV32IZCMP-SR-NEXT:    lw s9, 64(a5)
-; RV32IZCMP-SR-NEXT:    lw s10, 68(a5)
-; RV32IZCMP-SR-NEXT:    lw s11, 72(a5)
-; RV32IZCMP-SR-NEXT:    lw ra, 76(a5)
-; RV32IZCMP-SR-NEXT:    lw s1, 80(a5)
-; RV32IZCMP-SR-NEXT:    lw t3, 84(a5)
-; RV32IZCMP-SR-NEXT:    lw t2, 88(a5)
-; RV32IZCMP-SR-NEXT:    lw t1, 92(a5)
-; RV32IZCMP-SR-NEXT:    lw t0, 96(a5)
-; RV32IZCMP-SR-NEXT:    lw s0, 100(a5)
-; RV32IZCMP-SR-NEXT:    lw a7, 104(a5)
-; RV32IZCMP-SR-NEXT:    lw a4, 108(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 124(a5)
-; RV32IZCMP-SR-NEXT:    lw a1, 120(a5)
-; RV32IZCMP-SR-NEXT:    lw a2, 116(a5)
-; RV32IZCMP-SR-NEXT:    lw a3, 112(a5)
-; RV32IZCMP-SR-NEXT:    sw a0, 124(a5)
-; RV32IZCMP-SR-NEXT:    sw a1, 120(a5)
-; RV32IZCMP-SR-NEXT:    sw a2, 116(a5)
-; RV32IZCMP-SR-NEXT:    sw a3, 112(a5)
-; RV32IZCMP-SR-NEXT:    sw a4, 108(a5)
-; RV32IZCMP-SR-NEXT:    sw a7, 104(a5)
-; RV32IZCMP-SR-NEXT:    sw s0, 100(a5)
-; RV32IZCMP-SR-NEXT:    sw t0, 96(a5)
-; RV32IZCMP-SR-NEXT:    sw t1, 92(a5)
-; RV32IZCMP-SR-NEXT:    sw t2, 88(a5)
-; RV32IZCMP-SR-NEXT:    sw t3, 84(a5)
-; RV32IZCMP-SR-NEXT:    sw s1, 80(a5)
-; RV32IZCMP-SR-NEXT:    sw ra, 76(a5)
-; RV32IZCMP-SR-NEXT:    sw s11, 72(a5)
-; RV32IZCMP-SR-NEXT:    sw s10, 68(a5)
-; RV32IZCMP-SR-NEXT:    sw s9, 64(a5)
-; RV32IZCMP-SR-NEXT:    sw s8, 60(a5)
-; RV32IZCMP-SR-NEXT:    sw s7, 56(a5)
-; RV32IZCMP-SR-NEXT:    sw s6, 52(a5)
-; RV32IZCMP-SR-NEXT:    sw s5, 48(a5)
-; RV32IZCMP-SR-NEXT:    sw s4, 44(a5)
-; RV32IZCMP-SR-NEXT:    sw s3, 40(a5)
-; RV32IZCMP-SR-NEXT:    sw s2, 36(a5)
-; RV32IZCMP-SR-NEXT:    sw t6, 32(a5)
-; RV32IZCMP-SR-NEXT:    sw t5, 28(a5)
-; RV32IZCMP-SR-NEXT:    sw t4, 24(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, 20(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, 16(a5)
-; RV32IZCMP-SR-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV32IZCMP-SR-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV32IZCMP-SR-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV32IZCMP-SR-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV32IZCMP-SR-NEXT:    lui a0, %hi(var_test_irq)
+; RV32IZCMP-SR-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV32IZCMP-SR-NEXT:    lw a1, 0(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 28(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 4(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 8(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 12(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw a1, 16(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32IZCMP-SR-NEXT:    lw t3, 20(a0)
+; RV32IZCMP-SR-NEXT:    lw t4, 24(a0)
+; RV32IZCMP-SR-NEXT:    lw t5, 28(a0)
+; RV32IZCMP-SR-NEXT:    lw t6, 32(a0)
+; RV32IZCMP-SR-NEXT:    lw s2, 36(a0)
+; RV32IZCMP-SR-NEXT:    lw s3, 40(a0)
+; RV32IZCMP-SR-NEXT:    lw s4, 44(a0)
+; RV32IZCMP-SR-NEXT:    lw s5, 48(a0)
+; RV32IZCMP-SR-NEXT:    lw s6, 52(a0)
+; RV32IZCMP-SR-NEXT:    lw s7, 56(a0)
+; RV32IZCMP-SR-NEXT:    lw s8, 60(a0)
+; RV32IZCMP-SR-NEXT:    lw s9, 64(a0)
+; RV32IZCMP-SR-NEXT:    lw s10, 68(a0)
+; RV32IZCMP-SR-NEXT:    lw s11, 72(a0)
+; RV32IZCMP-SR-NEXT:    lw ra, 76(a0)
+; RV32IZCMP-SR-NEXT:    lw t2, 80(a0)
+; RV32IZCMP-SR-NEXT:    lw s0, 84(a0)
+; RV32IZCMP-SR-NEXT:    lw s1, 88(a0)
+; RV32IZCMP-SR-NEXT:    lw t1, 92(a0)
+; RV32IZCMP-SR-NEXT:    lw t0, 96(a0)
+; RV32IZCMP-SR-NEXT:    lw a7, 100(a0)
+; RV32IZCMP-SR-NEXT:    lw a6, 104(a0)
+; RV32IZCMP-SR-NEXT:    lw a5, 108(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 124(a0)
+; RV32IZCMP-SR-NEXT:    lw a2, 120(a0)
+; RV32IZCMP-SR-NEXT:    lw a3, 116(a0)
+; RV32IZCMP-SR-NEXT:    lw a4, 112(a0)
+; RV32IZCMP-SR-NEXT:    sw a1, 124(a0)
+; RV32IZCMP-SR-NEXT:    sw a2, 120(a0)
+; RV32IZCMP-SR-NEXT:    sw a3, 116(a0)
+; RV32IZCMP-SR-NEXT:    sw a4, 112(a0)
+; RV32IZCMP-SR-NEXT:    sw a5, 108(a0)
+; RV32IZCMP-SR-NEXT:    sw a6, 104(a0)
+; RV32IZCMP-SR-NEXT:    sw a7, 100(a0)
+; RV32IZCMP-SR-NEXT:    sw t0, 96(a0)
+; RV32IZCMP-SR-NEXT:    sw t1, 92(a0)
+; RV32IZCMP-SR-NEXT:    sw s1, 88(a0)
+; RV32IZCMP-SR-NEXT:    sw s0, 84(a0)
+; RV32IZCMP-SR-NEXT:    sw t2, 80(a0)
+; RV32IZCMP-SR-NEXT:    sw ra, 76(a0)
+; RV32IZCMP-SR-NEXT:    sw s11, 72(a0)
+; RV32IZCMP-SR-NEXT:    sw s10, 68(a0)
+; RV32IZCMP-SR-NEXT:    sw s9, 64(a0)
+; RV32IZCMP-SR-NEXT:    sw s8, 60(a0)
+; RV32IZCMP-SR-NEXT:    sw s7, 56(a0)
+; RV32IZCMP-SR-NEXT:    sw s6, 52(a0)
+; RV32IZCMP-SR-NEXT:    sw s5, 48(a0)
+; RV32IZCMP-SR-NEXT:    sw s4, 44(a0)
+; RV32IZCMP-SR-NEXT:    sw s3, 40(a0)
+; RV32IZCMP-SR-NEXT:    sw s2, 36(a0)
+; RV32IZCMP-SR-NEXT:    sw t6, 32(a0)
+; RV32IZCMP-SR-NEXT:    sw t5, 28(a0)
+; RV32IZCMP-SR-NEXT:    sw t4, 24(a0)
+; RV32IZCMP-SR-NEXT:    sw t3, 20(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 16(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 12(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 20(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 8(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 4(a0)
+; RV32IZCMP-SR-NEXT:    lw a1, 28(sp) # 4-byte Folded Reload
+; RV32IZCMP-SR-NEXT:    sw a1, 0(a0)
 ; RV32IZCMP-SR-NEXT:    cm.popret {ra, s0-s11}, 96
 ;
 ; RV64IZCMP-SR-LABEL: callee_no_irq:
 ; RV64IZCMP-SR:       # %bb.0:
 ; RV64IZCMP-SR-NEXT:    cm.push {ra, s0-s11}, -160
-; RV64IZCMP-SR-NEXT:    lui a6, %hi(var_test_irq)
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-SR-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV64IZCMP-SR-NEXT:    lw a0, 16(a5)
-; RV64IZCMP-SR-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw a0, 20(a5)
-; RV64IZCMP-SR-NEXT:    sd a0, 0(sp) # 8-byte Folded Spill
-; RV64IZCMP-SR-NEXT:    lw t4, 24(a5)
-; RV64IZCMP-SR-NEXT:    lw t5, 28(a5)
-; RV64IZCMP-SR-NEXT:    lw t6, 32(a5)
-; RV64IZCMP-SR-NEXT:    lw s2, 36(a5)
-; RV64IZCMP-SR-NEXT:    lw s3, 40(a5)
-; RV64IZCMP-SR-NEXT:    lw s4, 44(a5)
-; RV64IZCMP-SR-NEXT:    lw s5, 48(a5)
-; RV64IZCMP-SR-NEXT:    lw s6, 52(a5)
-; RV64IZCMP-SR-NEXT:    lw s7, 56(a5)
-; RV64IZCMP-SR-NEXT:    lw s8, 60(a5)
-; RV64IZCMP-SR-NEXT:    lw s9, 64(a5)
-; RV64IZCMP-SR-NEXT:    lw s10, 68(a5)
-; RV64IZCMP-SR-NEXT:    lw s11, 72(a5)
-; RV64IZCMP-SR-NEXT:    lw ra, 76(a5)
-; RV64IZCMP-SR-NEXT:    lw s1, 80(a5)
-; RV64IZCMP-SR-NEXT:    lw t3, 84(a5)
-; RV64IZCMP-SR-NEXT:    lw t2, 88(a5)
-; RV64IZCMP-SR-NEXT:    lw t1, 92(a5)
-; RV64IZCMP-SR-NEXT:    lw t0, 96(a5)
-; RV64IZCMP-SR-NEXT:    lw s0, 100(a5)
-; RV64IZCMP-SR-NEXT:    lw a7, 104(a5)
-; RV64IZCMP-SR-NEXT:    lw a4, 108(a5)
-; RV64IZCMP-SR-NEXT:    lw a0, 124(a5)
-; RV64IZCMP-SR-NEXT:    lw a1, 120(a5)
-; RV64IZCMP-SR-NEXT:    lw a2, 116(a5)
-; RV64IZCMP-SR-NEXT:    lw a3, 112(a5)
-; RV64IZCMP-SR-NEXT:    sw a0, 124(a5)
-; RV64IZCMP-SR-NEXT:    sw a1, 120(a5)
-; RV64IZCMP-SR-NEXT:    sw a2, 116(a5)
-; RV64IZCMP-SR-NEXT:    sw a3, 112(a5)
-; RV64IZCMP-SR-NEXT:    sw a4, 108(a5)
-; RV64IZCMP-SR-NEXT:    sw a7, 104(a5)
-; RV64IZCMP-SR-NEXT:    sw s0, 100(a5)
-; RV64IZCMP-SR-NEXT:    sw t0, 96(a5)
-; RV64IZCMP-SR-NEXT:    sw t1, 92(a5)
-; RV64IZCMP-SR-NEXT:    sw t2, 88(a5)
-; RV64IZCMP-SR-NEXT:    sw t3, 84(a5)
-; RV64IZCMP-SR-NEXT:    sw s1, 80(a5)
-; RV64IZCMP-SR-NEXT:    sw ra, 76(a5)
-; RV64IZCMP-SR-NEXT:    sw s11, 72(a5)
-; RV64IZCMP-SR-NEXT:    sw s10, 68(a5)
-; RV64IZCMP-SR-NEXT:    sw s9, 64(a5)
-; RV64IZCMP-SR-NEXT:    sw s8, 60(a5)
-; RV64IZCMP-SR-NEXT:    sw s7, 56(a5)
-; RV64IZCMP-SR-NEXT:    sw s6, 52(a5)
-; RV64IZCMP-SR-NEXT:    sw s5, 48(a5)
-; RV64IZCMP-SR-NEXT:    sw s4, 44(a5)
-; RV64IZCMP-SR-NEXT:    sw s3, 40(a5)
-; RV64IZCMP-SR-NEXT:    sw s2, 36(a5)
-; RV64IZCMP-SR-NEXT:    sw t6, 32(a5)
-; RV64IZCMP-SR-NEXT:    sw t5, 28(a5)
-; RV64IZCMP-SR-NEXT:    sw t4, 24(a5)
-; RV64IZCMP-SR-NEXT:    ld a0, 0(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, 20(a5)
-; RV64IZCMP-SR-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, 16(a5)
-; RV64IZCMP-SR-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV64IZCMP-SR-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV64IZCMP-SR-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV64IZCMP-SR-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64IZCMP-SR-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV64IZCMP-SR-NEXT:    lui a0, %hi(var_test_irq)
+; RV64IZCMP-SR-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV64IZCMP-SR-NEXT:    lw a1, 0(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 40(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 4(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 8(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 12(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw a1, 16(a0)
+; RV64IZCMP-SR-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64IZCMP-SR-NEXT:    lw t3, 20(a0)
+; RV64IZCMP-SR-NEXT:    lw t4, 24(a0)
+; RV64IZCMP-SR-NEXT:    lw t5, 28(a0)
+; RV64IZCMP-SR-NEXT:    lw t6, 32(a0)
+; RV64IZCMP-SR-NEXT:    lw s2, 36(a0)
+; RV64IZCMP-SR-NEXT:    lw s3, 40(a0)
+; RV64IZCMP-SR-NEXT:    lw s4, 44(a0)
+; RV64IZCMP-SR-NEXT:    lw s5, 48(a0)
+; RV64IZCMP-SR-NEXT:    lw s6, 52(a0)
+; RV64IZCMP-SR-NEXT:    lw s7, 56(a0)
+; RV64IZCMP-SR-NEXT:    lw s8, 60(a0)
+; RV64IZCMP-SR-NEXT:    lw s9, 64(a0)
+; RV64IZCMP-SR-NEXT:    lw s10, 68(a0)
+; RV64IZCMP-SR-NEXT:    lw s11, 72(a0)
+; RV64IZCMP-SR-NEXT:    lw ra, 76(a0)
+; RV64IZCMP-SR-NEXT:    lw t2, 80(a0)
+; RV64IZCMP-SR-NEXT:    lw s0, 84(a0)
+; RV64IZCMP-SR-NEXT:    lw s1, 88(a0)
+; RV64IZCMP-SR-NEXT:    lw t1, 92(a0)
+; RV64IZCMP-SR-NEXT:    lw t0, 96(a0)
+; RV64IZCMP-SR-NEXT:    lw a7, 100(a0)
+; RV64IZCMP-SR-NEXT:    lw a6, 104(a0)
+; RV64IZCMP-SR-NEXT:    lw a5, 108(a0)
+; RV64IZCMP-SR-NEXT:    lw a1, 124(a0)
+; RV64IZCMP-SR-NEXT:    lw a2, 120(a0)
+; RV64IZCMP-SR-NEXT:    lw a3, 116(a0)
+; RV64IZCMP-SR-NEXT:    lw a4, 112(a0)
+; RV64IZCMP-SR-NEXT:    sw a1, 124(a0)
+; RV64IZCMP-SR-NEXT:    sw a2, 120(a0)
+; RV64IZCMP-SR-NEXT:    sw a3, 116(a0)
+; RV64IZCMP-SR-NEXT:    sw a4, 112(a0)
+; RV64IZCMP-SR-NEXT:    sw a5, 108(a0)
+; RV64IZCMP-SR-NEXT:    sw a6, 104(a0)
+; RV64IZCMP-SR-NEXT:    sw a7, 100(a0)
+; RV64IZCMP-SR-NEXT:    sw t0, 96(a0)
+; RV64IZCMP-SR-NEXT:    sw t1, 92(a0)
+; RV64IZCMP-SR-NEXT:    sw s1, 88(a0)
+; RV64IZCMP-SR-NEXT:    sw s0, 84(a0)
+; RV64IZCMP-SR-NEXT:    sw t2, 80(a0)
+; RV64IZCMP-SR-NEXT:    sw ra, 76(a0)
+; RV64IZCMP-SR-NEXT:    sw s11, 72(a0)
+; RV64IZCMP-SR-NEXT:    sw s10, 68(a0)
+; RV64IZCMP-SR-NEXT:    sw s9, 64(a0)
+; RV64IZCMP-SR-NEXT:    sw s8, 60(a0)
+; RV64IZCMP-SR-NEXT:    sw s7, 56(a0)
+; RV64IZCMP-SR-NEXT:    sw s6, 52(a0)
+; RV64IZCMP-SR-NEXT:    sw s5, 48(a0)
+; RV64IZCMP-SR-NEXT:    sw s4, 44(a0)
+; RV64IZCMP-SR-NEXT:    sw s3, 40(a0)
+; RV64IZCMP-SR-NEXT:    sw s2, 36(a0)
+; RV64IZCMP-SR-NEXT:    sw t6, 32(a0)
+; RV64IZCMP-SR-NEXT:    sw t5, 28(a0)
+; RV64IZCMP-SR-NEXT:    sw t4, 24(a0)
+; RV64IZCMP-SR-NEXT:    sw t3, 20(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 16(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 12(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 8(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 4(a0)
+; RV64IZCMP-SR-NEXT:    ld a1, 40(sp) # 8-byte Folded Reload
+; RV64IZCMP-SR-NEXT:    sw a1, 0(a0)
 ; RV64IZCMP-SR-NEXT:    cm.popret {ra, s0-s11}, 160
 ;
 ; RV32I-LABEL: callee_no_irq:
@@ -2891,84 +2857,82 @@ define void @callee_no_irq() nounwind{
 ; RV32I-NEXT:    sw s9, 36(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s10, 32(sp) # 4-byte Folded Spill
 ; RV32I-NEXT:    sw s11, 28(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lui a6, %hi(var_test_irq)
-; RV32I-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV32I-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV32I-NEXT:    sw a0, 20(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV32I-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV32I-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV32I-NEXT:    lw a0, 16(a5)
-; RV32I-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw a0, 20(a5)
-; RV32I-NEXT:    sw a0, 4(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    lw t0, 24(a5)
-; RV32I-NEXT:    lw t1, 28(a5)
-; RV32I-NEXT:    lw t2, 32(a5)
-; RV32I-NEXT:    lw t3, 36(a5)
-; RV32I-NEXT:    lw t4, 40(a5)
-; RV32I-NEXT:    lw t5, 44(a5)
-; RV32I-NEXT:    lw t6, 48(a5)
-; RV32I-NEXT:    lw s0, 52(a5)
-; RV32I-NEXT:    lw s1, 56(a5)
-; RV32I-NEXT:    lw s2, 60(a5)
-; RV32I-NEXT:    lw s3, 64(a5)
-; RV32I-NEXT:    lw s4, 68(a5)
-; RV32I-NEXT:    lw s5, 72(a5)
-; RV32I-NEXT:    lw s6, 76(a5)
-; RV32I-NEXT:    lw s7, 80(a5)
-; RV32I-NEXT:    lw s8, 84(a5)
-; RV32I-NEXT:    lw s9, 88(a5)
-; RV32I-NEXT:    lw s10, 92(a5)
-; RV32I-NEXT:    lw s11, 96(a5)
-; RV32I-NEXT:    lw ra, 100(a5)
-; RV32I-NEXT:    lw a7, 104(a5)
-; RV32I-NEXT:    lw a4, 108(a5)
-; RV32I-NEXT:    lw a0, 124(a5)
-; RV32I-NEXT:    lw a1, 120(a5)
-; RV32I-NEXT:    lw a2, 116(a5)
-; RV32I-NEXT:    lw a3, 112(a5)
-; RV32I-NEXT:    sw a0, 124(a5)
-; RV32I-NEXT:    sw a1, 120(a5)
-; RV32I-NEXT:    sw a2, 116(a5)
-; RV32I-NEXT:    sw a3, 112(a5)
-; RV32I-NEXT:    sw a4, 108(a5)
-; RV32I-NEXT:    sw a7, 104(a5)
-; RV32I-NEXT:    sw ra, 100(a5)
-; RV32I-NEXT:    sw s11, 96(a5)
-; RV32I-NEXT:    sw s10, 92(a5)
-; RV32I-NEXT:    sw s9, 88(a5)
-; RV32I-NEXT:    sw s8, 84(a5)
-; RV32I-NEXT:    sw s7, 80(a5)
-; RV32I-NEXT:    sw s6, 76(a5)
-; RV32I-NEXT:    sw s5, 72(a5)
-; RV32I-NEXT:    sw s4, 68(a5)
-; RV32I-NEXT:    sw s3, 64(a5)
-; RV32I-NEXT:    sw s2, 60(a5)
-; RV32I-NEXT:    sw s1, 56(a5)
-; RV32I-NEXT:    sw s0, 52(a5)
-; RV32I-NEXT:    sw t6, 48(a5)
-; RV32I-NEXT:    sw t5, 44(a5)
-; RV32I-NEXT:    sw t4, 40(a5)
-; RV32I-NEXT:    sw t3, 36(a5)
-; RV32I-NEXT:    sw t2, 32(a5)
-; RV32I-NEXT:    sw t1, 28(a5)
-; RV32I-NEXT:    sw t0, 24(a5)
-; RV32I-NEXT:    lw a0, 4(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 20(a5)
-; RV32I-NEXT:    lw a0, 8(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, 16(a5)
-; RV32I-NEXT:    lw a0, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV32I-NEXT:    lw a0, 16(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV32I-NEXT:    lw a0, 20(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV32I-NEXT:    lw a0, 24(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    sw a0, %lo(var_test_irq)(a6)
+; RV32I-NEXT:    lui a0, %hi(var_test_irq)
+; RV32I-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 4(a0)
+; RV32I-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 8(a0)
+; RV32I-NEXT:    sw a1, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 12(a0)
+; RV32I-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 16(a0)
+; RV32I-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 56(a0)
+; RV32I-NEXT:    lw s1, 60(a0)
+; RV32I-NEXT:    lw s2, 64(a0)
+; RV32I-NEXT:    lw s3, 68(a0)
+; RV32I-NEXT:    lw s4, 72(a0)
+; RV32I-NEXT:    lw s5, 76(a0)
+; RV32I-NEXT:    lw s6, 80(a0)
+; RV32I-NEXT:    lw s7, 84(a0)
+; RV32I-NEXT:    lw s8, 88(a0)
+; RV32I-NEXT:    lw s9, 92(a0)
+; RV32I-NEXT:    lw s10, 96(a0)
+; RV32I-NEXT:    lw s11, 100(a0)
+; RV32I-NEXT:    lw ra, 104(a0)
+; RV32I-NEXT:    lw a5, 108(a0)
+; RV32I-NEXT:    lw a1, 124(a0)
+; RV32I-NEXT:    lw a2, 120(a0)
+; RV32I-NEXT:    lw a3, 116(a0)
+; RV32I-NEXT:    lw a4, 112(a0)
+; RV32I-NEXT:    sw a1, 124(a0)
+; RV32I-NEXT:    sw a2, 120(a0)
+; RV32I-NEXT:    sw a3, 116(a0)
+; RV32I-NEXT:    sw a4, 112(a0)
+; RV32I-NEXT:    sw a5, 108(a0)
+; RV32I-NEXT:    sw ra, 104(a0)
+; RV32I-NEXT:    sw s11, 100(a0)
+; RV32I-NEXT:    sw s10, 96(a0)
+; RV32I-NEXT:    sw s9, 92(a0)
+; RV32I-NEXT:    sw s8, 88(a0)
+; RV32I-NEXT:    sw s7, 84(a0)
+; RV32I-NEXT:    sw s6, 80(a0)
+; RV32I-NEXT:    sw s5, 76(a0)
+; RV32I-NEXT:    sw s4, 72(a0)
+; RV32I-NEXT:    sw s3, 68(a0)
+; RV32I-NEXT:    sw s2, 64(a0)
+; RV32I-NEXT:    sw s1, 60(a0)
+; RV32I-NEXT:    sw s0, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 16(a0)
+; RV32I-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 12(a0)
+; RV32I-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 8(a0)
+; RV32I-NEXT:    lw a1, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 4(a0)
+; RV32I-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 0(a0)
 ; RV32I-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 68(sp) # 4-byte Folded Reload
@@ -2987,112 +2951,110 @@ define void @callee_no_irq() nounwind{
 ;
 ; RV64I-LABEL: callee_no_irq:
 ; RV64I:       # %bb.0:
-; RV64I-NEXT:    addi sp, sp, -160
-; RV64I-NEXT:    sd ra, 152(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s0, 144(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s1, 136(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s2, 128(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s3, 120(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s4, 112(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s5, 104(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s6, 96(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s7, 88(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s8, 80(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s9, 72(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s10, 64(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd s11, 56(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lui a6, %hi(var_test_irq)
-; RV64I-NEXT:    lw a0, %lo(var_test_irq)(a6)
-; RV64I-NEXT:    sd a0, 48(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var_test_irq+4)(a6)
-; RV64I-NEXT:    sd a0, 40(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var_test_irq+8)(a6)
-; RV64I-NEXT:    sd a0, 32(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, %lo(var_test_irq+12)(a6)
-; RV64I-NEXT:    sd a0, 24(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    addi a5, a6, %lo(var_test_irq)
-; RV64I-NEXT:    lw a0, 16(a5)
-; RV64I-NEXT:    sd a0, 16(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw a0, 20(a5)
-; RV64I-NEXT:    sd a0, 8(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    lw t0, 24(a5)
-; RV64I-NEXT:    lw t1, 28(a5)
-; RV64I-NEXT:    lw t2, 32(a5)
-; RV64I-NEXT:    lw t3, 36(a5)
-; RV64I-NEXT:    lw t4, 40(a5)
-; RV64I-NEXT:    lw t5, 44(a5)
-; RV64I-NEXT:    lw t6, 48(a5)
-; RV64I-NEXT:    lw s0, 52(a5)
-; RV64I-NEXT:    lw s1, 56(a5)
-; RV64I-NEXT:    lw s2, 60(a5)
-; RV64I-NEXT:    lw s3, 64(a5)
-; RV64I-NEXT:    lw s4, 68(a5)
-; RV64I-NEXT:    lw s5, 72(a5)
-; RV64I-NEXT:    lw s6, 76(a5)
-; RV64I-NEXT:    lw s7, 80(a5)
-; RV64I-NEXT:    lw s8, 84(a5)
-; RV64I-NEXT:    lw s9, 88(a5)
-; RV64I-NEXT:    lw s10, 92(a5)
-; RV64I-NEXT:    lw s11, 96(a5)
-; RV64I-NEXT:    lw ra, 100(a5)
-; RV64I-NEXT:    lw a7, 104(a5)
-; RV64I-NEXT:    lw a4, 108(a5)
-; RV64I-NEXT:    lw a0, 124(a5)
-; RV64I-NEXT:    lw a1, 120(a5)
-; RV64I-NEXT:    lw a2, 116(a5)
-; RV64I-NEXT:    lw a3, 112(a5)
-; RV64I-NEXT:    sw a0, 124(a5)
-; RV64I-NEXT:    sw a1, 120(a5)
-; RV64I-NEXT:    sw a2, 116(a5)
-; RV64I-NEXT:    sw a3, 112(a5)
-; RV64I-NEXT:    sw a4, 108(a5)
-; RV64I-NEXT:    sw a7, 104(a5)
-; RV64I-NEXT:    sw ra, 100(a5)
-; RV64I-NEXT:    sw s11, 96(a5)
-; RV64I-NEXT:    sw s10, 92(a5)
-; RV64I-NEXT:    sw s9, 88(a5)
-; RV64I-NEXT:    sw s8, 84(a5)
-; RV64I-NEXT:    sw s7, 80(a5)
-; RV64I-NEXT:    sw s6, 76(a5)
-; RV64I-NEXT:    sw s5, 72(a5)
-; RV64I-NEXT:    sw s4, 68(a5)
-; RV64I-NEXT:    sw s3, 64(a5)
-; RV64I-NEXT:    sw s2, 60(a5)
-; RV64I-NEXT:    sw s1, 56(a5)
-; RV64I-NEXT:    sw s0, 52(a5)
-; RV64I-NEXT:    sw t6, 48(a5)
-; RV64I-NEXT:    sw t5, 44(a5)
-; RV64I-NEXT:    sw t4, 40(a5)
-; RV64I-NEXT:    sw t3, 36(a5)
-; RV64I-NEXT:    sw t2, 32(a5)
-; RV64I-NEXT:    sw t1, 28(a5)
-; RV64I-NEXT:    sw t0, 24(a5)
-; RV64I-NEXT:    ld a0, 8(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 20(a5)
-; RV64I-NEXT:    ld a0, 16(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, 16(a5)
-; RV64I-NEXT:    ld a0, 24(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq+12)(a6)
-; RV64I-NEXT:    ld a0, 32(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq+8)(a6)
-; RV64I-NEXT:    ld a0, 40(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq+4)(a6)
-; RV64I-NEXT:    ld a0, 48(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    sw a0, %lo(var_test_irq)(a6)
-; RV64I-NEXT:    ld ra, 152(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s0, 144(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s1, 136(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s2, 128(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s3, 120(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s4, 112(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s5, 104(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s6, 96(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s7, 88(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s8, 80(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s9, 72(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s10, 64(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld s11, 56(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    addi sp, sp, 160
+; RV64I-NEXT:    addi sp, sp, -144
+; RV64I-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 120(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 112(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 104(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 96(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s5, 88(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s6, 80(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s7, 72(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s8, 64(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s9, 56(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s10, 48(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s11, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var_test_irq)
+; RV64I-NEXT:    addi a0, a0, %lo(var_test_irq)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    sd a1, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 4(a0)
+; RV64I-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 8(a0)
+; RV64I-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 12(a0)
+; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 16(a0)
+; RV64I-NEXT:    sd a1, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 56(a0)
+; RV64I-NEXT:    lw s1, 60(a0)
+; RV64I-NEXT:    lw s2, 64(a0)
+; RV64I-NEXT:    lw s3, 68(a0)
+; RV64I-NEXT:    lw s4, 72(a0)
+; RV64I-NEXT:    lw s5, 76(a0)
+; RV64I-NEXT:    lw s6, 80(a0)
+; RV64I-NEXT:    lw s7, 84(a0)
+; RV64I-NEXT:    lw s8, 88(a0)
+; RV64I-NEXT:    lw s9, 92(a0)
+; RV64I-NEXT:    lw s10, 96(a0)
+; RV64I-NEXT:    lw s11, 100(a0)
+; RV64I-NEXT:    lw ra, 104(a0)
+; RV64I-NEXT:    lw a5, 108(a0)
+; RV64I-NEXT:    lw a1, 124(a0)
+; RV64I-NEXT:    lw a2, 120(a0)
+; RV64I-NEXT:    lw a3, 116(a0)
+; RV64I-NEXT:    lw a4, 112(a0)
+; RV64I-NEXT:    sw a1, 124(a0)
+; RV64I-NEXT:    sw a2, 120(a0)
+; RV64I-NEXT:    sw a3, 116(a0)
+; RV64I-NEXT:    sw a4, 112(a0)
+; RV64I-NEXT:    sw a5, 108(a0)
+; RV64I-NEXT:    sw ra, 104(a0)
+; RV64I-NEXT:    sw s11, 100(a0)
+; RV64I-NEXT:    sw s10, 96(a0)
+; RV64I-NEXT:    sw s9, 92(a0)
+; RV64I-NEXT:    sw s8, 88(a0)
+; RV64I-NEXT:    sw s7, 84(a0)
+; RV64I-NEXT:    sw s6, 80(a0)
+; RV64I-NEXT:    sw s5, 76(a0)
+; RV64I-NEXT:    sw s4, 72(a0)
+; RV64I-NEXT:    sw s3, 68(a0)
+; RV64I-NEXT:    sw s2, 64(a0)
+; RV64I-NEXT:    sw s1, 60(a0)
+; RV64I-NEXT:    sw s0, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 16(a0)
+; RV64I-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 12(a0)
+; RV64I-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 8(a0)
+; RV64I-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 4(a0)
+; RV64I-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 120(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 112(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 104(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 96(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s5, 88(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s6, 80(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s7, 72(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s8, 64(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s9, 56(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s10, 48(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s11, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 144
 ; RV64I-NEXT:    ret
   %val = load [32 x i32], ptr @var_test_irq
   store volatile [32 x i32] %val, ptr @var_test_irq
diff --git a/llvm/test/CodeGen/RISCV/rv64-legal-i32/mem64.ll b/llvm/test/CodeGen/RISCV/rv64-legal-i32/mem64.ll
index de4c21f324688..4ad6b3e34c143 100644
--- a/llvm/test/CodeGen/RISCV/rv64-legal-i32/mem64.ll
+++ b/llvm/test/CodeGen/RISCV/rv64-legal-i32/mem64.ll
@@ -175,12 +175,12 @@ define dso_local i16 @load_sext_zext_anyext_i1_i16(ptr %a) nounwind {
 define dso_local i64 @ld_sd_global(i64 %a) nounwind {
 ; RV64I-LABEL: ld_sd_global:
 ; RV64I:       # %bb.0:
-; RV64I-NEXT:    lui a2, %hi(G)
-; RV64I-NEXT:    ld a1, %lo(G)(a2)
-; RV64I-NEXT:    addi a3, a2, %lo(G)
-; RV64I-NEXT:    sd a0, %lo(G)(a2)
-; RV64I-NEXT:    ld zero, 72(a3)
-; RV64I-NEXT:    sd a0, 72(a3)
+; RV64I-NEXT:    lui a1, %hi(G)
+; RV64I-NEXT:    addi a2, a1, %lo(G)
+; RV64I-NEXT:    ld a1, 0(a2)
+; RV64I-NEXT:    sd a0, 0(a2)
+; RV64I-NEXT:    ld zero, 72(a2)
+; RV64I-NEXT:    sd a0, 72(a2)
 ; RV64I-NEXT:    mv a0, a1
 ; RV64I-NEXT:    ret
   %1 = load volatile i64, ptr @G
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-store-merge-crash.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-store-merge-crash.ll
index 391117c72ece7..d04dbe9bf27ed 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-store-merge-crash.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-store-merge-crash.ll
@@ -13,13 +13,13 @@ define void @baz() nounwind {
 ; CHECK-LABEL: baz:
 ; CHECK:       # %bb.0: # %entry
 ; CHECK-NEXT:    lui a0, %hi(foo)
-; CHECK-NEXT:    addi a1, a0, %lo(foo)
-; CHECK-NEXT:    lw a1, 4(a1)
-; CHECK-NEXT:    lw a0, %lo(foo)(a0)
+; CHECK-NEXT:    addi a0, a0, %lo(foo)
+; CHECK-NEXT:    lw a1, 4(a0)
+; CHECK-NEXT:    lw a0, 0(a0)
 ; CHECK-NEXT:    lui a2, %hi(bar)
-; CHECK-NEXT:    sw a1, %lo(bar)(a2)
-; CHECK-NEXT:    addi a1, a2, %lo(bar)
-; CHECK-NEXT:    sw a0, 4(a1)
+; CHECK-NEXT:    addi a2, a2, %lo(bar)
+; CHECK-NEXT:    sw a1, 0(a2)
+; CHECK-NEXT:    sw a0, 4(a2)
 ; CHECK-NEXT:    ret
 entry:
   %0 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @foo, i64 0, i64 1), align 4
diff --git a/llvm/test/CodeGen/RISCV/saverestore.ll b/llvm/test/CodeGen/RISCV/saverestore.ll
index f3dc2d0ef5078..59f59014810b8 100644
--- a/llvm/test/CodeGen/RISCV/saverestore.ll
+++ b/llvm/test/CodeGen/RISCV/saverestore.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
 ; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32I
 ; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64I
 ; RUN: llc -mtriple=riscv32 -mattr=+save-restore < %s | FileCheck %s -check-prefix=RV32I-SR
@@ -13,28 +14,280 @@
 
 define void @callee_saved0() nounwind {
 ; RV32I-LABEL: callee_saved0:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -16
+; RV32I-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 4(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 0(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lui a0, %hi(var0)
+; RV32I-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    lw a2, 4(a0)
+; RV32I-NEXT:    lw a3, 8(a0)
+; RV32I-NEXT:    lw a4, 12(a0)
+; RV32I-NEXT:    lw a5, 16(a0)
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 68(a0)
+; RV32I-NEXT:    lw s1, 64(a0)
+; RV32I-NEXT:    lw s2, 60(a0)
+; RV32I-NEXT:    lw s3, 56(a0)
+; RV32I-NEXT:    sw s0, 68(a0)
+; RV32I-NEXT:    sw s1, 64(a0)
+; RV32I-NEXT:    sw s2, 60(a0)
+; RV32I-NEXT:    sw s3, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    sw a5, 16(a0)
+; RV32I-NEXT:    sw a4, 12(a0)
+; RV32I-NEXT:    sw a3, 8(a0)
+; RV32I-NEXT:    sw a2, 4(a0)
+; RV32I-NEXT:    sw a1, 0(a0)
+; RV32I-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 0(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 16
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: callee_saved0:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -32
+; RV64I-NEXT:    sd s0, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var0)
+; RV64I-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    lw a2, 4(a0)
+; RV64I-NEXT:    lw a3, 8(a0)
+; RV64I-NEXT:    lw a4, 12(a0)
+; RV64I-NEXT:    lw a5, 16(a0)
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 68(a0)
+; RV64I-NEXT:    lw s1, 64(a0)
+; RV64I-NEXT:    lw s2, 60(a0)
+; RV64I-NEXT:    lw s3, 56(a0)
+; RV64I-NEXT:    sw s0, 68(a0)
+; RV64I-NEXT:    sw s1, 64(a0)
+; RV64I-NEXT:    sw s2, 60(a0)
+; RV64I-NEXT:    sw s3, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    sw a5, 16(a0)
+; RV64I-NEXT:    sw a4, 12(a0)
+; RV64I-NEXT:    sw a3, 8(a0)
+; RV64I-NEXT:    sw a2, 4(a0)
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld s0, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 32
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: callee_saved0:
-; RV32I-SR:         call t0, __riscv_save_5
-; RV32I-SR:         tail __riscv_restore_5
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    call t0, __riscv_save_4
+; RV32I-SR-NEXT:    lui a0, %hi(var0)
+; RV32I-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-SR-NEXT:    lw a1, 0(a0)
+; RV32I-SR-NEXT:    lw a2, 4(a0)
+; RV32I-SR-NEXT:    lw a3, 8(a0)
+; RV32I-SR-NEXT:    lw a4, 12(a0)
+; RV32I-SR-NEXT:    lw a5, 16(a0)
+; RV32I-SR-NEXT:    lw a6, 20(a0)
+; RV32I-SR-NEXT:    lw a7, 24(a0)
+; RV32I-SR-NEXT:    lw t0, 28(a0)
+; RV32I-SR-NEXT:    lw t1, 32(a0)
+; RV32I-SR-NEXT:    lw t2, 36(a0)
+; RV32I-SR-NEXT:    lw t3, 40(a0)
+; RV32I-SR-NEXT:    lw t4, 44(a0)
+; RV32I-SR-NEXT:    lw t5, 48(a0)
+; RV32I-SR-NEXT:    lw t6, 52(a0)
+; RV32I-SR-NEXT:    lw s0, 68(a0)
+; RV32I-SR-NEXT:    lw s1, 64(a0)
+; RV32I-SR-NEXT:    lw s2, 60(a0)
+; RV32I-SR-NEXT:    lw s3, 56(a0)
+; RV32I-SR-NEXT:    sw s0, 68(a0)
+; RV32I-SR-NEXT:    sw s1, 64(a0)
+; RV32I-SR-NEXT:    sw s2, 60(a0)
+; RV32I-SR-NEXT:    sw s3, 56(a0)
+; RV32I-SR-NEXT:    sw t6, 52(a0)
+; RV32I-SR-NEXT:    sw t5, 48(a0)
+; RV32I-SR-NEXT:    sw t4, 44(a0)
+; RV32I-SR-NEXT:    sw t3, 40(a0)
+; RV32I-SR-NEXT:    sw t2, 36(a0)
+; RV32I-SR-NEXT:    sw t1, 32(a0)
+; RV32I-SR-NEXT:    sw t0, 28(a0)
+; RV32I-SR-NEXT:    sw a7, 24(a0)
+; RV32I-SR-NEXT:    sw a6, 20(a0)
+; RV32I-SR-NEXT:    sw a5, 16(a0)
+; RV32I-SR-NEXT:    sw a4, 12(a0)
+; RV32I-SR-NEXT:    sw a3, 8(a0)
+; RV32I-SR-NEXT:    sw a2, 4(a0)
+; RV32I-SR-NEXT:    sw a1, 0(a0)
+; RV32I-SR-NEXT:    tail __riscv_restore_4
 ;
 ; RV64I-SR-LABEL: callee_saved0:
-; RV64I-SR:         call t0, __riscv_save_5
-; RV64I-SR:         tail __riscv_restore_5
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    call t0, __riscv_save_4
+; RV64I-SR-NEXT:    lui a0, %hi(var0)
+; RV64I-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-SR-NEXT:    lw a1, 0(a0)
+; RV64I-SR-NEXT:    lw a2, 4(a0)
+; RV64I-SR-NEXT:    lw a3, 8(a0)
+; RV64I-SR-NEXT:    lw a4, 12(a0)
+; RV64I-SR-NEXT:    lw a5, 16(a0)
+; RV64I-SR-NEXT:    lw a6, 20(a0)
+; RV64I-SR-NEXT:    lw a7, 24(a0)
+; RV64I-SR-NEXT:    lw t0, 28(a0)
+; RV64I-SR-NEXT:    lw t1, 32(a0)
+; RV64I-SR-NEXT:    lw t2, 36(a0)
+; RV64I-SR-NEXT:    lw t3, 40(a0)
+; RV64I-SR-NEXT:    lw t4, 44(a0)
+; RV64I-SR-NEXT:    lw t5, 48(a0)
+; RV64I-SR-NEXT:    lw t6, 52(a0)
+; RV64I-SR-NEXT:    lw s0, 68(a0)
+; RV64I-SR-NEXT:    lw s1, 64(a0)
+; RV64I-SR-NEXT:    lw s2, 60(a0)
+; RV64I-SR-NEXT:    lw s3, 56(a0)
+; RV64I-SR-NEXT:    sw s0, 68(a0)
+; RV64I-SR-NEXT:    sw s1, 64(a0)
+; RV64I-SR-NEXT:    sw s2, 60(a0)
+; RV64I-SR-NEXT:    sw s3, 56(a0)
+; RV64I-SR-NEXT:    sw t6, 52(a0)
+; RV64I-SR-NEXT:    sw t5, 48(a0)
+; RV64I-SR-NEXT:    sw t4, 44(a0)
+; RV64I-SR-NEXT:    sw t3, 40(a0)
+; RV64I-SR-NEXT:    sw t2, 36(a0)
+; RV64I-SR-NEXT:    sw t1, 32(a0)
+; RV64I-SR-NEXT:    sw t0, 28(a0)
+; RV64I-SR-NEXT:    sw a7, 24(a0)
+; RV64I-SR-NEXT:    sw a6, 20(a0)
+; RV64I-SR-NEXT:    sw a5, 16(a0)
+; RV64I-SR-NEXT:    sw a4, 12(a0)
+; RV64I-SR-NEXT:    sw a3, 8(a0)
+; RV64I-SR-NEXT:    sw a2, 4(a0)
+; RV64I-SR-NEXT:    sw a1, 0(a0)
+; RV64I-SR-NEXT:    tail __riscv_restore_4
 ;
 ; RV32I-FP-SR-LABEL: callee_saved0:
-; RV32I-FP-SR:         call t0, __riscv_save_5
-; RV32I-FP-SR:         tail __riscv_restore_5
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    call t0, __riscv_save_4
+; RV32I-FP-SR-NEXT:    lui a0, %hi(var0)
+; RV32I-FP-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    lw a2, 4(a0)
+; RV32I-FP-SR-NEXT:    lw a3, 8(a0)
+; RV32I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    lw s0, 68(a0)
+; RV32I-FP-SR-NEXT:    lw s1, 64(a0)
+; RV32I-FP-SR-NEXT:    lw s2, 60(a0)
+; RV32I-FP-SR-NEXT:    lw s3, 56(a0)
+; RV32I-FP-SR-NEXT:    sw s0, 68(a0)
+; RV32I-FP-SR-NEXT:    sw s1, 64(a0)
+; RV32I-FP-SR-NEXT:    sw s2, 60(a0)
+; RV32I-FP-SR-NEXT:    sw s3, 56(a0)
+; RV32I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    sw a3, 8(a0)
+; RV32I-FP-SR-NEXT:    sw a2, 4(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    tail __riscv_restore_4
 ;
 ; RV64I-FP-SR-LABEL: callee_saved0:
-; RV64I-FP-SR:         call t0, __riscv_save_5
-; RV64I-FP-SR:         tail __riscv_restore_5
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    call t0, __riscv_save_4
+; RV64I-FP-SR-NEXT:    lui a0, %hi(var0)
+; RV64I-FP-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    lw a2, 4(a0)
+; RV64I-FP-SR-NEXT:    lw a3, 8(a0)
+; RV64I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    lw s0, 68(a0)
+; RV64I-FP-SR-NEXT:    lw s1, 64(a0)
+; RV64I-FP-SR-NEXT:    lw s2, 60(a0)
+; RV64I-FP-SR-NEXT:    lw s3, 56(a0)
+; RV64I-FP-SR-NEXT:    sw s0, 68(a0)
+; RV64I-FP-SR-NEXT:    sw s1, 64(a0)
+; RV64I-FP-SR-NEXT:    sw s2, 60(a0)
+; RV64I-FP-SR-NEXT:    sw s3, 56(a0)
+; RV64I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    sw a3, 8(a0)
+; RV64I-FP-SR-NEXT:    sw a2, 4(a0)
+; RV64I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    tail __riscv_restore_4
   %val = load [18 x i32], ptr @var0
   store volatile [18 x i32] %val, ptr @var0
   ret void
@@ -42,28 +295,376 @@ define void @callee_saved0() nounwind {
 
 define void @callee_saved1() nounwind {
 ; RV32I-LABEL: callee_saved1:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -48
+; RV32I-NEXT:    sw s0, 44(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 40(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 36(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 32(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s4, 28(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s5, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s6, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s7, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s8, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s9, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lui a0, %hi(var1)
+; RV32I-NEXT:    addi a0, a0, %lo(var1)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    lw a2, 4(a0)
+; RV32I-NEXT:    lw a3, 8(a0)
+; RV32I-NEXT:    lw a4, 12(a0)
+; RV32I-NEXT:    lw a5, 16(a0)
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 56(a0)
+; RV32I-NEXT:    lw s1, 60(a0)
+; RV32I-NEXT:    lw s2, 64(a0)
+; RV32I-NEXT:    lw s3, 68(a0)
+; RV32I-NEXT:    lw s4, 72(a0)
+; RV32I-NEXT:    lw s5, 76(a0)
+; RV32I-NEXT:    lw s6, 92(a0)
+; RV32I-NEXT:    lw s7, 88(a0)
+; RV32I-NEXT:    lw s8, 84(a0)
+; RV32I-NEXT:    lw s9, 80(a0)
+; RV32I-NEXT:    sw s6, 92(a0)
+; RV32I-NEXT:    sw s7, 88(a0)
+; RV32I-NEXT:    sw s8, 84(a0)
+; RV32I-NEXT:    sw s9, 80(a0)
+; RV32I-NEXT:    sw s5, 76(a0)
+; RV32I-NEXT:    sw s4, 72(a0)
+; RV32I-NEXT:    sw s3, 68(a0)
+; RV32I-NEXT:    sw s2, 64(a0)
+; RV32I-NEXT:    sw s1, 60(a0)
+; RV32I-NEXT:    sw s0, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    sw a5, 16(a0)
+; RV32I-NEXT:    sw a4, 12(a0)
+; RV32I-NEXT:    sw a3, 8(a0)
+; RV32I-NEXT:    sw a2, 4(a0)
+; RV32I-NEXT:    sw a1, 0(a0)
+; RV32I-NEXT:    lw s0, 44(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 40(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 36(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 32(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s4, 28(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s5, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s6, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s7, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s8, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s9, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 48
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: callee_saved1:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -80
+; RV64I-NEXT:    sd s0, 72(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 64(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 56(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 48(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s5, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s6, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s7, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s8, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s9, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var1)
+; RV64I-NEXT:    addi a0, a0, %lo(var1)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    lw a2, 4(a0)
+; RV64I-NEXT:    lw a3, 8(a0)
+; RV64I-NEXT:    lw a4, 12(a0)
+; RV64I-NEXT:    lw a5, 16(a0)
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 56(a0)
+; RV64I-NEXT:    lw s1, 60(a0)
+; RV64I-NEXT:    lw s2, 64(a0)
+; RV64I-NEXT:    lw s3, 68(a0)
+; RV64I-NEXT:    lw s4, 72(a0)
+; RV64I-NEXT:    lw s5, 76(a0)
+; RV64I-NEXT:    lw s6, 92(a0)
+; RV64I-NEXT:    lw s7, 88(a0)
+; RV64I-NEXT:    lw s8, 84(a0)
+; RV64I-NEXT:    lw s9, 80(a0)
+; RV64I-NEXT:    sw s6, 92(a0)
+; RV64I-NEXT:    sw s7, 88(a0)
+; RV64I-NEXT:    sw s8, 84(a0)
+; RV64I-NEXT:    sw s9, 80(a0)
+; RV64I-NEXT:    sw s5, 76(a0)
+; RV64I-NEXT:    sw s4, 72(a0)
+; RV64I-NEXT:    sw s3, 68(a0)
+; RV64I-NEXT:    sw s2, 64(a0)
+; RV64I-NEXT:    sw s1, 60(a0)
+; RV64I-NEXT:    sw s0, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    sw a5, 16(a0)
+; RV64I-NEXT:    sw a4, 12(a0)
+; RV64I-NEXT:    sw a3, 8(a0)
+; RV64I-NEXT:    sw a2, 4(a0)
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld s0, 72(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 64(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 56(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 48(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s5, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s6, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s7, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s8, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s9, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 80
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: callee_saved1:
-; RV32I-SR:         call t0, __riscv_save_11
-; RV32I-SR:         tail __riscv_restore_11
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    call t0, __riscv_save_10
+; RV32I-SR-NEXT:    lui a0, %hi(var1)
+; RV32I-SR-NEXT:    addi a0, a0, %lo(var1)
+; RV32I-SR-NEXT:    lw a1, 0(a0)
+; RV32I-SR-NEXT:    lw a2, 4(a0)
+; RV32I-SR-NEXT:    lw a3, 8(a0)
+; RV32I-SR-NEXT:    lw a4, 12(a0)
+; RV32I-SR-NEXT:    lw a5, 16(a0)
+; RV32I-SR-NEXT:    lw a6, 20(a0)
+; RV32I-SR-NEXT:    lw a7, 24(a0)
+; RV32I-SR-NEXT:    lw t0, 28(a0)
+; RV32I-SR-NEXT:    lw t1, 32(a0)
+; RV32I-SR-NEXT:    lw t2, 36(a0)
+; RV32I-SR-NEXT:    lw t3, 40(a0)
+; RV32I-SR-NEXT:    lw t4, 44(a0)
+; RV32I-SR-NEXT:    lw t5, 48(a0)
+; RV32I-SR-NEXT:    lw t6, 52(a0)
+; RV32I-SR-NEXT:    lw s0, 56(a0)
+; RV32I-SR-NEXT:    lw s1, 60(a0)
+; RV32I-SR-NEXT:    lw s2, 64(a0)
+; RV32I-SR-NEXT:    lw s3, 68(a0)
+; RV32I-SR-NEXT:    lw s4, 72(a0)
+; RV32I-SR-NEXT:    lw s5, 76(a0)
+; RV32I-SR-NEXT:    lw s6, 92(a0)
+; RV32I-SR-NEXT:    lw s7, 88(a0)
+; RV32I-SR-NEXT:    lw s8, 84(a0)
+; RV32I-SR-NEXT:    lw s9, 80(a0)
+; RV32I-SR-NEXT:    sw s6, 92(a0)
+; RV32I-SR-NEXT:    sw s7, 88(a0)
+; RV32I-SR-NEXT:    sw s8, 84(a0)
+; RV32I-SR-NEXT:    sw s9, 80(a0)
+; RV32I-SR-NEXT:    sw s5, 76(a0)
+; RV32I-SR-NEXT:    sw s4, 72(a0)
+; RV32I-SR-NEXT:    sw s3, 68(a0)
+; RV32I-SR-NEXT:    sw s2, 64(a0)
+; RV32I-SR-NEXT:    sw s1, 60(a0)
+; RV32I-SR-NEXT:    sw s0, 56(a0)
+; RV32I-SR-NEXT:    sw t6, 52(a0)
+; RV32I-SR-NEXT:    sw t5, 48(a0)
+; RV32I-SR-NEXT:    sw t4, 44(a0)
+; RV32I-SR-NEXT:    sw t3, 40(a0)
+; RV32I-SR-NEXT:    sw t2, 36(a0)
+; RV32I-SR-NEXT:    sw t1, 32(a0)
+; RV32I-SR-NEXT:    sw t0, 28(a0)
+; RV32I-SR-NEXT:    sw a7, 24(a0)
+; RV32I-SR-NEXT:    sw a6, 20(a0)
+; RV32I-SR-NEXT:    sw a5, 16(a0)
+; RV32I-SR-NEXT:    sw a4, 12(a0)
+; RV32I-SR-NEXT:    sw a3, 8(a0)
+; RV32I-SR-NEXT:    sw a2, 4(a0)
+; RV32I-SR-NEXT:    sw a1, 0(a0)
+; RV32I-SR-NEXT:    tail __riscv_restore_10
 ;
 ; RV64I-SR-LABEL: callee_saved1:
-; RV64I-SR:         call t0, __riscv_save_11
-; RV64I-SR:         tail __riscv_restore_11
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    call t0, __riscv_save_10
+; RV64I-SR-NEXT:    lui a0, %hi(var1)
+; RV64I-SR-NEXT:    addi a0, a0, %lo(var1)
+; RV64I-SR-NEXT:    lw a1, 0(a0)
+; RV64I-SR-NEXT:    lw a2, 4(a0)
+; RV64I-SR-NEXT:    lw a3, 8(a0)
+; RV64I-SR-NEXT:    lw a4, 12(a0)
+; RV64I-SR-NEXT:    lw a5, 16(a0)
+; RV64I-SR-NEXT:    lw a6, 20(a0)
+; RV64I-SR-NEXT:    lw a7, 24(a0)
+; RV64I-SR-NEXT:    lw t0, 28(a0)
+; RV64I-SR-NEXT:    lw t1, 32(a0)
+; RV64I-SR-NEXT:    lw t2, 36(a0)
+; RV64I-SR-NEXT:    lw t3, 40(a0)
+; RV64I-SR-NEXT:    lw t4, 44(a0)
+; RV64I-SR-NEXT:    lw t5, 48(a0)
+; RV64I-SR-NEXT:    lw t6, 52(a0)
+; RV64I-SR-NEXT:    lw s0, 56(a0)
+; RV64I-SR-NEXT:    lw s1, 60(a0)
+; RV64I-SR-NEXT:    lw s2, 64(a0)
+; RV64I-SR-NEXT:    lw s3, 68(a0)
+; RV64I-SR-NEXT:    lw s4, 72(a0)
+; RV64I-SR-NEXT:    lw s5, 76(a0)
+; RV64I-SR-NEXT:    lw s6, 92(a0)
+; RV64I-SR-NEXT:    lw s7, 88(a0)
+; RV64I-SR-NEXT:    lw s8, 84(a0)
+; RV64I-SR-NEXT:    lw s9, 80(a0)
+; RV64I-SR-NEXT:    sw s6, 92(a0)
+; RV64I-SR-NEXT:    sw s7, 88(a0)
+; RV64I-SR-NEXT:    sw s8, 84(a0)
+; RV64I-SR-NEXT:    sw s9, 80(a0)
+; RV64I-SR-NEXT:    sw s5, 76(a0)
+; RV64I-SR-NEXT:    sw s4, 72(a0)
+; RV64I-SR-NEXT:    sw s3, 68(a0)
+; RV64I-SR-NEXT:    sw s2, 64(a0)
+; RV64I-SR-NEXT:    sw s1, 60(a0)
+; RV64I-SR-NEXT:    sw s0, 56(a0)
+; RV64I-SR-NEXT:    sw t6, 52(a0)
+; RV64I-SR-NEXT:    sw t5, 48(a0)
+; RV64I-SR-NEXT:    sw t4, 44(a0)
+; RV64I-SR-NEXT:    sw t3, 40(a0)
+; RV64I-SR-NEXT:    sw t2, 36(a0)
+; RV64I-SR-NEXT:    sw t1, 32(a0)
+; RV64I-SR-NEXT:    sw t0, 28(a0)
+; RV64I-SR-NEXT:    sw a7, 24(a0)
+; RV64I-SR-NEXT:    sw a6, 20(a0)
+; RV64I-SR-NEXT:    sw a5, 16(a0)
+; RV64I-SR-NEXT:    sw a4, 12(a0)
+; RV64I-SR-NEXT:    sw a3, 8(a0)
+; RV64I-SR-NEXT:    sw a2, 4(a0)
+; RV64I-SR-NEXT:    sw a1, 0(a0)
+; RV64I-SR-NEXT:    tail __riscv_restore_10
 ;
 ; RV32I-FP-SR-LABEL: callee_saved1:
-; RV32I-FP-SR:         call t0, __riscv_save_11
-; RV32I-FP-SR:         tail __riscv_restore_11
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    call t0, __riscv_save_10
+; RV32I-FP-SR-NEXT:    lui a0, %hi(var1)
+; RV32I-FP-SR-NEXT:    addi a0, a0, %lo(var1)
+; RV32I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    lw a2, 4(a0)
+; RV32I-FP-SR-NEXT:    lw a3, 8(a0)
+; RV32I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    lw s0, 56(a0)
+; RV32I-FP-SR-NEXT:    lw s1, 60(a0)
+; RV32I-FP-SR-NEXT:    lw s2, 64(a0)
+; RV32I-FP-SR-NEXT:    lw s3, 68(a0)
+; RV32I-FP-SR-NEXT:    lw s4, 72(a0)
+; RV32I-FP-SR-NEXT:    lw s5, 76(a0)
+; RV32I-FP-SR-NEXT:    lw s6, 92(a0)
+; RV32I-FP-SR-NEXT:    lw s7, 88(a0)
+; RV32I-FP-SR-NEXT:    lw s8, 84(a0)
+; RV32I-FP-SR-NEXT:    lw s9, 80(a0)
+; RV32I-FP-SR-NEXT:    sw s6, 92(a0)
+; RV32I-FP-SR-NEXT:    sw s7, 88(a0)
+; RV32I-FP-SR-NEXT:    sw s8, 84(a0)
+; RV32I-FP-SR-NEXT:    sw s9, 80(a0)
+; RV32I-FP-SR-NEXT:    sw s5, 76(a0)
+; RV32I-FP-SR-NEXT:    sw s4, 72(a0)
+; RV32I-FP-SR-NEXT:    sw s3, 68(a0)
+; RV32I-FP-SR-NEXT:    sw s2, 64(a0)
+; RV32I-FP-SR-NEXT:    sw s1, 60(a0)
+; RV32I-FP-SR-NEXT:    sw s0, 56(a0)
+; RV32I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    sw a3, 8(a0)
+; RV32I-FP-SR-NEXT:    sw a2, 4(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    tail __riscv_restore_10
 ;
 ; RV64I-FP-SR-LABEL: callee_saved1:
-; RV64I-FP-SR:         call t0, __riscv_save_11
-; RV64I-FP-SR:         tail __riscv_restore_11
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    call t0, __riscv_save_10
+; RV64I-FP-SR-NEXT:    lui a0, %hi(var1)
+; RV64I-FP-SR-NEXT:    addi a0, a0, %lo(var1)
+; RV64I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    lw a2, 4(a0)
+; RV64I-FP-SR-NEXT:    lw a3, 8(a0)
+; RV64I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    lw s0, 56(a0)
+; RV64I-FP-SR-NEXT:    lw s1, 60(a0)
+; RV64I-FP-SR-NEXT:    lw s2, 64(a0)
+; RV64I-FP-SR-NEXT:    lw s3, 68(a0)
+; RV64I-FP-SR-NEXT:    lw s4, 72(a0)
+; RV64I-FP-SR-NEXT:    lw s5, 76(a0)
+; RV64I-FP-SR-NEXT:    lw s6, 92(a0)
+; RV64I-FP-SR-NEXT:    lw s7, 88(a0)
+; RV64I-FP-SR-NEXT:    lw s8, 84(a0)
+; RV64I-FP-SR-NEXT:    lw s9, 80(a0)
+; RV64I-FP-SR-NEXT:    sw s6, 92(a0)
+; RV64I-FP-SR-NEXT:    sw s7, 88(a0)
+; RV64I-FP-SR-NEXT:    sw s8, 84(a0)
+; RV64I-FP-SR-NEXT:    sw s9, 80(a0)
+; RV64I-FP-SR-NEXT:    sw s5, 76(a0)
+; RV64I-FP-SR-NEXT:    sw s4, 72(a0)
+; RV64I-FP-SR-NEXT:    sw s3, 68(a0)
+; RV64I-FP-SR-NEXT:    sw s2, 64(a0)
+; RV64I-FP-SR-NEXT:    sw s1, 60(a0)
+; RV64I-FP-SR-NEXT:    sw s0, 56(a0)
+; RV64I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    sw a3, 8(a0)
+; RV64I-FP-SR-NEXT:    sw a2, 4(a0)
+; RV64I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    tail __riscv_restore_10
   %val = load [24 x i32], ptr @var1
   store volatile [24 x i32] %val, ptr @var1
   ret void
@@ -71,28 +672,504 @@ define void @callee_saved1() nounwind {
 
 define void @callee_saved2() nounwind {
 ; RV32I-LABEL: callee_saved2:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -64
+; RV32I-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 52(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 48(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 44(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s4, 40(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s5, 36(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s6, 32(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s7, 28(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s8, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s9, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s10, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s11, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lui a0, %hi(var2)
+; RV32I-NEXT:    addi a0, a0, %lo(var2)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 4(a0)
+; RV32I-NEXT:    sw a1, 4(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a1, 8(a0)
+; RV32I-NEXT:    sw a1, 0(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lw a4, 12(a0)
+; RV32I-NEXT:    lw a5, 16(a0)
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 56(a0)
+; RV32I-NEXT:    lw s1, 60(a0)
+; RV32I-NEXT:    lw s2, 64(a0)
+; RV32I-NEXT:    lw s3, 68(a0)
+; RV32I-NEXT:    lw s4, 72(a0)
+; RV32I-NEXT:    lw s5, 76(a0)
+; RV32I-NEXT:    lw s6, 80(a0)
+; RV32I-NEXT:    lw s7, 84(a0)
+; RV32I-NEXT:    lw s8, 88(a0)
+; RV32I-NEXT:    lw s9, 92(a0)
+; RV32I-NEXT:    lw s10, 96(a0)
+; RV32I-NEXT:    lw s11, 100(a0)
+; RV32I-NEXT:    lw ra, 116(a0)
+; RV32I-NEXT:    lw a1, 112(a0)
+; RV32I-NEXT:    lw a2, 108(a0)
+; RV32I-NEXT:    lw a3, 104(a0)
+; RV32I-NEXT:    sw ra, 116(a0)
+; RV32I-NEXT:    sw a1, 112(a0)
+; RV32I-NEXT:    sw a2, 108(a0)
+; RV32I-NEXT:    sw a3, 104(a0)
+; RV32I-NEXT:    sw s11, 100(a0)
+; RV32I-NEXT:    sw s10, 96(a0)
+; RV32I-NEXT:    sw s9, 92(a0)
+; RV32I-NEXT:    sw s8, 88(a0)
+; RV32I-NEXT:    sw s7, 84(a0)
+; RV32I-NEXT:    sw s6, 80(a0)
+; RV32I-NEXT:    sw s5, 76(a0)
+; RV32I-NEXT:    sw s4, 72(a0)
+; RV32I-NEXT:    sw s3, 68(a0)
+; RV32I-NEXT:    sw s2, 64(a0)
+; RV32I-NEXT:    sw s1, 60(a0)
+; RV32I-NEXT:    sw s0, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    sw a5, 16(a0)
+; RV32I-NEXT:    sw a4, 12(a0)
+; RV32I-NEXT:    lw a1, 0(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 8(a0)
+; RV32I-NEXT:    lw a1, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 4(a0)
+; RV32I-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    sw a1, 0(a0)
+; RV32I-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 52(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s4, 40(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s5, 36(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s6, 32(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s7, 28(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s8, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s9, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s10, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s11, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 64
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: callee_saved2:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -128
+; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 104(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 96(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 88(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 80(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s5, 72(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s6, 64(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s7, 56(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s8, 48(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s9, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s10, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s11, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var2)
+; RV64I-NEXT:    addi a0, a0, %lo(var2)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 4(a0)
+; RV64I-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a1, 8(a0)
+; RV64I-NEXT:    sd a1, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lw a4, 12(a0)
+; RV64I-NEXT:    lw a5, 16(a0)
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 56(a0)
+; RV64I-NEXT:    lw s1, 60(a0)
+; RV64I-NEXT:    lw s2, 64(a0)
+; RV64I-NEXT:    lw s3, 68(a0)
+; RV64I-NEXT:    lw s4, 72(a0)
+; RV64I-NEXT:    lw s5, 76(a0)
+; RV64I-NEXT:    lw s6, 80(a0)
+; RV64I-NEXT:    lw s7, 84(a0)
+; RV64I-NEXT:    lw s8, 88(a0)
+; RV64I-NEXT:    lw s9, 92(a0)
+; RV64I-NEXT:    lw s10, 96(a0)
+; RV64I-NEXT:    lw s11, 100(a0)
+; RV64I-NEXT:    lw ra, 116(a0)
+; RV64I-NEXT:    lw a1, 112(a0)
+; RV64I-NEXT:    lw a2, 108(a0)
+; RV64I-NEXT:    lw a3, 104(a0)
+; RV64I-NEXT:    sw ra, 116(a0)
+; RV64I-NEXT:    sw a1, 112(a0)
+; RV64I-NEXT:    sw a2, 108(a0)
+; RV64I-NEXT:    sw a3, 104(a0)
+; RV64I-NEXT:    sw s11, 100(a0)
+; RV64I-NEXT:    sw s10, 96(a0)
+; RV64I-NEXT:    sw s9, 92(a0)
+; RV64I-NEXT:    sw s8, 88(a0)
+; RV64I-NEXT:    sw s7, 84(a0)
+; RV64I-NEXT:    sw s6, 80(a0)
+; RV64I-NEXT:    sw s5, 76(a0)
+; RV64I-NEXT:    sw s4, 72(a0)
+; RV64I-NEXT:    sw s3, 68(a0)
+; RV64I-NEXT:    sw s2, 64(a0)
+; RV64I-NEXT:    sw s1, 60(a0)
+; RV64I-NEXT:    sw s0, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    sw a5, 16(a0)
+; RV64I-NEXT:    sw a4, 12(a0)
+; RV64I-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 8(a0)
+; RV64I-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 4(a0)
+; RV64I-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 104(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 96(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 88(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 80(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s5, 72(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s6, 64(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s7, 56(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s8, 48(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s9, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s10, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s11, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 128
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: callee_saved2:
-; RV32I-SR:         call t0, __riscv_save_12
-; RV32I-SR:         tail __riscv_restore_12
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    call t0, __riscv_save_12
+; RV32I-SR-NEXT:    addi sp, sp, -16
+; RV32I-SR-NEXT:    lui a0, %hi(var2)
+; RV32I-SR-NEXT:    addi a0, a0, %lo(var2)
+; RV32I-SR-NEXT:    lw a1, 0(a0)
+; RV32I-SR-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    lw a1, 4(a0)
+; RV32I-SR-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    lw a1, 8(a0)
+; RV32I-SR-NEXT:    sw a1, 4(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    lw a4, 12(a0)
+; RV32I-SR-NEXT:    lw a5, 16(a0)
+; RV32I-SR-NEXT:    lw a6, 20(a0)
+; RV32I-SR-NEXT:    lw a7, 24(a0)
+; RV32I-SR-NEXT:    lw t0, 28(a0)
+; RV32I-SR-NEXT:    lw t1, 32(a0)
+; RV32I-SR-NEXT:    lw t2, 36(a0)
+; RV32I-SR-NEXT:    lw t3, 40(a0)
+; RV32I-SR-NEXT:    lw t4, 44(a0)
+; RV32I-SR-NEXT:    lw t5, 48(a0)
+; RV32I-SR-NEXT:    lw t6, 52(a0)
+; RV32I-SR-NEXT:    lw s0, 56(a0)
+; RV32I-SR-NEXT:    lw s1, 60(a0)
+; RV32I-SR-NEXT:    lw s2, 64(a0)
+; RV32I-SR-NEXT:    lw s3, 68(a0)
+; RV32I-SR-NEXT:    lw s4, 72(a0)
+; RV32I-SR-NEXT:    lw s5, 76(a0)
+; RV32I-SR-NEXT:    lw s6, 80(a0)
+; RV32I-SR-NEXT:    lw s7, 84(a0)
+; RV32I-SR-NEXT:    lw s8, 88(a0)
+; RV32I-SR-NEXT:    lw s9, 92(a0)
+; RV32I-SR-NEXT:    lw s10, 96(a0)
+; RV32I-SR-NEXT:    lw s11, 100(a0)
+; RV32I-SR-NEXT:    lw ra, 116(a0)
+; RV32I-SR-NEXT:    lw a1, 112(a0)
+; RV32I-SR-NEXT:    lw a2, 108(a0)
+; RV32I-SR-NEXT:    lw a3, 104(a0)
+; RV32I-SR-NEXT:    sw ra, 116(a0)
+; RV32I-SR-NEXT:    sw a1, 112(a0)
+; RV32I-SR-NEXT:    sw a2, 108(a0)
+; RV32I-SR-NEXT:    sw a3, 104(a0)
+; RV32I-SR-NEXT:    sw s11, 100(a0)
+; RV32I-SR-NEXT:    sw s10, 96(a0)
+; RV32I-SR-NEXT:    sw s9, 92(a0)
+; RV32I-SR-NEXT:    sw s8, 88(a0)
+; RV32I-SR-NEXT:    sw s7, 84(a0)
+; RV32I-SR-NEXT:    sw s6, 80(a0)
+; RV32I-SR-NEXT:    sw s5, 76(a0)
+; RV32I-SR-NEXT:    sw s4, 72(a0)
+; RV32I-SR-NEXT:    sw s3, 68(a0)
+; RV32I-SR-NEXT:    sw s2, 64(a0)
+; RV32I-SR-NEXT:    sw s1, 60(a0)
+; RV32I-SR-NEXT:    sw s0, 56(a0)
+; RV32I-SR-NEXT:    sw t6, 52(a0)
+; RV32I-SR-NEXT:    sw t5, 48(a0)
+; RV32I-SR-NEXT:    sw t4, 44(a0)
+; RV32I-SR-NEXT:    sw t3, 40(a0)
+; RV32I-SR-NEXT:    sw t2, 36(a0)
+; RV32I-SR-NEXT:    sw t1, 32(a0)
+; RV32I-SR-NEXT:    sw t0, 28(a0)
+; RV32I-SR-NEXT:    sw a7, 24(a0)
+; RV32I-SR-NEXT:    sw a6, 20(a0)
+; RV32I-SR-NEXT:    sw a5, 16(a0)
+; RV32I-SR-NEXT:    sw a4, 12(a0)
+; RV32I-SR-NEXT:    lw a1, 4(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    sw a1, 8(a0)
+; RV32I-SR-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    sw a1, 4(a0)
+; RV32I-SR-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    sw a1, 0(a0)
+; RV32I-SR-NEXT:    addi sp, sp, 16
+; RV32I-SR-NEXT:    tail __riscv_restore_12
 ;
 ; RV64I-SR-LABEL: callee_saved2:
-; RV64I-SR:         call t0, __riscv_save_12
-; RV64I-SR:         tail __riscv_restore_12
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    call t0, __riscv_save_12
+; RV64I-SR-NEXT:    addi sp, sp, -32
+; RV64I-SR-NEXT:    lui a0, %hi(var2)
+; RV64I-SR-NEXT:    addi a0, a0, %lo(var2)
+; RV64I-SR-NEXT:    lw a1, 0(a0)
+; RV64I-SR-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    lw a1, 4(a0)
+; RV64I-SR-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    lw a1, 8(a0)
+; RV64I-SR-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    lw a4, 12(a0)
+; RV64I-SR-NEXT:    lw a5, 16(a0)
+; RV64I-SR-NEXT:    lw a6, 20(a0)
+; RV64I-SR-NEXT:    lw a7, 24(a0)
+; RV64I-SR-NEXT:    lw t0, 28(a0)
+; RV64I-SR-NEXT:    lw t1, 32(a0)
+; RV64I-SR-NEXT:    lw t2, 36(a0)
+; RV64I-SR-NEXT:    lw t3, 40(a0)
+; RV64I-SR-NEXT:    lw t4, 44(a0)
+; RV64I-SR-NEXT:    lw t5, 48(a0)
+; RV64I-SR-NEXT:    lw t6, 52(a0)
+; RV64I-SR-NEXT:    lw s0, 56(a0)
+; RV64I-SR-NEXT:    lw s1, 60(a0)
+; RV64I-SR-NEXT:    lw s2, 64(a0)
+; RV64I-SR-NEXT:    lw s3, 68(a0)
+; RV64I-SR-NEXT:    lw s4, 72(a0)
+; RV64I-SR-NEXT:    lw s5, 76(a0)
+; RV64I-SR-NEXT:    lw s6, 80(a0)
+; RV64I-SR-NEXT:    lw s7, 84(a0)
+; RV64I-SR-NEXT:    lw s8, 88(a0)
+; RV64I-SR-NEXT:    lw s9, 92(a0)
+; RV64I-SR-NEXT:    lw s10, 96(a0)
+; RV64I-SR-NEXT:    lw s11, 100(a0)
+; RV64I-SR-NEXT:    lw ra, 116(a0)
+; RV64I-SR-NEXT:    lw a1, 112(a0)
+; RV64I-SR-NEXT:    lw a2, 108(a0)
+; RV64I-SR-NEXT:    lw a3, 104(a0)
+; RV64I-SR-NEXT:    sw ra, 116(a0)
+; RV64I-SR-NEXT:    sw a1, 112(a0)
+; RV64I-SR-NEXT:    sw a2, 108(a0)
+; RV64I-SR-NEXT:    sw a3, 104(a0)
+; RV64I-SR-NEXT:    sw s11, 100(a0)
+; RV64I-SR-NEXT:    sw s10, 96(a0)
+; RV64I-SR-NEXT:    sw s9, 92(a0)
+; RV64I-SR-NEXT:    sw s8, 88(a0)
+; RV64I-SR-NEXT:    sw s7, 84(a0)
+; RV64I-SR-NEXT:    sw s6, 80(a0)
+; RV64I-SR-NEXT:    sw s5, 76(a0)
+; RV64I-SR-NEXT:    sw s4, 72(a0)
+; RV64I-SR-NEXT:    sw s3, 68(a0)
+; RV64I-SR-NEXT:    sw s2, 64(a0)
+; RV64I-SR-NEXT:    sw s1, 60(a0)
+; RV64I-SR-NEXT:    sw s0, 56(a0)
+; RV64I-SR-NEXT:    sw t6, 52(a0)
+; RV64I-SR-NEXT:    sw t5, 48(a0)
+; RV64I-SR-NEXT:    sw t4, 44(a0)
+; RV64I-SR-NEXT:    sw t3, 40(a0)
+; RV64I-SR-NEXT:    sw t2, 36(a0)
+; RV64I-SR-NEXT:    sw t1, 32(a0)
+; RV64I-SR-NEXT:    sw t0, 28(a0)
+; RV64I-SR-NEXT:    sw a7, 24(a0)
+; RV64I-SR-NEXT:    sw a6, 20(a0)
+; RV64I-SR-NEXT:    sw a5, 16(a0)
+; RV64I-SR-NEXT:    sw a4, 12(a0)
+; RV64I-SR-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    sw a1, 8(a0)
+; RV64I-SR-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    sw a1, 4(a0)
+; RV64I-SR-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    sw a1, 0(a0)
+; RV64I-SR-NEXT:    addi sp, sp, 32
+; RV64I-SR-NEXT:    tail __riscv_restore_12
 ;
 ; RV32I-FP-SR-LABEL: callee_saved2:
-; RV32I-FP-SR:         call t0, __riscv_save_12
-; RV32I-FP-SR:         tail __riscv_restore_12
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    call t0, __riscv_save_12
+; RV32I-FP-SR-NEXT:    addi sp, sp, -16
+; RV32I-FP-SR-NEXT:    lui a0, %hi(var2)
+; RV32I-FP-SR-NEXT:    addi a0, a0, %lo(var2)
+; RV32I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 12(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    lw a1, 4(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 8(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    lw a1, 8(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 4(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    lw s0, 56(a0)
+; RV32I-FP-SR-NEXT:    lw s1, 60(a0)
+; RV32I-FP-SR-NEXT:    lw s2, 64(a0)
+; RV32I-FP-SR-NEXT:    lw s3, 68(a0)
+; RV32I-FP-SR-NEXT:    lw s4, 72(a0)
+; RV32I-FP-SR-NEXT:    lw s5, 76(a0)
+; RV32I-FP-SR-NEXT:    lw s6, 80(a0)
+; RV32I-FP-SR-NEXT:    lw s7, 84(a0)
+; RV32I-FP-SR-NEXT:    lw s8, 88(a0)
+; RV32I-FP-SR-NEXT:    lw s9, 92(a0)
+; RV32I-FP-SR-NEXT:    lw s10, 96(a0)
+; RV32I-FP-SR-NEXT:    lw s11, 100(a0)
+; RV32I-FP-SR-NEXT:    lw ra, 116(a0)
+; RV32I-FP-SR-NEXT:    lw a1, 112(a0)
+; RV32I-FP-SR-NEXT:    lw a2, 108(a0)
+; RV32I-FP-SR-NEXT:    lw a3, 104(a0)
+; RV32I-FP-SR-NEXT:    sw ra, 116(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 112(a0)
+; RV32I-FP-SR-NEXT:    sw a2, 108(a0)
+; RV32I-FP-SR-NEXT:    sw a3, 104(a0)
+; RV32I-FP-SR-NEXT:    sw s11, 100(a0)
+; RV32I-FP-SR-NEXT:    sw s10, 96(a0)
+; RV32I-FP-SR-NEXT:    sw s9, 92(a0)
+; RV32I-FP-SR-NEXT:    sw s8, 88(a0)
+; RV32I-FP-SR-NEXT:    sw s7, 84(a0)
+; RV32I-FP-SR-NEXT:    sw s6, 80(a0)
+; RV32I-FP-SR-NEXT:    sw s5, 76(a0)
+; RV32I-FP-SR-NEXT:    sw s4, 72(a0)
+; RV32I-FP-SR-NEXT:    sw s3, 68(a0)
+; RV32I-FP-SR-NEXT:    sw s2, 64(a0)
+; RV32I-FP-SR-NEXT:    sw s1, 60(a0)
+; RV32I-FP-SR-NEXT:    sw s0, 56(a0)
+; RV32I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    lw a1, 4(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    sw a1, 8(a0)
+; RV32I-FP-SR-NEXT:    lw a1, 8(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    sw a1, 4(a0)
+; RV32I-FP-SR-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    addi sp, sp, 16
+; RV32I-FP-SR-NEXT:    tail __riscv_restore_12
 ;
 ; RV64I-FP-SR-LABEL: callee_saved2:
-; RV64I-FP-SR:         call t0, __riscv_save_12
-; RV64I-FP-SR:         tail __riscv_restore_12
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    call t0, __riscv_save_12
+; RV64I-FP-SR-NEXT:    addi sp, sp, -32
+; RV64I-FP-SR-NEXT:    lui a0, %hi(var2)
+; RV64I-FP-SR-NEXT:    addi a0, a0, %lo(var2)
+; RV64I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    sd a1, 24(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    lw a1, 4(a0)
+; RV64I-FP-SR-NEXT:    sd a1, 16(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    lw a1, 8(a0)
+; RV64I-FP-SR-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    lw s0, 56(a0)
+; RV64I-FP-SR-NEXT:    lw s1, 60(a0)
+; RV64I-FP-SR-NEXT:    lw s2, 64(a0)
+; RV64I-FP-SR-NEXT:    lw s3, 68(a0)
+; RV64I-FP-SR-NEXT:    lw s4, 72(a0)
+; RV64I-FP-SR-NEXT:    lw s5, 76(a0)
+; RV64I-FP-SR-NEXT:    lw s6, 80(a0)
+; RV64I-FP-SR-NEXT:    lw s7, 84(a0)
+; RV64I-FP-SR-NEXT:    lw s8, 88(a0)
+; RV64I-FP-SR-NEXT:    lw s9, 92(a0)
+; RV64I-FP-SR-NEXT:    lw s10, 96(a0)
+; RV64I-FP-SR-NEXT:    lw s11, 100(a0)
+; RV64I-FP-SR-NEXT:    lw ra, 116(a0)
+; RV64I-FP-SR-NEXT:    lw a1, 112(a0)
+; RV64I-FP-SR-NEXT:    lw a2, 108(a0)
+; RV64I-FP-SR-NEXT:    lw a3, 104(a0)
+; RV64I-FP-SR-NEXT:    sw ra, 116(a0)
+; RV64I-FP-SR-NEXT:    sw a1, 112(a0)
+; RV64I-FP-SR-NEXT:    sw a2, 108(a0)
+; RV64I-FP-SR-NEXT:    sw a3, 104(a0)
+; RV64I-FP-SR-NEXT:    sw s11, 100(a0)
+; RV64I-FP-SR-NEXT:    sw s10, 96(a0)
+; RV64I-FP-SR-NEXT:    sw s9, 92(a0)
+; RV64I-FP-SR-NEXT:    sw s8, 88(a0)
+; RV64I-FP-SR-NEXT:    sw s7, 84(a0)
+; RV64I-FP-SR-NEXT:    sw s6, 80(a0)
+; RV64I-FP-SR-NEXT:    sw s5, 76(a0)
+; RV64I-FP-SR-NEXT:    sw s4, 72(a0)
+; RV64I-FP-SR-NEXT:    sw s3, 68(a0)
+; RV64I-FP-SR-NEXT:    sw s2, 64(a0)
+; RV64I-FP-SR-NEXT:    sw s1, 60(a0)
+; RV64I-FP-SR-NEXT:    sw s0, 56(a0)
+; RV64I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    sw a1, 8(a0)
+; RV64I-FP-SR-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    sw a1, 4(a0)
+; RV64I-FP-SR-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    addi sp, sp, 32
+; RV64I-FP-SR-NEXT:    tail __riscv_restore_12
   %val = load [30 x i32], ptr @var2
   store volatile [30 x i32] %val, ptr @var2
   ret void
@@ -103,34 +1180,78 @@ define void @callee_saved2() nounwind {
 
 define void @callee_saved_fp() nounwind {
 ; RV32I-LABEL: callee_saved_fp:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -32
+; RV32I-NEXT:    sw s1, 28(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s4, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s5, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s6, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    #APP
+; RV32I-NEXT:    #NO_APP
+; RV32I-NEXT:    lw s1, 28(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s4, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s5, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s6, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 32
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: callee_saved_fp:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -48
+; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s5, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s6, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    #APP
+; RV64I-NEXT:    #NO_APP
+; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s5, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s6, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 48
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: callee_saved_fp:
-; RV32I-SR:         call t0, __riscv_save_7
-; RV32I-SR:         tail __riscv_restore_7
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    call t0, __riscv_save_7
+; RV32I-SR-NEXT:    #APP
+; RV32I-SR-NEXT:    #NO_APP
+; RV32I-SR-NEXT:    tail __riscv_restore_7
 ;
 ; RV64I-SR-LABEL: callee_saved_fp:
-; RV64I-SR:         call t0, __riscv_save_7
-; RV64I-SR:         tail __riscv_restore_7
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    call t0, __riscv_save_7
+; RV64I-SR-NEXT:    #APP
+; RV64I-SR-NEXT:    #NO_APP
+; RV64I-SR-NEXT:    tail __riscv_restore_7
 ;
 ; RV32I-FP-SR-LABEL: callee_saved_fp:
-; RV32I-FP-SR:         call t0, __riscv_save_7
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    call t0, __riscv_save_7
 ; RV32I-FP-SR-NEXT:    addi sp, sp, -16
-; RV32I-FP-SR-NEXT:    fsw fs0, 12(sp)
-; RV32I-FP-SR:         flw fs0, 12(sp)
+; RV32I-FP-SR-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    #APP
+; RV32I-FP-SR-NEXT:    #NO_APP
+; RV32I-FP-SR-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload
 ; RV32I-FP-SR-NEXT:    addi sp, sp, 16
 ; RV32I-FP-SR-NEXT:    tail __riscv_restore_7
 ;
 ; RV64I-FP-SR-LABEL: callee_saved_fp:
-; RV64I-FP-SR:         call t0, __riscv_save_7
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    call t0, __riscv_save_7
 ; RV64I-FP-SR-NEXT:    addi sp, sp, -16
-; RV64I-FP-SR-NEXT:    fsd fs0, 8(sp)
-; RV64I-FP-SR:         fld fs0, 8(sp)
+; RV64I-FP-SR-NEXT:    fsd fs0, 8(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    #APP
+; RV64I-FP-SR-NEXT:    #NO_APP
+; RV64I-FP-SR-NEXT:    fld fs0, 8(sp) # 8-byte Folded Reload
 ; RV64I-FP-SR-NEXT:    addi sp, sp, 16
 ; RV64I-FP-SR-NEXT:    tail __riscv_restore_7
   call void asm sideeffect "", "~{f8},~{x9},~{x18},~{x19},~{x20},~{x21},~{x22}"()
@@ -143,34 +1264,328 @@ declare i32 @tail_callee(i32 %i)
 
 define i32 @tail_call(i32 %i) nounwind {
 ; RV32I-LABEL: tail_call:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I:         tail tail_callee
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0: # %entry
+; RV32I-NEXT:    addi sp, sp, -32
+; RV32I-NEXT:    sw s0, 28(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s4, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lui a1, %hi(var0)
+; RV32I-NEXT:    addi a1, a1, %lo(var0)
+; RV32I-NEXT:    lw a2, 0(a1)
+; RV32I-NEXT:    lw a3, 4(a1)
+; RV32I-NEXT:    lw a4, 8(a1)
+; RV32I-NEXT:    lw a5, 12(a1)
+; RV32I-NEXT:    lw a6, 16(a1)
+; RV32I-NEXT:    lw a7, 20(a1)
+; RV32I-NEXT:    lw t0, 24(a1)
+; RV32I-NEXT:    lw t1, 28(a1)
+; RV32I-NEXT:    lw t2, 32(a1)
+; RV32I-NEXT:    lw t3, 36(a1)
+; RV32I-NEXT:    lw t4, 40(a1)
+; RV32I-NEXT:    lw t5, 44(a1)
+; RV32I-NEXT:    lw t6, 48(a1)
+; RV32I-NEXT:    lw s0, 52(a1)
+; RV32I-NEXT:    lw s1, 68(a1)
+; RV32I-NEXT:    lw s2, 64(a1)
+; RV32I-NEXT:    lw s3, 60(a1)
+; RV32I-NEXT:    lw s4, 56(a1)
+; RV32I-NEXT:    sw s1, 68(a1)
+; RV32I-NEXT:    sw s2, 64(a1)
+; RV32I-NEXT:    sw s3, 60(a1)
+; RV32I-NEXT:    sw s4, 56(a1)
+; RV32I-NEXT:    sw s0, 52(a1)
+; RV32I-NEXT:    sw t6, 48(a1)
+; RV32I-NEXT:    sw t5, 44(a1)
+; RV32I-NEXT:    sw t4, 40(a1)
+; RV32I-NEXT:    sw t3, 36(a1)
+; RV32I-NEXT:    sw t2, 32(a1)
+; RV32I-NEXT:    sw t1, 28(a1)
+; RV32I-NEXT:    sw t0, 24(a1)
+; RV32I-NEXT:    sw a7, 20(a1)
+; RV32I-NEXT:    sw a6, 16(a1)
+; RV32I-NEXT:    sw a5, 12(a1)
+; RV32I-NEXT:    sw a4, 8(a1)
+; RV32I-NEXT:    sw a3, 4(a1)
+; RV32I-NEXT:    sw a2, 0(a1)
+; RV32I-NEXT:    lw s0, 28(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s4, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 32
+; RV32I-NEXT:    tail tail_callee
 ;
 ; RV64I-LABEL: tail_call:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I:         tail tail_callee
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0: # %entry
+; RV64I-NEXT:    addi sp, sp, -48
+; RV64I-NEXT:    sd s0, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s4, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a1, %hi(var0)
+; RV64I-NEXT:    addi a1, a1, %lo(var0)
+; RV64I-NEXT:    lw a2, 0(a1)
+; RV64I-NEXT:    lw a3, 4(a1)
+; RV64I-NEXT:    lw a4, 8(a1)
+; RV64I-NEXT:    lw a5, 12(a1)
+; RV64I-NEXT:    lw a6, 16(a1)
+; RV64I-NEXT:    lw a7, 20(a1)
+; RV64I-NEXT:    lw t0, 24(a1)
+; RV64I-NEXT:    lw t1, 28(a1)
+; RV64I-NEXT:    lw t2, 32(a1)
+; RV64I-NEXT:    lw t3, 36(a1)
+; RV64I-NEXT:    lw t4, 40(a1)
+; RV64I-NEXT:    lw t5, 44(a1)
+; RV64I-NEXT:    lw t6, 48(a1)
+; RV64I-NEXT:    lw s0, 52(a1)
+; RV64I-NEXT:    lw s1, 68(a1)
+; RV64I-NEXT:    lw s2, 64(a1)
+; RV64I-NEXT:    lw s3, 60(a1)
+; RV64I-NEXT:    lw s4, 56(a1)
+; RV64I-NEXT:    sw s1, 68(a1)
+; RV64I-NEXT:    sw s2, 64(a1)
+; RV64I-NEXT:    sw s3, 60(a1)
+; RV64I-NEXT:    sw s4, 56(a1)
+; RV64I-NEXT:    sw s0, 52(a1)
+; RV64I-NEXT:    sw t6, 48(a1)
+; RV64I-NEXT:    sw t5, 44(a1)
+; RV64I-NEXT:    sw t4, 40(a1)
+; RV64I-NEXT:    sw t3, 36(a1)
+; RV64I-NEXT:    sw t2, 32(a1)
+; RV64I-NEXT:    sw t1, 28(a1)
+; RV64I-NEXT:    sw t0, 24(a1)
+; RV64I-NEXT:    sw a7, 20(a1)
+; RV64I-NEXT:    sw a6, 16(a1)
+; RV64I-NEXT:    sw a5, 12(a1)
+; RV64I-NEXT:    sw a4, 8(a1)
+; RV64I-NEXT:    sw a3, 4(a1)
+; RV64I-NEXT:    sw a2, 0(a1)
+; RV64I-NEXT:    ld s0, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s4, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 48
+; RV64I-NEXT:    tail tail_callee
 ;
 ; RV32I-SR-LABEL: tail_call:
-; RV32I-SR-NOT:     call t0, __riscv_save
-; RV32I-SR:         tail tail_callee
-; RV32I-SR-NOT:     tail __riscv_restore
+; RV32I-SR:       # %bb.0: # %entry
+; RV32I-SR-NEXT:    addi sp, sp, -32
+; RV32I-SR-NEXT:    sw s0, 28(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw s1, 24(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw s2, 20(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw s3, 16(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw s4, 12(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    lui a1, %hi(var0)
+; RV32I-SR-NEXT:    addi a1, a1, %lo(var0)
+; RV32I-SR-NEXT:    lw a2, 0(a1)
+; RV32I-SR-NEXT:    lw a3, 4(a1)
+; RV32I-SR-NEXT:    lw a4, 8(a1)
+; RV32I-SR-NEXT:    lw a5, 12(a1)
+; RV32I-SR-NEXT:    lw a6, 16(a1)
+; RV32I-SR-NEXT:    lw a7, 20(a1)
+; RV32I-SR-NEXT:    lw t0, 24(a1)
+; RV32I-SR-NEXT:    lw t1, 28(a1)
+; RV32I-SR-NEXT:    lw t2, 32(a1)
+; RV32I-SR-NEXT:    lw t3, 36(a1)
+; RV32I-SR-NEXT:    lw t4, 40(a1)
+; RV32I-SR-NEXT:    lw t5, 44(a1)
+; RV32I-SR-NEXT:    lw t6, 48(a1)
+; RV32I-SR-NEXT:    lw s0, 52(a1)
+; RV32I-SR-NEXT:    lw s1, 68(a1)
+; RV32I-SR-NEXT:    lw s2, 64(a1)
+; RV32I-SR-NEXT:    lw s3, 60(a1)
+; RV32I-SR-NEXT:    lw s4, 56(a1)
+; RV32I-SR-NEXT:    sw s1, 68(a1)
+; RV32I-SR-NEXT:    sw s2, 64(a1)
+; RV32I-SR-NEXT:    sw s3, 60(a1)
+; RV32I-SR-NEXT:    sw s4, 56(a1)
+; RV32I-SR-NEXT:    sw s0, 52(a1)
+; RV32I-SR-NEXT:    sw t6, 48(a1)
+; RV32I-SR-NEXT:    sw t5, 44(a1)
+; RV32I-SR-NEXT:    sw t4, 40(a1)
+; RV32I-SR-NEXT:    sw t3, 36(a1)
+; RV32I-SR-NEXT:    sw t2, 32(a1)
+; RV32I-SR-NEXT:    sw t1, 28(a1)
+; RV32I-SR-NEXT:    sw t0, 24(a1)
+; RV32I-SR-NEXT:    sw a7, 20(a1)
+; RV32I-SR-NEXT:    sw a6, 16(a1)
+; RV32I-SR-NEXT:    sw a5, 12(a1)
+; RV32I-SR-NEXT:    sw a4, 8(a1)
+; RV32I-SR-NEXT:    sw a3, 4(a1)
+; RV32I-SR-NEXT:    sw a2, 0(a1)
+; RV32I-SR-NEXT:    lw s0, 28(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw s1, 24(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw s2, 20(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw s3, 16(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw s4, 12(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    addi sp, sp, 32
+; RV32I-SR-NEXT:    tail tail_callee
 ;
 ; RV64I-SR-LABEL: tail_call:
-; RV64I-SR-NOT:     call t0, __riscv_save
-; RV64I-SR:         tail tail_callee
-; RV64I-SR-NOT:     tail __riscv_restore
+; RV64I-SR:       # %bb.0: # %entry
+; RV64I-SR-NEXT:    addi sp, sp, -48
+; RV64I-SR-NEXT:    sd s0, 40(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd s1, 32(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd s2, 24(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd s3, 16(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd s4, 8(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    lui a1, %hi(var0)
+; RV64I-SR-NEXT:    addi a1, a1, %lo(var0)
+; RV64I-SR-NEXT:    lw a2, 0(a1)
+; RV64I-SR-NEXT:    lw a3, 4(a1)
+; RV64I-SR-NEXT:    lw a4, 8(a1)
+; RV64I-SR-NEXT:    lw a5, 12(a1)
+; RV64I-SR-NEXT:    lw a6, 16(a1)
+; RV64I-SR-NEXT:    lw a7, 20(a1)
+; RV64I-SR-NEXT:    lw t0, 24(a1)
+; RV64I-SR-NEXT:    lw t1, 28(a1)
+; RV64I-SR-NEXT:    lw t2, 32(a1)
+; RV64I-SR-NEXT:    lw t3, 36(a1)
+; RV64I-SR-NEXT:    lw t4, 40(a1)
+; RV64I-SR-NEXT:    lw t5, 44(a1)
+; RV64I-SR-NEXT:    lw t6, 48(a1)
+; RV64I-SR-NEXT:    lw s0, 52(a1)
+; RV64I-SR-NEXT:    lw s1, 68(a1)
+; RV64I-SR-NEXT:    lw s2, 64(a1)
+; RV64I-SR-NEXT:    lw s3, 60(a1)
+; RV64I-SR-NEXT:    lw s4, 56(a1)
+; RV64I-SR-NEXT:    sw s1, 68(a1)
+; RV64I-SR-NEXT:    sw s2, 64(a1)
+; RV64I-SR-NEXT:    sw s3, 60(a1)
+; RV64I-SR-NEXT:    sw s4, 56(a1)
+; RV64I-SR-NEXT:    sw s0, 52(a1)
+; RV64I-SR-NEXT:    sw t6, 48(a1)
+; RV64I-SR-NEXT:    sw t5, 44(a1)
+; RV64I-SR-NEXT:    sw t4, 40(a1)
+; RV64I-SR-NEXT:    sw t3, 36(a1)
+; RV64I-SR-NEXT:    sw t2, 32(a1)
+; RV64I-SR-NEXT:    sw t1, 28(a1)
+; RV64I-SR-NEXT:    sw t0, 24(a1)
+; RV64I-SR-NEXT:    sw a7, 20(a1)
+; RV64I-SR-NEXT:    sw a6, 16(a1)
+; RV64I-SR-NEXT:    sw a5, 12(a1)
+; RV64I-SR-NEXT:    sw a4, 8(a1)
+; RV64I-SR-NEXT:    sw a3, 4(a1)
+; RV64I-SR-NEXT:    sw a2, 0(a1)
+; RV64I-SR-NEXT:    ld s0, 40(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld s1, 32(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld s2, 24(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld s3, 16(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld s4, 8(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    addi sp, sp, 48
+; RV64I-SR-NEXT:    tail tail_callee
 ;
 ; RV32I-FP-SR-LABEL: tail_call:
-; RV32I-FP-SR-NOT:     call t0, __riscv_save
-; RV32I-FP-SR:         tail tail_callee
-; RV32I-FP-SR-NOT:     tail __riscv_restore
+; RV32I-FP-SR:       # %bb.0: # %entry
+; RV32I-FP-SR-NEXT:    addi sp, sp, -32
+; RV32I-FP-SR-NEXT:    sw s0, 28(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw s1, 24(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw s2, 20(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw s3, 16(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw s4, 12(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    lui a1, %hi(var0)
+; RV32I-FP-SR-NEXT:    addi a1, a1, %lo(var0)
+; RV32I-FP-SR-NEXT:    lw a2, 0(a1)
+; RV32I-FP-SR-NEXT:    lw a3, 4(a1)
+; RV32I-FP-SR-NEXT:    lw a4, 8(a1)
+; RV32I-FP-SR-NEXT:    lw a5, 12(a1)
+; RV32I-FP-SR-NEXT:    lw a6, 16(a1)
+; RV32I-FP-SR-NEXT:    lw a7, 20(a1)
+; RV32I-FP-SR-NEXT:    lw t0, 24(a1)
+; RV32I-FP-SR-NEXT:    lw t1, 28(a1)
+; RV32I-FP-SR-NEXT:    lw t2, 32(a1)
+; RV32I-FP-SR-NEXT:    lw t3, 36(a1)
+; RV32I-FP-SR-NEXT:    lw t4, 40(a1)
+; RV32I-FP-SR-NEXT:    lw t5, 44(a1)
+; RV32I-FP-SR-NEXT:    lw t6, 48(a1)
+; RV32I-FP-SR-NEXT:    lw s0, 52(a1)
+; RV32I-FP-SR-NEXT:    lw s1, 68(a1)
+; RV32I-FP-SR-NEXT:    lw s2, 64(a1)
+; RV32I-FP-SR-NEXT:    lw s3, 60(a1)
+; RV32I-FP-SR-NEXT:    lw s4, 56(a1)
+; RV32I-FP-SR-NEXT:    sw s1, 68(a1)
+; RV32I-FP-SR-NEXT:    sw s2, 64(a1)
+; RV32I-FP-SR-NEXT:    sw s3, 60(a1)
+; RV32I-FP-SR-NEXT:    sw s4, 56(a1)
+; RV32I-FP-SR-NEXT:    sw s0, 52(a1)
+; RV32I-FP-SR-NEXT:    sw t6, 48(a1)
+; RV32I-FP-SR-NEXT:    sw t5, 44(a1)
+; RV32I-FP-SR-NEXT:    sw t4, 40(a1)
+; RV32I-FP-SR-NEXT:    sw t3, 36(a1)
+; RV32I-FP-SR-NEXT:    sw t2, 32(a1)
+; RV32I-FP-SR-NEXT:    sw t1, 28(a1)
+; RV32I-FP-SR-NEXT:    sw t0, 24(a1)
+; RV32I-FP-SR-NEXT:    sw a7, 20(a1)
+; RV32I-FP-SR-NEXT:    sw a6, 16(a1)
+; RV32I-FP-SR-NEXT:    sw a5, 12(a1)
+; RV32I-FP-SR-NEXT:    sw a4, 8(a1)
+; RV32I-FP-SR-NEXT:    sw a3, 4(a1)
+; RV32I-FP-SR-NEXT:    sw a2, 0(a1)
+; RV32I-FP-SR-NEXT:    lw s0, 28(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw s1, 24(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw s2, 20(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw s3, 16(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw s4, 12(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    addi sp, sp, 32
+; RV32I-FP-SR-NEXT:    tail tail_callee
 ;
 ; RV64I-FP-SR-LABEL: tail_call:
-; RV64I-FP-SR-NOT:     call t0, __riscv_save
-; RV64I-FP-SR:         tail tail_callee
-; RV64I-FP-SR-NOT:     tail __riscv_restore
+; RV64I-FP-SR:       # %bb.0: # %entry
+; RV64I-FP-SR-NEXT:    addi sp, sp, -48
+; RV64I-FP-SR-NEXT:    sd s0, 40(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd s1, 32(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd s2, 24(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd s3, 16(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd s4, 8(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    lui a1, %hi(var0)
+; RV64I-FP-SR-NEXT:    addi a1, a1, %lo(var0)
+; RV64I-FP-SR-NEXT:    lw a2, 0(a1)
+; RV64I-FP-SR-NEXT:    lw a3, 4(a1)
+; RV64I-FP-SR-NEXT:    lw a4, 8(a1)
+; RV64I-FP-SR-NEXT:    lw a5, 12(a1)
+; RV64I-FP-SR-NEXT:    lw a6, 16(a1)
+; RV64I-FP-SR-NEXT:    lw a7, 20(a1)
+; RV64I-FP-SR-NEXT:    lw t0, 24(a1)
+; RV64I-FP-SR-NEXT:    lw t1, 28(a1)
+; RV64I-FP-SR-NEXT:    lw t2, 32(a1)
+; RV64I-FP-SR-NEXT:    lw t3, 36(a1)
+; RV64I-FP-SR-NEXT:    lw t4, 40(a1)
+; RV64I-FP-SR-NEXT:    lw t5, 44(a1)
+; RV64I-FP-SR-NEXT:    lw t6, 48(a1)
+; RV64I-FP-SR-NEXT:    lw s0, 52(a1)
+; RV64I-FP-SR-NEXT:    lw s1, 68(a1)
+; RV64I-FP-SR-NEXT:    lw s2, 64(a1)
+; RV64I-FP-SR-NEXT:    lw s3, 60(a1)
+; RV64I-FP-SR-NEXT:    lw s4, 56(a1)
+; RV64I-FP-SR-NEXT:    sw s1, 68(a1)
+; RV64I-FP-SR-NEXT:    sw s2, 64(a1)
+; RV64I-FP-SR-NEXT:    sw s3, 60(a1)
+; RV64I-FP-SR-NEXT:    sw s4, 56(a1)
+; RV64I-FP-SR-NEXT:    sw s0, 52(a1)
+; RV64I-FP-SR-NEXT:    sw t6, 48(a1)
+; RV64I-FP-SR-NEXT:    sw t5, 44(a1)
+; RV64I-FP-SR-NEXT:    sw t4, 40(a1)
+; RV64I-FP-SR-NEXT:    sw t3, 36(a1)
+; RV64I-FP-SR-NEXT:    sw t2, 32(a1)
+; RV64I-FP-SR-NEXT:    sw t1, 28(a1)
+; RV64I-FP-SR-NEXT:    sw t0, 24(a1)
+; RV64I-FP-SR-NEXT:    sw a7, 20(a1)
+; RV64I-FP-SR-NEXT:    sw a6, 16(a1)
+; RV64I-FP-SR-NEXT:    sw a5, 12(a1)
+; RV64I-FP-SR-NEXT:    sw a4, 8(a1)
+; RV64I-FP-SR-NEXT:    sw a3, 4(a1)
+; RV64I-FP-SR-NEXT:    sw a2, 0(a1)
+; RV64I-FP-SR-NEXT:    ld s0, 40(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld s1, 32(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld s2, 24(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld s3, 16(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld s4, 8(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    addi sp, sp, 48
+; RV64I-FP-SR-NEXT:    tail tail_callee
 entry:
   %val = load [18 x i32], ptr @var0
   store volatile [18 x i32] %val, ptr @var0
@@ -185,28 +1600,124 @@ declare void @llvm.va_end(ptr)
 
 define i32 @varargs(ptr %fmt, ...) nounwind {
 ; RV32I-LABEL: varargs:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -48
+; RV32I-NEXT:    mv a0, a1
+; RV32I-NEXT:    sw a7, 44(sp)
+; RV32I-NEXT:    sw a6, 40(sp)
+; RV32I-NEXT:    sw a5, 36(sp)
+; RV32I-NEXT:    sw a4, 32(sp)
+; RV32I-NEXT:    sw a3, 28(sp)
+; RV32I-NEXT:    sw a2, 24(sp)
+; RV32I-NEXT:    sw a1, 20(sp)
+; RV32I-NEXT:    addi a1, sp, 24
+; RV32I-NEXT:    sw a1, 12(sp)
+; RV32I-NEXT:    addi sp, sp, 48
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: varargs:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -80
+; RV64I-NEXT:    sd a7, 72(sp)
+; RV64I-NEXT:    sd a6, 64(sp)
+; RV64I-NEXT:    sd a5, 56(sp)
+; RV64I-NEXT:    sd a4, 48(sp)
+; RV64I-NEXT:    sd a3, 40(sp)
+; RV64I-NEXT:    addi a0, sp, 24
+; RV64I-NEXT:    sd a0, 8(sp)
+; RV64I-NEXT:    lwu a0, 12(sp)
+; RV64I-NEXT:    lwu a3, 8(sp)
+; RV64I-NEXT:    sd a2, 32(sp)
+; RV64I-NEXT:    sd a1, 24(sp)
+; RV64I-NEXT:    slli a0, a0, 32
+; RV64I-NEXT:    or a0, a0, a3
+; RV64I-NEXT:    addi a1, a0, 4
+; RV64I-NEXT:    sw a1, 8(sp)
+; RV64I-NEXT:    srli a1, a1, 32
+; RV64I-NEXT:    sw a1, 12(sp)
+; RV64I-NEXT:    lw a0, 0(a0)
+; RV64I-NEXT:    addi sp, sp, 80
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: varargs:
-; RV32I-SR-NOT:     call t0, __riscv_save
-; RV32I-SR-NOT:     tail __riscv_restore
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    addi sp, sp, -48
+; RV32I-SR-NEXT:    mv a0, a1
+; RV32I-SR-NEXT:    sw a7, 44(sp)
+; RV32I-SR-NEXT:    sw a6, 40(sp)
+; RV32I-SR-NEXT:    sw a5, 36(sp)
+; RV32I-SR-NEXT:    sw a4, 32(sp)
+; RV32I-SR-NEXT:    sw a3, 28(sp)
+; RV32I-SR-NEXT:    sw a2, 24(sp)
+; RV32I-SR-NEXT:    sw a1, 20(sp)
+; RV32I-SR-NEXT:    addi a1, sp, 24
+; RV32I-SR-NEXT:    sw a1, 12(sp)
+; RV32I-SR-NEXT:    addi sp, sp, 48
+; RV32I-SR-NEXT:    ret
 ;
 ; RV64I-SR-LABEL: varargs:
-; RV64I-SR-NOT:     call t0, __riscv_save
-; RV64I-SR-NOT:     tail __riscv_restore
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    addi sp, sp, -80
+; RV64I-SR-NEXT:    sd a7, 72(sp)
+; RV64I-SR-NEXT:    sd a6, 64(sp)
+; RV64I-SR-NEXT:    sd a5, 56(sp)
+; RV64I-SR-NEXT:    sd a4, 48(sp)
+; RV64I-SR-NEXT:    sd a3, 40(sp)
+; RV64I-SR-NEXT:    addi a0, sp, 24
+; RV64I-SR-NEXT:    sd a0, 8(sp)
+; RV64I-SR-NEXT:    lwu a0, 12(sp)
+; RV64I-SR-NEXT:    lwu a3, 8(sp)
+; RV64I-SR-NEXT:    sd a2, 32(sp)
+; RV64I-SR-NEXT:    sd a1, 24(sp)
+; RV64I-SR-NEXT:    slli a0, a0, 32
+; RV64I-SR-NEXT:    or a0, a0, a3
+; RV64I-SR-NEXT:    addi a1, a0, 4
+; RV64I-SR-NEXT:    sw a1, 8(sp)
+; RV64I-SR-NEXT:    srli a1, a1, 32
+; RV64I-SR-NEXT:    sw a1, 12(sp)
+; RV64I-SR-NEXT:    lw a0, 0(a0)
+; RV64I-SR-NEXT:    addi sp, sp, 80
+; RV64I-SR-NEXT:    ret
 ;
 ; RV32I-FP-SR-LABEL: varargs:
-; RV32I-FP-SR-NOT:     call t0, __riscv_save
-; RV32I-FP-SR-NOT:     tail __riscv_restore
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    addi sp, sp, -48
+; RV32I-FP-SR-NEXT:    mv a0, a1
+; RV32I-FP-SR-NEXT:    sw a7, 44(sp)
+; RV32I-FP-SR-NEXT:    sw a6, 40(sp)
+; RV32I-FP-SR-NEXT:    sw a5, 36(sp)
+; RV32I-FP-SR-NEXT:    sw a4, 32(sp)
+; RV32I-FP-SR-NEXT:    sw a3, 28(sp)
+; RV32I-FP-SR-NEXT:    sw a2, 24(sp)
+; RV32I-FP-SR-NEXT:    sw a1, 20(sp)
+; RV32I-FP-SR-NEXT:    addi a1, sp, 24
+; RV32I-FP-SR-NEXT:    sw a1, 12(sp)
+; RV32I-FP-SR-NEXT:    addi sp, sp, 48
+; RV32I-FP-SR-NEXT:    ret
 ;
 ; RV64I-FP-SR-LABEL: varargs:
-; RV64I-FP-SR-NOT:     call t0, __riscv_save
-; RV64I-FP-SR-NOT:     tail __riscv_restore
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    addi sp, sp, -80
+; RV64I-FP-SR-NEXT:    sd a7, 72(sp)
+; RV64I-FP-SR-NEXT:    sd a6, 64(sp)
+; RV64I-FP-SR-NEXT:    sd a5, 56(sp)
+; RV64I-FP-SR-NEXT:    sd a4, 48(sp)
+; RV64I-FP-SR-NEXT:    sd a3, 40(sp)
+; RV64I-FP-SR-NEXT:    addi a0, sp, 24
+; RV64I-FP-SR-NEXT:    sd a0, 8(sp)
+; RV64I-FP-SR-NEXT:    lwu a0, 12(sp)
+; RV64I-FP-SR-NEXT:    lwu a3, 8(sp)
+; RV64I-FP-SR-NEXT:    sd a2, 32(sp)
+; RV64I-FP-SR-NEXT:    sd a1, 24(sp)
+; RV64I-FP-SR-NEXT:    slli a0, a0, 32
+; RV64I-FP-SR-NEXT:    or a0, a0, a3
+; RV64I-FP-SR-NEXT:    addi a1, a0, 4
+; RV64I-FP-SR-NEXT:    sw a1, 8(sp)
+; RV64I-FP-SR-NEXT:    srli a1, a1, 32
+; RV64I-FP-SR-NEXT:    sw a1, 12(sp)
+; RV64I-FP-SR-NEXT:    lw a0, 0(a0)
+; RV64I-FP-SR-NEXT:    addi sp, sp, 80
+; RV64I-FP-SR-NEXT:    ret
   %va = alloca ptr, align 4
   call void @llvm.va_start(ptr %va)
   %argp.cur = load ptr, ptr %va, align 4
@@ -219,28 +1730,280 @@ define i32 @varargs(ptr %fmt, ...) nounwind {
 
 define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind {
 ; RV32I-LABEL: many_args:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0: # %entry
+; RV32I-NEXT:    addi sp, sp, -16
+; RV32I-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s2, 4(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s3, 0(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    lui a0, %hi(var0)
+; RV32I-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-NEXT:    lw a1, 0(a0)
+; RV32I-NEXT:    lw a2, 4(a0)
+; RV32I-NEXT:    lw a3, 8(a0)
+; RV32I-NEXT:    lw a4, 12(a0)
+; RV32I-NEXT:    lw a5, 16(a0)
+; RV32I-NEXT:    lw a6, 20(a0)
+; RV32I-NEXT:    lw a7, 24(a0)
+; RV32I-NEXT:    lw t0, 28(a0)
+; RV32I-NEXT:    lw t1, 32(a0)
+; RV32I-NEXT:    lw t2, 36(a0)
+; RV32I-NEXT:    lw t3, 40(a0)
+; RV32I-NEXT:    lw t4, 44(a0)
+; RV32I-NEXT:    lw t5, 48(a0)
+; RV32I-NEXT:    lw t6, 52(a0)
+; RV32I-NEXT:    lw s0, 68(a0)
+; RV32I-NEXT:    lw s1, 64(a0)
+; RV32I-NEXT:    lw s2, 60(a0)
+; RV32I-NEXT:    lw s3, 56(a0)
+; RV32I-NEXT:    sw s0, 68(a0)
+; RV32I-NEXT:    sw s1, 64(a0)
+; RV32I-NEXT:    sw s2, 60(a0)
+; RV32I-NEXT:    sw s3, 56(a0)
+; RV32I-NEXT:    sw t6, 52(a0)
+; RV32I-NEXT:    sw t5, 48(a0)
+; RV32I-NEXT:    sw t4, 44(a0)
+; RV32I-NEXT:    sw t3, 40(a0)
+; RV32I-NEXT:    sw t2, 36(a0)
+; RV32I-NEXT:    sw t1, 32(a0)
+; RV32I-NEXT:    sw t0, 28(a0)
+; RV32I-NEXT:    sw a7, 24(a0)
+; RV32I-NEXT:    sw a6, 20(a0)
+; RV32I-NEXT:    sw a5, 16(a0)
+; RV32I-NEXT:    sw a4, 12(a0)
+; RV32I-NEXT:    sw a3, 8(a0)
+; RV32I-NEXT:    sw a2, 4(a0)
+; RV32I-NEXT:    sw a1, 0(a0)
+; RV32I-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s2, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s3, 0(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 16
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: many_args:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0: # %entry
+; RV64I-NEXT:    addi sp, sp, -32
+; RV64I-NEXT:    sd s0, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s2, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s3, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    lui a0, %hi(var0)
+; RV64I-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-NEXT:    lw a1, 0(a0)
+; RV64I-NEXT:    lw a2, 4(a0)
+; RV64I-NEXT:    lw a3, 8(a0)
+; RV64I-NEXT:    lw a4, 12(a0)
+; RV64I-NEXT:    lw a5, 16(a0)
+; RV64I-NEXT:    lw a6, 20(a0)
+; RV64I-NEXT:    lw a7, 24(a0)
+; RV64I-NEXT:    lw t0, 28(a0)
+; RV64I-NEXT:    lw t1, 32(a0)
+; RV64I-NEXT:    lw t2, 36(a0)
+; RV64I-NEXT:    lw t3, 40(a0)
+; RV64I-NEXT:    lw t4, 44(a0)
+; RV64I-NEXT:    lw t5, 48(a0)
+; RV64I-NEXT:    lw t6, 52(a0)
+; RV64I-NEXT:    lw s0, 68(a0)
+; RV64I-NEXT:    lw s1, 64(a0)
+; RV64I-NEXT:    lw s2, 60(a0)
+; RV64I-NEXT:    lw s3, 56(a0)
+; RV64I-NEXT:    sw s0, 68(a0)
+; RV64I-NEXT:    sw s1, 64(a0)
+; RV64I-NEXT:    sw s2, 60(a0)
+; RV64I-NEXT:    sw s3, 56(a0)
+; RV64I-NEXT:    sw t6, 52(a0)
+; RV64I-NEXT:    sw t5, 48(a0)
+; RV64I-NEXT:    sw t4, 44(a0)
+; RV64I-NEXT:    sw t3, 40(a0)
+; RV64I-NEXT:    sw t2, 36(a0)
+; RV64I-NEXT:    sw t1, 32(a0)
+; RV64I-NEXT:    sw t0, 28(a0)
+; RV64I-NEXT:    sw a7, 24(a0)
+; RV64I-NEXT:    sw a6, 20(a0)
+; RV64I-NEXT:    sw a5, 16(a0)
+; RV64I-NEXT:    sw a4, 12(a0)
+; RV64I-NEXT:    sw a3, 8(a0)
+; RV64I-NEXT:    sw a2, 4(a0)
+; RV64I-NEXT:    sw a1, 0(a0)
+; RV64I-NEXT:    ld s0, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s2, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s3, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 32
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: many_args:
-; RV32I-SR:         call t0, __riscv_save_5
-; RV32I-SR:         tail __riscv_restore_5
+; RV32I-SR:       # %bb.0: # %entry
+; RV32I-SR-NEXT:    call t0, __riscv_save_4
+; RV32I-SR-NEXT:    lui a0, %hi(var0)
+; RV32I-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-SR-NEXT:    lw a1, 0(a0)
+; RV32I-SR-NEXT:    lw a2, 4(a0)
+; RV32I-SR-NEXT:    lw a3, 8(a0)
+; RV32I-SR-NEXT:    lw a4, 12(a0)
+; RV32I-SR-NEXT:    lw a5, 16(a0)
+; RV32I-SR-NEXT:    lw a6, 20(a0)
+; RV32I-SR-NEXT:    lw a7, 24(a0)
+; RV32I-SR-NEXT:    lw t0, 28(a0)
+; RV32I-SR-NEXT:    lw t1, 32(a0)
+; RV32I-SR-NEXT:    lw t2, 36(a0)
+; RV32I-SR-NEXT:    lw t3, 40(a0)
+; RV32I-SR-NEXT:    lw t4, 44(a0)
+; RV32I-SR-NEXT:    lw t5, 48(a0)
+; RV32I-SR-NEXT:    lw t6, 52(a0)
+; RV32I-SR-NEXT:    lw s0, 68(a0)
+; RV32I-SR-NEXT:    lw s1, 64(a0)
+; RV32I-SR-NEXT:    lw s2, 60(a0)
+; RV32I-SR-NEXT:    lw s3, 56(a0)
+; RV32I-SR-NEXT:    sw s0, 68(a0)
+; RV32I-SR-NEXT:    sw s1, 64(a0)
+; RV32I-SR-NEXT:    sw s2, 60(a0)
+; RV32I-SR-NEXT:    sw s3, 56(a0)
+; RV32I-SR-NEXT:    sw t6, 52(a0)
+; RV32I-SR-NEXT:    sw t5, 48(a0)
+; RV32I-SR-NEXT:    sw t4, 44(a0)
+; RV32I-SR-NEXT:    sw t3, 40(a0)
+; RV32I-SR-NEXT:    sw t2, 36(a0)
+; RV32I-SR-NEXT:    sw t1, 32(a0)
+; RV32I-SR-NEXT:    sw t0, 28(a0)
+; RV32I-SR-NEXT:    sw a7, 24(a0)
+; RV32I-SR-NEXT:    sw a6, 20(a0)
+; RV32I-SR-NEXT:    sw a5, 16(a0)
+; RV32I-SR-NEXT:    sw a4, 12(a0)
+; RV32I-SR-NEXT:    sw a3, 8(a0)
+; RV32I-SR-NEXT:    sw a2, 4(a0)
+; RV32I-SR-NEXT:    sw a1, 0(a0)
+; RV32I-SR-NEXT:    tail __riscv_restore_4
 ;
 ; RV64I-SR-LABEL: many_args:
-; RV64I-SR:         call t0, __riscv_save_5
-; RV64I-SR:         tail __riscv_restore_5
+; RV64I-SR:       # %bb.0: # %entry
+; RV64I-SR-NEXT:    call t0, __riscv_save_4
+; RV64I-SR-NEXT:    lui a0, %hi(var0)
+; RV64I-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-SR-NEXT:    lw a1, 0(a0)
+; RV64I-SR-NEXT:    lw a2, 4(a0)
+; RV64I-SR-NEXT:    lw a3, 8(a0)
+; RV64I-SR-NEXT:    lw a4, 12(a0)
+; RV64I-SR-NEXT:    lw a5, 16(a0)
+; RV64I-SR-NEXT:    lw a6, 20(a0)
+; RV64I-SR-NEXT:    lw a7, 24(a0)
+; RV64I-SR-NEXT:    lw t0, 28(a0)
+; RV64I-SR-NEXT:    lw t1, 32(a0)
+; RV64I-SR-NEXT:    lw t2, 36(a0)
+; RV64I-SR-NEXT:    lw t3, 40(a0)
+; RV64I-SR-NEXT:    lw t4, 44(a0)
+; RV64I-SR-NEXT:    lw t5, 48(a0)
+; RV64I-SR-NEXT:    lw t6, 52(a0)
+; RV64I-SR-NEXT:    lw s0, 68(a0)
+; RV64I-SR-NEXT:    lw s1, 64(a0)
+; RV64I-SR-NEXT:    lw s2, 60(a0)
+; RV64I-SR-NEXT:    lw s3, 56(a0)
+; RV64I-SR-NEXT:    sw s0, 68(a0)
+; RV64I-SR-NEXT:    sw s1, 64(a0)
+; RV64I-SR-NEXT:    sw s2, 60(a0)
+; RV64I-SR-NEXT:    sw s3, 56(a0)
+; RV64I-SR-NEXT:    sw t6, 52(a0)
+; RV64I-SR-NEXT:    sw t5, 48(a0)
+; RV64I-SR-NEXT:    sw t4, 44(a0)
+; RV64I-SR-NEXT:    sw t3, 40(a0)
+; RV64I-SR-NEXT:    sw t2, 36(a0)
+; RV64I-SR-NEXT:    sw t1, 32(a0)
+; RV64I-SR-NEXT:    sw t0, 28(a0)
+; RV64I-SR-NEXT:    sw a7, 24(a0)
+; RV64I-SR-NEXT:    sw a6, 20(a0)
+; RV64I-SR-NEXT:    sw a5, 16(a0)
+; RV64I-SR-NEXT:    sw a4, 12(a0)
+; RV64I-SR-NEXT:    sw a3, 8(a0)
+; RV64I-SR-NEXT:    sw a2, 4(a0)
+; RV64I-SR-NEXT:    sw a1, 0(a0)
+; RV64I-SR-NEXT:    tail __riscv_restore_4
 ;
 ; RV32I-FP-SR-LABEL: many_args:
-; RV32I-FP-SR:         call t0, __riscv_save_5
-; RV32I-FP-SR:         tail __riscv_restore_5
+; RV32I-FP-SR:       # %bb.0: # %entry
+; RV32I-FP-SR-NEXT:    call t0, __riscv_save_4
+; RV32I-FP-SR-NEXT:    lui a0, %hi(var0)
+; RV32I-FP-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV32I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    lw a2, 4(a0)
+; RV32I-FP-SR-NEXT:    lw a3, 8(a0)
+; RV32I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    lw s0, 68(a0)
+; RV32I-FP-SR-NEXT:    lw s1, 64(a0)
+; RV32I-FP-SR-NEXT:    lw s2, 60(a0)
+; RV32I-FP-SR-NEXT:    lw s3, 56(a0)
+; RV32I-FP-SR-NEXT:    sw s0, 68(a0)
+; RV32I-FP-SR-NEXT:    sw s1, 64(a0)
+; RV32I-FP-SR-NEXT:    sw s2, 60(a0)
+; RV32I-FP-SR-NEXT:    sw s3, 56(a0)
+; RV32I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV32I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV32I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV32I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV32I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV32I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV32I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV32I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV32I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV32I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV32I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV32I-FP-SR-NEXT:    sw a3, 8(a0)
+; RV32I-FP-SR-NEXT:    sw a2, 4(a0)
+; RV32I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV32I-FP-SR-NEXT:    tail __riscv_restore_4
 ;
 ; RV64I-FP-SR-LABEL: many_args:
-; RV64I-FP-SR:         call t0, __riscv_save_5
-; RV64I-FP-SR:         tail __riscv_restore_5
+; RV64I-FP-SR:       # %bb.0: # %entry
+; RV64I-FP-SR-NEXT:    call t0, __riscv_save_4
+; RV64I-FP-SR-NEXT:    lui a0, %hi(var0)
+; RV64I-FP-SR-NEXT:    addi a0, a0, %lo(var0)
+; RV64I-FP-SR-NEXT:    lw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    lw a2, 4(a0)
+; RV64I-FP-SR-NEXT:    lw a3, 8(a0)
+; RV64I-FP-SR-NEXT:    lw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    lw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    lw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    lw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    lw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    lw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    lw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    lw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    lw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    lw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    lw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    lw s0, 68(a0)
+; RV64I-FP-SR-NEXT:    lw s1, 64(a0)
+; RV64I-FP-SR-NEXT:    lw s2, 60(a0)
+; RV64I-FP-SR-NEXT:    lw s3, 56(a0)
+; RV64I-FP-SR-NEXT:    sw s0, 68(a0)
+; RV64I-FP-SR-NEXT:    sw s1, 64(a0)
+; RV64I-FP-SR-NEXT:    sw s2, 60(a0)
+; RV64I-FP-SR-NEXT:    sw s3, 56(a0)
+; RV64I-FP-SR-NEXT:    sw t6, 52(a0)
+; RV64I-FP-SR-NEXT:    sw t5, 48(a0)
+; RV64I-FP-SR-NEXT:    sw t4, 44(a0)
+; RV64I-FP-SR-NEXT:    sw t3, 40(a0)
+; RV64I-FP-SR-NEXT:    sw t2, 36(a0)
+; RV64I-FP-SR-NEXT:    sw t1, 32(a0)
+; RV64I-FP-SR-NEXT:    sw t0, 28(a0)
+; RV64I-FP-SR-NEXT:    sw a7, 24(a0)
+; RV64I-FP-SR-NEXT:    sw a6, 20(a0)
+; RV64I-FP-SR-NEXT:    sw a5, 16(a0)
+; RV64I-FP-SR-NEXT:    sw a4, 12(a0)
+; RV64I-FP-SR-NEXT:    sw a3, 8(a0)
+; RV64I-FP-SR-NEXT:    sw a2, 4(a0)
+; RV64I-FP-SR-NEXT:    sw a1, 0(a0)
+; RV64I-FP-SR-NEXT:    tail __riscv_restore_4
 entry:
   %val = load [18 x i32], ptr @var0
   store volatile [18 x i32] %val, ptr @var0
@@ -255,40 +2018,108 @@ declare void @notdead(ptr)
 
 define void @alloca(i32 %n) nounwind {
 ; RV32I-LABEL: alloca:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I:         addi s0, sp, 16
-; RV32I:         addi sp, s0, -16
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -16
+; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    addi s0, sp, 16
+; RV32I-NEXT:    mv s1, sp
+; RV32I-NEXT:    addi a0, a0, 15
+; RV32I-NEXT:    andi a0, a0, -16
+; RV32I-NEXT:    sub a0, sp, a0
+; RV32I-NEXT:    mv sp, a0
+; RV32I-NEXT:    call notdead
+; RV32I-NEXT:    mv sp, s1
+; RV32I-NEXT:    addi sp, s0, -16
+; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 16
+; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: alloca:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I:         addi s0, sp, 32
-; RV64I:         addi sp, s0, -32
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -32
+; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    addi s0, sp, 32
+; RV64I-NEXT:    mv s1, sp
+; RV64I-NEXT:    slli a0, a0, 32
+; RV64I-NEXT:    srli a0, a0, 32
+; RV64I-NEXT:    addi a0, a0, 15
+; RV64I-NEXT:    andi a0, a0, -16
+; RV64I-NEXT:    sub a0, sp, a0
+; RV64I-NEXT:    mv sp, a0
+; RV64I-NEXT:    call notdead
+; RV64I-NEXT:    mv sp, s1
+; RV64I-NEXT:    addi sp, s0, -32
+; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 32
+; RV64I-NEXT:    ret
 ;
 ; RV32I-SR-LABEL: alloca:
-; RV32I-SR:         call t0, __riscv_save_2
-; RV32I-SR:         addi s0, sp, 16
-; RV32I-SR:         addi sp, s0, -16
-; RV32I-SR:         tail __riscv_restore_2
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    call t0, __riscv_save_2
+; RV32I-SR-NEXT:    addi s0, sp, 16
+; RV32I-SR-NEXT:    mv s1, sp
+; RV32I-SR-NEXT:    addi a0, a0, 15
+; RV32I-SR-NEXT:    andi a0, a0, -16
+; RV32I-SR-NEXT:    sub a0, sp, a0
+; RV32I-SR-NEXT:    mv sp, a0
+; RV32I-SR-NEXT:    call notdead
+; RV32I-SR-NEXT:    mv sp, s1
+; RV32I-SR-NEXT:    addi sp, s0, -16
+; RV32I-SR-NEXT:    tail __riscv_restore_2
 ;
 ; RV64I-SR-LABEL: alloca:
-; RV64I-SR:         call t0, __riscv_save_2
-; RV64I-SR:         addi s0, sp, 32
-; RV64I-SR:         addi sp, s0, -32
-; RV64I-SR:         tail __riscv_restore_2
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    call t0, __riscv_save_2
+; RV64I-SR-NEXT:    addi s0, sp, 32
+; RV64I-SR-NEXT:    mv s1, sp
+; RV64I-SR-NEXT:    slli a0, a0, 32
+; RV64I-SR-NEXT:    srli a0, a0, 32
+; RV64I-SR-NEXT:    addi a0, a0, 15
+; RV64I-SR-NEXT:    andi a0, a0, -16
+; RV64I-SR-NEXT:    sub a0, sp, a0
+; RV64I-SR-NEXT:    mv sp, a0
+; RV64I-SR-NEXT:    call notdead
+; RV64I-SR-NEXT:    mv sp, s1
+; RV64I-SR-NEXT:    addi sp, s0, -32
+; RV64I-SR-NEXT:    tail __riscv_restore_2
 ;
 ; RV32I-FP-SR-LABEL: alloca:
-; RV32I-FP-SR:         call t0, __riscv_save_2
-; RV32I-FP-SR:         addi s0, sp, 16
-; RV32I-FP-SR:         addi sp, s0, -16
-; RV32I-FP-SR:         tail __riscv_restore_2
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    call t0, __riscv_save_2
+; RV32I-FP-SR-NEXT:    addi s0, sp, 16
+; RV32I-FP-SR-NEXT:    mv s1, sp
+; RV32I-FP-SR-NEXT:    addi a0, a0, 15
+; RV32I-FP-SR-NEXT:    andi a0, a0, -16
+; RV32I-FP-SR-NEXT:    sub a0, sp, a0
+; RV32I-FP-SR-NEXT:    mv sp, a0
+; RV32I-FP-SR-NEXT:    call notdead
+; RV32I-FP-SR-NEXT:    mv sp, s1
+; RV32I-FP-SR-NEXT:    addi sp, s0, -16
+; RV32I-FP-SR-NEXT:    tail __riscv_restore_2
 ;
 ; RV64I-FP-SR-LABEL: alloca:
-; RV64I-FP-SR:         call t0, __riscv_save_2
-; RV64I-FP-SR:         addi s0, sp, 32
-; RV64I-FP-SR:         addi sp, s0, -32
-; RV64I-FP-SR:         tail __riscv_restore_2
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    call t0, __riscv_save_2
+; RV64I-FP-SR-NEXT:    addi s0, sp, 32
+; RV64I-FP-SR-NEXT:    mv s1, sp
+; RV64I-FP-SR-NEXT:    slli a0, a0, 32
+; RV64I-FP-SR-NEXT:    srli a0, a0, 32
+; RV64I-FP-SR-NEXT:    addi a0, a0, 15
+; RV64I-FP-SR-NEXT:    andi a0, a0, -16
+; RV64I-FP-SR-NEXT:    sub a0, sp, a0
+; RV64I-FP-SR-NEXT:    mv sp, a0
+; RV64I-FP-SR-NEXT:    call notdead
+; RV64I-FP-SR-NEXT:    mv sp, s1
+; RV64I-FP-SR-NEXT:    addi sp, s0, -32
+; RV64I-FP-SR-NEXT:    tail __riscv_restore_2
   %sp = call ptr @llvm.stacksave()
   %addr = alloca i8, i32 %n
   call void @notdead(ptr %addr)
@@ -301,28 +2132,318 @@ define void @alloca(i32 %n) nounwind {
 declare i32 @foo(...)
 define void @interrupt() nounwind "interrupt"="supervisor" {
 ; RV32I-LABEL: interrupt:
-; RV32I-NOT:     call t0, __riscv_save
-; RV32I-NOT:     tail __riscv_restore
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -64
+; RV32I-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t0, 56(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t1, 52(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t2, 48(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a1, 40(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a2, 36(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a3, 32(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a4, 28(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a5, 24(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a6, 20(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw a7, 16(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t3, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t4, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t5, 4(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw t6, 0(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    call foo
+; RV32I-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t0, 56(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t1, 52(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t2, 48(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a0, 44(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a1, 40(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a2, 36(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a3, 32(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a4, 28(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a5, 24(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a6, 20(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw a7, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t3, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t4, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t5, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw t6, 0(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 64
+; RV32I-NEXT:    sret
 ;
 ; RV64I-LABEL: interrupt:
-; RV64I-NOT:     call t0, __riscv_save
-; RV64I-NOT:     tail __riscv_restore
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -128
+; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t0, 112(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t1, 104(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t2, 96(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a0, 88(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a1, 80(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a2, 72(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a3, 64(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a4, 56(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a5, 48(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a6, 40(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd a7, 32(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t3, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t4, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t5, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd t6, 0(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    call foo
+; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t0, 112(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t1, 104(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t2, 96(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a0, 88(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a1, 80(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a2, 72(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a3, 64(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a4, 56(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a5, 48(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a6, 40(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld a7, 32(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t3, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t4, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t5, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld t6, 0(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 128
+; RV64I-NEXT:    sret
 ;
 ; RV32I-SR-LABEL: interrupt:
-; RV32I-SR-NOT:     call t0, __riscv_save
-; RV32I-SR-NOT:     tail __riscv_restore
+; RV32I-SR:       # %bb.0:
+; RV32I-SR-NEXT:    addi sp, sp, -64
+; RV32I-SR-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t0, 56(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t1, 52(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t2, 48(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a1, 40(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a2, 36(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a3, 32(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a4, 28(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a5, 24(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a6, 20(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw a7, 16(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t3, 12(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t4, 8(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t5, 4(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    sw t6, 0(sp) # 4-byte Folded Spill
+; RV32I-SR-NEXT:    call foo
+; RV32I-SR-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t0, 56(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t1, 52(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t2, 48(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a0, 44(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a1, 40(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a2, 36(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a3, 32(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a4, 28(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a5, 24(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a6, 20(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw a7, 16(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t3, 12(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t4, 8(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t5, 4(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    lw t6, 0(sp) # 4-byte Folded Reload
+; RV32I-SR-NEXT:    addi sp, sp, 64
+; RV32I-SR-NEXT:    sret
 ;
 ; RV64I-SR-LABEL: interrupt:
-; RV64I-SR-NOT:     call t0, __riscv_save
-; RV64I-SR-NOT:     tail __riscv_restore
+; RV64I-SR:       # %bb.0:
+; RV64I-SR-NEXT:    addi sp, sp, -128
+; RV64I-SR-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t0, 112(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t1, 104(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t2, 96(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a0, 88(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a1, 80(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a2, 72(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a3, 64(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a4, 56(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a5, 48(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a6, 40(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd a7, 32(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t3, 24(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t4, 16(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t5, 8(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    sd t6, 0(sp) # 8-byte Folded Spill
+; RV64I-SR-NEXT:    call foo
+; RV64I-SR-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t0, 112(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t1, 104(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t2, 96(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a0, 88(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a1, 80(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a2, 72(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a3, 64(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a4, 56(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a5, 48(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a6, 40(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld a7, 32(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t3, 24(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t4, 16(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t5, 8(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    ld t6, 0(sp) # 8-byte Folded Reload
+; RV64I-SR-NEXT:    addi sp, sp, 128
+; RV64I-SR-NEXT:    sret
 ;
 ; RV32I-FP-SR-LABEL: interrupt:
-; RV32I-FP-SR-NOT:     call t0, __riscv_save
-; RV32I-FP-SR-NOT:     tail __riscv_restore
+; RV32I-FP-SR:       # %bb.0:
+; RV32I-FP-SR-NEXT:    addi sp, sp, -144
+; RV32I-FP-SR-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t0, 136(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t1, 132(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t2, 128(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a0, 124(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a1, 120(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a2, 116(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a3, 112(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a4, 108(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a5, 104(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a6, 100(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw a7, 96(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t3, 92(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t4, 88(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t5, 84(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    sw t6, 80(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft0, 76(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft1, 72(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft2, 68(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft3, 64(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft4, 60(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft5, 56(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft6, 52(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft7, 48(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa0, 44(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa1, 40(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa2, 36(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa3, 32(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa4, 28(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa5, 24(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa6, 20(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw fa7, 16(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft8, 12(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft9, 8(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft10, 4(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    fsw ft11, 0(sp) # 4-byte Folded Spill
+; RV32I-FP-SR-NEXT:    call foo
+; RV32I-FP-SR-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t0, 136(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t1, 132(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t2, 128(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a0, 124(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a1, 120(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a2, 116(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a3, 112(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a4, 108(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a5, 104(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a6, 100(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw a7, 96(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t3, 92(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t4, 88(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t5, 84(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    lw t6, 80(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft0, 76(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft1, 72(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft2, 68(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft3, 64(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft4, 60(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft5, 56(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft6, 52(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft7, 48(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa0, 44(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa1, 40(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa2, 36(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa3, 32(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa4, 28(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa5, 24(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa6, 20(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw fa7, 16(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft8, 12(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft9, 8(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft10, 4(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    flw ft11, 0(sp) # 4-byte Folded Reload
+; RV32I-FP-SR-NEXT:    addi sp, sp, 144
+; RV32I-FP-SR-NEXT:    sret
 ;
 ; RV64I-FP-SR-LABEL: interrupt:
-; RV64I-FP-SR-NOT:     call t0, __riscv_save
-; RV64I-FP-SR-NOT:     tail __riscv_restore
+; RV64I-FP-SR:       # %bb.0:
+; RV64I-FP-SR-NEXT:    addi sp, sp, -288
+; RV64I-FP-SR-NEXT:    sd ra, 280(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t0, 272(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t1, 264(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t2, 256(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a0, 248(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a1, 240(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a2, 232(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a3, 224(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a4, 216(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a5, 208(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a6, 200(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd a7, 192(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t3, 184(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t4, 176(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t5, 168(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    sd t6, 160(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft0, 152(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft1, 144(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft2, 136(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft3, 128(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft4, 120(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft5, 112(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft6, 104(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft7, 96(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa0, 88(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa1, 80(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa2, 72(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa3, 64(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa4, 56(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa5, 48(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa6, 40(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd fa7, 32(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft8, 24(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft9, 16(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft10, 8(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    fsd ft11, 0(sp) # 8-byte Folded Spill
+; RV64I-FP-SR-NEXT:    call foo
+; RV64I-FP-SR-NEXT:    ld ra, 280(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t0, 272(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t1, 264(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t2, 256(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a0, 248(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a1, 240(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a2, 232(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a3, 224(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a4, 216(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a5, 208(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a6, 200(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld a7, 192(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t3, 184(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t4, 176(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t5, 168(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    ld t6, 160(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft0, 152(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft1, 144(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft2, 136(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft3, 128(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft4, 120(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft5, 112(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft6, 104(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft7, 96(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa0, 88(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa1, 80(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa2, 72(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa3, 64(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa4, 56(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa5, 48(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa6, 40(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld fa7, 32(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft8, 24(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft9, 16(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft10, 8(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    fld ft11, 0(sp) # 8-byte Folded Reload
+; RV64I-FP-SR-NEXT:    addi sp, sp, 288
+; RV64I-FP-SR-NEXT:    sret
   %call = call i32 @foo()
   ret void
 }
diff --git a/llvm/test/CodeGen/RISCV/zext-with-load-is-free.ll b/llvm/test/CodeGen/RISCV/zext-with-load-is-free.ll
index 771a72f8d55f0..11ff368e44601 100644
--- a/llvm/test/CodeGen/RISCV/zext-with-load-is-free.ll
+++ b/llvm/test/CodeGen/RISCV/zext-with-load-is-free.ll
@@ -10,11 +10,11 @@ define dso_local i32 @test_zext_i8() nounwind {
 ; RV32I-LABEL: test_zext_i8:
 ; RV32I:       # %bb.0: # %entry
 ; RV32I-NEXT:    lui a0, %hi(bytes)
-; RV32I-NEXT:    lbu a1, %lo(bytes)(a0)
+; RV32I-NEXT:    addi a0, a0, %lo(bytes)
+; RV32I-NEXT:    lbu a1, 0(a0)
 ; RV32I-NEXT:    li a2, 136
 ; RV32I-NEXT:    bne a1, a2, .LBB0_3
 ; RV32I-NEXT:  # %bb.1: # %entry
-; RV32I-NEXT:    addi a0, a0, %lo(bytes)
 ; RV32I-NEXT:    lbu a0, 1(a0)
 ; RV32I-NEXT:    li a1, 7
 ; RV32I-NEXT:    bne a0, a1, .LBB0_3
@@ -45,12 +45,12 @@ define dso_local i32 @test_zext_i16() nounwind {
 ; RV32I-LABEL: test_zext_i16:
 ; RV32I:       # %bb.0: # %entry
 ; RV32I-NEXT:    lui a0, %hi(shorts)
-; RV32I-NEXT:    lhu a1, %lo(shorts)(a0)
+; RV32I-NEXT:    addi a0, a0, %lo(shorts)
+; RV32I-NEXT:    lhu a1, 0(a0)
 ; RV32I-NEXT:    lui a2, 16
 ; RV32I-NEXT:    addi a2, a2, -120
 ; RV32I-NEXT:    bne a1, a2, .LBB1_3
 ; RV32I-NEXT:  # %bb.1: # %entry
-; RV32I-NEXT:    addi a0, a0, %lo(shorts)
 ; RV32I-NEXT:    lhu a0, 2(a0)
 ; RV32I-NEXT:    li a1, 7
 ; RV32I-NEXT:    bne a0, a1, .LBB1_3



More information about the llvm-commits mailing list