[llvm] 69a661c - [RISCV] Remove CalleeSavedInfo for Zcmp/save-restore-libcalls registers (#79535)

via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 6 18:18:53 PST 2024


Author: Visoiu Mistrih Francis
Date: 2024-02-06T18:18:49-08:00
New Revision: 69a661cbae10495e9556d195fa683c0100ae299c

URL: https://github.com/llvm/llvm-project/commit/69a661cbae10495e9556d195fa683c0100ae299c
DIFF: https://github.com/llvm/llvm-project/commit/69a661cbae10495e9556d195fa683c0100ae299c.diff

LOG: [RISCV] Remove CalleeSavedInfo for Zcmp/save-restore-libcalls registers (#79535)

Registers that are pushed/popped by Zcmp or libcalls have pre-defined
frame indices that are never allocated in MachineFrameInfo. They're
being used throughout PEI, but the rest of codegen doesn't work that way
and expects each frame index to be a valid index in MFI.

This patch keeps it local to PEI and removes them from the
CalleeSavedInfo list at the end of the pass.

Before this pass, any MIR testing post-PEI is broken and asserts (see
issue #79491).

Added: 
    llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir

Modified: 
    llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
    llvm/lib/Target/RISCV/RISCVFrameLowering.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
index 745ae68123b08..e5b510349e3dd 100644
--- a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
@@ -1252,6 +1252,30 @@ void RISCVFrameLowering::processFunctionBeforeFrameFinalized(
   RVFI->setCalleeSavedStackSize(Size);
 }
 
+void RISCVFrameLowering::processFunctionBeforeFrameIndicesReplaced(
+    MachineFunction &MF, RegScavenger *RS) const {
+  // Remove CalleeSavedInfo for registers saved by Zcmp or save/restore
+  // libcalls.
+  MachineFrameInfo &MFI = MF.getFrameInfo();
+  const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
+  const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>();
+  if (!RVFI->isPushable(MF) && !RVFI->useSaveRestoreLibCalls(MF))
+    return;
+  const std::vector<CalleeSavedInfo> &CSIs = MFI.getCalleeSavedInfo();
+  std::vector<CalleeSavedInfo> NewCSIs;
+  for (const auto &CSI : CSIs) {
+    // Skip CSRs that have fake a frame index.
+    int ReservedFI = 0;
+    if (TRI->hasReservedSpillSlot(MF, CSI.getReg(), ReservedFI)) {
+      assert(CSI.getFrameIdx() == ReservedFI &&
+             "Reserved CSR spill slot frame index mismatch in CSI");
+      continue;
+    }
+    NewCSIs.push_back(CSI);
+  }
+  MFI.setCalleeSavedInfo(std::move(NewCSIs));
+}
+
 // Not preserve stack space within prologue for outgoing variables when the
 // function contains variable size objects or there are vector objects accessed
 // by the frame pointer.

diff  --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.h b/llvm/lib/Target/RISCV/RISCVFrameLowering.h
index 5c1c7317d24bc..a784479f111b1 100644
--- a/llvm/lib/Target/RISCV/RISCVFrameLowering.h
+++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.h
@@ -37,6 +37,10 @@ class RISCVFrameLowering : public TargetFrameLowering {
   void processFunctionBeforeFrameFinalized(MachineFunction &MF,
                                            RegScavenger *RS) const override;
 
+  void
+  processFunctionBeforeFrameIndicesReplaced(MachineFunction &MF,
+                                            RegScavenger *RS) const override;
+
   bool hasFP(const MachineFunction &MF) const override;
 
   bool hasBP(const MachineFunction &MF) const;

diff  --git a/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir b/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir
new file mode 100644
index 0000000000000..d9ccb490cede0
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir
@@ -0,0 +1,286 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
+# RUN: llc -mtriple=riscv32 -mattr=+zcmp -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
+# RUN: | FileCheck -check-prefixes=CHECK-ZCMP32 %s
+# RUN: llc -mtriple=riscv32 -mattr=+save-restore -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
+# RUN: | FileCheck -check-prefixes=CHECK-LIBCALL32 %s
+# RUN: llc -mtriple=riscv64 -mattr=+zcmp -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
+# RUN: | FileCheck -check-prefixes=CHECK-ZCMP64 %s
+# RUN: llc -mtriple=riscv64 -mattr=+save-restore -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
+# RUN: | FileCheck -check-prefixes=CHECK-LIBCALL64 %s
+# RUN: llc -mtriple=riscv32 -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
+# RUN: | FileCheck -check-prefixes=CHECK-NO-ZCMP32 %s
+# RUN: llc -mtriple=riscv64 -x mir -run-pass=prologepilog -verify-machineinstrs -o - %s \
+# RUN: | FileCheck -check-prefixes=CHECK-NO-ZCMP64 %s
+---
+name: push_rvlist15
+tracksRegLiveness: true
+body:                   |
+  bb.0:
+    ; CHECK-ZCMP32-LABEL: name: push_rvlist15
+    ; CHECK-ZCMP32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
+    ; CHECK-ZCMP32-NEXT: {{  $}}
+    ; CHECK-ZCMP32-NEXT: frame-setup CM_PUSH 15, 0, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -52
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -48
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -44
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -40
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -36
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -32
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -28
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -24
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -20
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -16
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -12
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -8
+    ; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -4
+    ; CHECK-ZCMP32-NEXT: $x1 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x8 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x9 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x18 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x19 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x20 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x21 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x22 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x23 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x24 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x25 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x26 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: $x27 = IMPLICIT_DEF
+    ; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27
+    ; CHECK-ZCMP32-NEXT: PseudoRET
+    ;
+    ; CHECK-LIBCALL32-LABEL: name: push_rvlist15
+    ; CHECK-LIBCALL32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
+    ; CHECK-LIBCALL32-NEXT: {{  $}}
+    ; CHECK-LIBCALL32-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_12
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -12
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -16
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -20
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -24
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -28
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -32
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -36
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -40
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -44
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -48
+    ; CHECK-LIBCALL32-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -52
+    ; CHECK-LIBCALL32-NEXT: $x1 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x8 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x9 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x18 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x19 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x20 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x21 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x22 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x23 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x24 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x25 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x26 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: $x27 = IMPLICIT_DEF
+    ; CHECK-LIBCALL32-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_12, implicit $x2
+    ;
+    ; CHECK-ZCMP64-LABEL: name: push_rvlist15
+    ; CHECK-ZCMP64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
+    ; CHECK-ZCMP64-NEXT: {{  $}}
+    ; CHECK-ZCMP64-NEXT: frame-setup CM_PUSH 15, 0, implicit $x1, implicit $x8, implicit $x9, implicit $x18, implicit $x19, implicit $x20, implicit $x21, implicit $x22, implicit $x23, implicit $x24, implicit $x25, implicit $x26, implicit $x27
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -104
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -96
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -88
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -80
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -72
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -64
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -56
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -48
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -40
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -32
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -24
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -16
+    ; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -8
+    ; CHECK-ZCMP64-NEXT: $x1 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x8 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x9 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x18 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x19 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x20 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x21 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x22 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x23 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x24 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x25 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x26 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: $x27 = IMPLICIT_DEF
+    ; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27
+    ; CHECK-ZCMP64-NEXT: PseudoRET
+    ;
+    ; CHECK-LIBCALL64-LABEL: name: push_rvlist15
+    ; CHECK-LIBCALL64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
+    ; CHECK-LIBCALL64-NEXT: {{  $}}
+    ; CHECK-LIBCALL64-NEXT: $x5 = frame-setup PseudoCALLReg target-flags(riscv-call) &__riscv_save_12
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -24
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -32
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -40
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -48
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -56
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -64
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -72
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -80
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -88
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -96
+    ; CHECK-LIBCALL64-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -104
+    ; CHECK-LIBCALL64-NEXT: $x1 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x8 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x9 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x18 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x19 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x20 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x21 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x22 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x23 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x24 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x25 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x26 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: $x27 = IMPLICIT_DEF
+    ; CHECK-LIBCALL64-NEXT: frame-destroy PseudoTAIL target-flags(riscv-call) &__riscv_restore_12, implicit $x2
+    ;
+    ; CHECK-NO-ZCMP32-LABEL: name: push_rvlist15
+    ; CHECK-NO-ZCMP32: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
+    ; CHECK-NO-ZCMP32-NEXT: {{  $}}
+    ; CHECK-NO-ZCMP32-NEXT: $x2 = frame-setup ADDI $x2, -64
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 64
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x1, $x2, 60 :: (store (s32) into %stack.0)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x8, $x2, 56 :: (store (s32) into %stack.1)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x9, $x2, 52 :: (store (s32) into %stack.2)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x18, $x2, 48 :: (store (s32) into %stack.3)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x19, $x2, 44 :: (store (s32) into %stack.4)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x20, $x2, 40 :: (store (s32) into %stack.5)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x21, $x2, 36 :: (store (s32) into %stack.6)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x22, $x2, 32 :: (store (s32) into %stack.7)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x23, $x2, 28 :: (store (s32) into %stack.8)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x24, $x2, 24 :: (store (s32) into %stack.9)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x25, $x2, 20 :: (store (s32) into %stack.10)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x26, $x2, 16 :: (store (s32) into %stack.11)
+    ; CHECK-NO-ZCMP32-NEXT: SW killed $x27, $x2, 12 :: (store (s32) into %stack.12)
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -12
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -16
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -20
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -24
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -28
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -32
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -36
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -40
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -44
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -48
+    ; CHECK-NO-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -52
+    ; CHECK-NO-ZCMP32-NEXT: $x1 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x8 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x9 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x18 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x19 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x20 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x21 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x22 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x23 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x24 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x25 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x26 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x27 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP32-NEXT: $x1 = LW $x2, 60 :: (load (s32) from %stack.0)
+    ; CHECK-NO-ZCMP32-NEXT: $x8 = LW $x2, 56 :: (load (s32) from %stack.1)
+    ; CHECK-NO-ZCMP32-NEXT: $x9 = LW $x2, 52 :: (load (s32) from %stack.2)
+    ; CHECK-NO-ZCMP32-NEXT: $x18 = LW $x2, 48 :: (load (s32) from %stack.3)
+    ; CHECK-NO-ZCMP32-NEXT: $x19 = LW $x2, 44 :: (load (s32) from %stack.4)
+    ; CHECK-NO-ZCMP32-NEXT: $x20 = LW $x2, 40 :: (load (s32) from %stack.5)
+    ; CHECK-NO-ZCMP32-NEXT: $x21 = LW $x2, 36 :: (load (s32) from %stack.6)
+    ; CHECK-NO-ZCMP32-NEXT: $x22 = LW $x2, 32 :: (load (s32) from %stack.7)
+    ; CHECK-NO-ZCMP32-NEXT: $x23 = LW $x2, 28 :: (load (s32) from %stack.8)
+    ; CHECK-NO-ZCMP32-NEXT: $x24 = LW $x2, 24 :: (load (s32) from %stack.9)
+    ; CHECK-NO-ZCMP32-NEXT: $x25 = LW $x2, 20 :: (load (s32) from %stack.10)
+    ; CHECK-NO-ZCMP32-NEXT: $x26 = LW $x2, 16 :: (load (s32) from %stack.11)
+    ; CHECK-NO-ZCMP32-NEXT: $x27 = LW $x2, 12 :: (load (s32) from %stack.12)
+    ; CHECK-NO-ZCMP32-NEXT: $x2 = frame-destroy ADDI $x2, 64
+    ; CHECK-NO-ZCMP32-NEXT: PseudoRET
+    ;
+    ; CHECK-NO-ZCMP64-LABEL: name: push_rvlist15
+    ; CHECK-NO-ZCMP64: liveins: $x1, $x8, $x9, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27
+    ; CHECK-NO-ZCMP64-NEXT: {{  $}}
+    ; CHECK-NO-ZCMP64-NEXT: $x2 = frame-setup ADDI $x2, -112
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 112
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x1, $x2, 104 :: (store (s64) into %stack.0)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x8, $x2, 96 :: (store (s64) into %stack.1)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x9, $x2, 88 :: (store (s64) into %stack.2)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x18, $x2, 80 :: (store (s64) into %stack.3)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x19, $x2, 72 :: (store (s64) into %stack.4)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x20, $x2, 64 :: (store (s64) into %stack.5)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x21, $x2, 56 :: (store (s64) into %stack.6)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x22, $x2, 48 :: (store (s64) into %stack.7)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x23, $x2, 40 :: (store (s64) into %stack.8)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x24, $x2, 32 :: (store (s64) into %stack.9)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x25, $x2, 24 :: (store (s64) into %stack.10)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x26, $x2, 16 :: (store (s64) into %stack.11)
+    ; CHECK-NO-ZCMP64-NEXT: SD killed $x27, $x2, 8 :: (store (s64) into %stack.12)
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x9, -24
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -32
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -40
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -48
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -56
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -64
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -72
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -80
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -88
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -96
+    ; CHECK-NO-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -104
+    ; CHECK-NO-ZCMP64-NEXT: $x1 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x8 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x9 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x18 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x19 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x20 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x21 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x22 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x23 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x24 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x25 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x26 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x27 = IMPLICIT_DEF
+    ; CHECK-NO-ZCMP64-NEXT: $x1 = LD $x2, 104 :: (load (s64) from %stack.0)
+    ; CHECK-NO-ZCMP64-NEXT: $x8 = LD $x2, 96 :: (load (s64) from %stack.1)
+    ; CHECK-NO-ZCMP64-NEXT: $x9 = LD $x2, 88 :: (load (s64) from %stack.2)
+    ; CHECK-NO-ZCMP64-NEXT: $x18 = LD $x2, 80 :: (load (s64) from %stack.3)
+    ; CHECK-NO-ZCMP64-NEXT: $x19 = LD $x2, 72 :: (load (s64) from %stack.4)
+    ; CHECK-NO-ZCMP64-NEXT: $x20 = LD $x2, 64 :: (load (s64) from %stack.5)
+    ; CHECK-NO-ZCMP64-NEXT: $x21 = LD $x2, 56 :: (load (s64) from %stack.6)
+    ; CHECK-NO-ZCMP64-NEXT: $x22 = LD $x2, 48 :: (load (s64) from %stack.7)
+    ; CHECK-NO-ZCMP64-NEXT: $x23 = LD $x2, 40 :: (load (s64) from %stack.8)
+    ; CHECK-NO-ZCMP64-NEXT: $x24 = LD $x2, 32 :: (load (s64) from %stack.9)
+    ; CHECK-NO-ZCMP64-NEXT: $x25 = LD $x2, 24 :: (load (s64) from %stack.10)
+    ; CHECK-NO-ZCMP64-NEXT: $x26 = LD $x2, 16 :: (load (s64) from %stack.11)
+    ; CHECK-NO-ZCMP64-NEXT: $x27 = LD $x2, 8 :: (load (s64) from %stack.12)
+    ; CHECK-NO-ZCMP64-NEXT: $x2 = frame-destroy ADDI $x2, 112
+    ; CHECK-NO-ZCMP64-NEXT: PseudoRET
+    $x1 = IMPLICIT_DEF
+    $x8 = IMPLICIT_DEF
+    $x9 = IMPLICIT_DEF
+    $x18 = IMPLICIT_DEF
+    $x19 = IMPLICIT_DEF
+    $x20 = IMPLICIT_DEF
+    $x21 = IMPLICIT_DEF
+    $x22 = IMPLICIT_DEF
+    $x23 = IMPLICIT_DEF
+    $x24 = IMPLICIT_DEF
+    $x25 = IMPLICIT_DEF
+    $x26 = IMPLICIT_DEF
+    $x27 = IMPLICIT_DEF
+    PseudoRET
+...


        


More information about the llvm-commits mailing list