[llvm] [InstrRef][AArch64]Add Target hooks for InstrRef on AArch64 (PR #162327)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 7 10:17:33 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
Author: Shubham Sandeep Rastogi (rastogishubham)
<details>
<summary>Changes</summary>
Accordint to llvm/docs/InstrRefDebugInfo.md, to support proper instruction. referecing on any platform, the target specific TargetInstrInfo::isLoadFromStackSlotPostFE and
TargetInstrInfo::isStoreToStackSlotPostFE are needed to be implemented for the Instruction Reference-based LiveDebugValues pass to identify spill and restore instructions.
This patch implements the AArch64 versions of those functions. Namely,
AArch64InstrInfo::isLoadFromStackSlotPostFE and
AArch64InstrInfo::isStoreToStackSlotPostFE.
---
Patch is 2.73 MiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/162327.diff
178 Files Affected:
- (modified) llvm/lib/Target/AArch64/AArch64InstrInfo.cpp (+53-11)
- (modified) llvm/lib/Target/AArch64/AArch64InstrInfo.h (+9)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-128.ll (+36-36)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll (+676-676)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/atomic-anyextending-load-crash.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/byval-call.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-tail-call-fallback.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-stack-protector-windows.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/select-fp-anyext-crash.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll (+177-177)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/stacksave-stackrestore.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/swifterror.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/aarch64-fastcc-stackup.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/aarch64-mops.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/addsub-constant-folding.ll (+36-36)
- (modified) llvm/test/CodeGen/AArch64/alias_mask_scalable.ll (+72-72)
- (modified) llvm/test/CodeGen/AArch64/alias_mask_scalable_nosve2.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/argument-blocks-array-of-struct.ll (+7-7)
- (modified) llvm/test/CodeGen/AArch64/arm64-fp128.ll (+215-215)
- (modified) llvm/test/CodeGen/AArch64/arm64-memset-inline.ll (+34-34)
- (modified) llvm/test/CodeGen/AArch64/arm64-neon-mul-div.ll (+16-16)
- (modified) llvm/test/CodeGen/AArch64/arm64-register-pairing.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/arm64-windows-calls.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/arm64ec-entry-thunks.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/arm64ec-reservedregs.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/arm64ec-varargs.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/atomicrmw-O0.ll (+132-132)
- (modified) llvm/test/CodeGen/AArch64/atomicrmw-fadd.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/atomicrmw-fsub.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/cmp-select-sign.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/combine-storetomstore.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/exception-handling-windows-elf.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/fadd-combines.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/fcmp-fp128.ll (+44-44)
- (modified) llvm/test/CodeGen/AArch64/fcmp.ll (+63-63)
- (modified) llvm/test/CodeGen/AArch64/fexplog.ll (+1500-1500)
- (modified) llvm/test/CodeGen/AArch64/fold-int-pow2-with-fmul-or-fdiv.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/fp8-sme2-cvtn.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/fpclamptosat_vec.ll (+144-144)
- (modified) llvm/test/CodeGen/AArch64/fpext.ll (+56-56)
- (modified) llvm/test/CodeGen/AArch64/fpow.ll (+310-310)
- (modified) llvm/test/CodeGen/AArch64/fpowi.ll (+260-260)
- (modified) llvm/test/CodeGen/AArch64/fptoi.ll (+200-200)
- (modified) llvm/test/CodeGen/AArch64/fptosi-sat-scalar.ll (+29-29)
- (modified) llvm/test/CodeGen/AArch64/fptosi-sat-vector.ll (+270-270)
- (modified) llvm/test/CodeGen/AArch64/fptoui-sat-scalar.ll (+27-27)
- (modified) llvm/test/CodeGen/AArch64/fptoui-sat-vector.ll (+176-176)
- (modified) llvm/test/CodeGen/AArch64/fptrunc.ll (+39-39)
- (modified) llvm/test/CodeGen/AArch64/framelayout-sve-calleesaves-fix.mir (+2-2)
- (modified) llvm/test/CodeGen/AArch64/frem-power2.ll (+22-22)
- (modified) llvm/test/CodeGen/AArch64/frem.ll (+310-310)
- (modified) llvm/test/CodeGen/AArch64/fsincos.ll (+600-600)
- (modified) llvm/test/CodeGen/AArch64/implicit-def-subreg-to-reg-regression.ll (+3-3)
- (modified) llvm/test/CodeGen/AArch64/insertextract.ll (+30-30)
- (modified) llvm/test/CodeGen/AArch64/intrinsic-vector-match-sve2.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/itofp.ll (+248-248)
- (modified) llvm/test/CodeGen/AArch64/ldexp.ll (+10-10)
- (modified) llvm/test/CodeGen/AArch64/ldst-paired-aliasing.ll (+3-3)
- (modified) llvm/test/CodeGen/AArch64/llvm.exp10.ll (+134-134)
- (modified) llvm/test/CodeGen/AArch64/llvm.frexp.ll (+167-167)
- (modified) llvm/test/CodeGen/AArch64/llvm.modf.ll (+49-49)
- (modified) llvm/test/CodeGen/AArch64/llvm.sincos.ll (+83-83)
- (modified) llvm/test/CodeGen/AArch64/llvm.sincospi.ll (+21-21)
- (modified) llvm/test/CodeGen/AArch64/luti-with-sme2.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/machine-combiner.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-non-leaf.ll (+14-12)
- (modified) llvm/test/CodeGen/AArch64/mingw-refptr.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/named-vector-shuffle-reverse-neon.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/named-vector-shuffle-reverse-sve.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/neon-dotreduce.ll (+34-34)
- (modified) llvm/test/CodeGen/AArch64/nontemporal.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/outlining-with-streaming-mode-changes.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/perm-tb-with-sme2.ll (+14-14)
- (modified) llvm/test/CodeGen/AArch64/pow.ll (+18-18)
- (modified) llvm/test/CodeGen/AArch64/pr135821.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/pr142314.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/pr48188.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/pr53315-returned-i128.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/pr58516.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/preserve_nonecc_call.ll (+10-10)
- (modified) llvm/test/CodeGen/AArch64/preserve_nonecc_varargs_aapcs.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/preserve_nonecc_varargs_win64.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/ragreedy-csr.ll (+16-16)
- (modified) llvm/test/CodeGen/AArch64/ragreedy-local-interval-cost.ll (+7-7)
- (modified) llvm/test/CodeGen/AArch64/rem.ll (+152-152)
- (modified) llvm/test/CodeGen/AArch64/settag-merge.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/settag.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sibling-call.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/sincos-stack-slots.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/sls-stackprotector-outliner.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/sme-agnostic-za.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/sme-call-streaming-compatible-to-normal-fn-wihout-sme-attr.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sme-callee-save-restore-pairs.ll (+144-144)
- (modified) llvm/test/CodeGen/AArch64/sme-darwin-sve-vg.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/sme-disable-gisel-fisel.ll (+48-48)
- (modified) llvm/test/CodeGen/AArch64/sme-lazy-save-call.ll (+18-18)
- (modified) llvm/test/CodeGen/AArch64/sme-lazy-save-windows.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sme-must-save-lr-for-vg.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/sme-new-za-function.ll (+21-21)
- (modified) llvm/test/CodeGen/AArch64/sme-peephole-opts.ll (+53-53)
- (modified) llvm/test/CodeGen/AArch64/sme-pstate-sm-changing-call-disable-coalescing.ll (+120-120)
- (modified) llvm/test/CodeGen/AArch64/sme-streaming-body.ll (+22-22)
- (modified) llvm/test/CodeGen/AArch64/sme-streaming-checkvl.ll (+38-38)
- (modified) llvm/test/CodeGen/AArch64/sme-streaming-compatible-interface.ll (+60-60)
- (modified) llvm/test/CodeGen/AArch64/sme-streaming-interface.ll (+66-66)
- (modified) llvm/test/CodeGen/AArch64/sme-streaming-mode-changes-unwindinfo.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/sme-streaming-mode-changing-call-disable-stackslot-scavenging.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/sme-vg-to-stack.ll (+71-71)
- (modified) llvm/test/CodeGen/AArch64/sme-za-control-flow.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/sme-za-exceptions.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/sme-zt0-state.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/sme2-fp8-intrinsics-cvt.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sme2-intrinsics-int-dots.ll (+36-36)
- (modified) llvm/test/CodeGen/AArch64/sme2-intrinsics-ld1.ll (+64-64)
- (modified) llvm/test/CodeGen/AArch64/sme2-intrinsics-ldnt1.ll (+64-64)
- (modified) llvm/test/CodeGen/AArch64/sme2-intrinsics-qcvt.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sme2-intrinsics-qrshr.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sme2-intrinsics-vdot.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/split-sve-stack-frame-layout.ll (+81-79)
- (modified) llvm/test/CodeGen/AArch64/stack-hazard-defaults.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/stack-hazard-windows.ll (+20-20)
- (modified) llvm/test/CodeGen/AArch64/stack-hazard.ll (+683-683)
- (modified) llvm/test/CodeGen/AArch64/stack-probing-dynamic.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/stack-probing-sve.ll (+14-14)
- (modified) llvm/test/CodeGen/AArch64/stack-probing.ll (+1-1)
- (modified) llvm/test/CodeGen/AArch64/statepoint-call-lowering.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/streaming-compatible-memory-ops.ll (+10-10)
- (modified) llvm/test/CodeGen/AArch64/sve-alloca.ll (+24-24)
- (modified) llvm/test/CodeGen/AArch64/sve-callee-save-restore-pairs.ll (+120-120)
- (modified) llvm/test/CodeGen/AArch64/sve-calling-convention-mixed.ll (+48-48)
- (modified) llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sve-fixed-ld2-alloca.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sve-fixed-length-fp128.ll (+20-20)
- (modified) llvm/test/CodeGen/AArch64/sve-fixed-length-frame-offests-crash.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sve-fixed-vector-llrint.ll (+70-70)
- (modified) llvm/test/CodeGen/AArch64/sve-fixed-vector-lrint.ll (+126-126)
- (modified) llvm/test/CodeGen/AArch64/sve-fptosi-sat.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/sve-fptoui-sat.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sve-insert-vector.ll (+32-32)
- (modified) llvm/test/CodeGen/AArch64/sve-llrint.ll (+114-114)
- (modified) llvm/test/CodeGen/AArch64/sve-lrint.ll (+114-114)
- (modified) llvm/test/CodeGen/AArch64/sve-pred-arith.ll (+20-20)
- (modified) llvm/test/CodeGen/AArch64/sve-stack-frame-layout.ll (+33-33)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-fp-fma.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-fp-to-int.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-mulh.ll (+56-56)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-to-fp.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-vselect.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-ld2-alloca.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-masked-load.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-trunc.ll (+258-258)
- (modified) llvm/test/CodeGen/AArch64/sve-tailcall.ll (+48-48)
- (modified) llvm/test/CodeGen/AArch64/sve-trunc.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/sve2p1-intrinsics-loads.ll (+144-144)
- (modified) llvm/test/CodeGen/AArch64/sve2p1-intrinsics-predicate-as-counter.ll (+16-16)
- (modified) llvm/test/CodeGen/AArch64/sve2p1-intrinsics-selx2.ll (+16-16)
- (modified) llvm/test/CodeGen/AArch64/sve2p1-intrinsics-selx4.ll (+16-16)
- (modified) llvm/test/CodeGen/AArch64/sve2p1-intrinsics-stores.ll (+64-64)
- (modified) llvm/test/CodeGen/AArch64/swift-async-win.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/swifterror.ll (+232-232)
- (modified) llvm/test/CodeGen/AArch64/trampoline.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/unwind-preserved.ll (+80-80)
- (modified) llvm/test/CodeGen/AArch64/vec-libcalls.ll (+156-156)
- (modified) llvm/test/CodeGen/AArch64/veclib-llvm.modf.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/vecreduce-fadd-legalization-strict.ll (+12-12)
- (modified) llvm/test/CodeGen/AArch64/vecreduce-fmax-legalization.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/vecreduce-fmin-legalization.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/vector-llrint.ll (+84-84)
- (modified) llvm/test/CodeGen/AArch64/vector-lrint.ll (+172-172)
- (modified) llvm/test/CodeGen/AArch64/win-sve.ll (+227-227)
- (modified) llvm/test/CodeGen/AArch64/win64-fpowi.ll (+16-16)
- (modified) llvm/test/CodeGen/AArch64/win64_vararg.ll (+6-6)
- (modified) llvm/test/CodeGen/AArch64/win64_vararg2.ll (+8-8)
- (modified) llvm/test/CodeGen/AArch64/win64_vararg_float.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/win64_vararg_float_cc.ll (+4-4)
- (modified) llvm/test/CodeGen/AArch64/win64cc-backup-x18.ll (+2-2)
- (modified) llvm/test/CodeGen/AArch64/wincfi-missing-seh-directives.ll (+3-3)
``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index b8761d971a67d..20efc2b8884c2 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -2357,11 +2357,10 @@ bool AArch64InstrInfo::isFPRCopy(const MachineInstr &MI) {
return false;
}
-Register AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
- int &FrameIndex) const {
- switch (MI.getOpcode()) {
+static bool isFrameLoadOpcode(int Opcode) {
+ switch (Opcode) {
default:
- break;
+ return false;
case AArch64::LDRWui:
case AArch64::LDRXui:
case AArch64::LDRBui:
@@ -2370,22 +2369,26 @@ Register AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
case AArch64::LDRDui:
case AArch64::LDRQui:
case AArch64::LDR_PXI:
+ return true;
+ }
+}
+
+Register AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
+ int &FrameIndex) const {
+ if (isFrameLoadOpcode(MI.getOpcode())) {
if (MI.getOperand(0).getSubReg() == 0 && MI.getOperand(1).isFI() &&
MI.getOperand(2).isImm() && MI.getOperand(2).getImm() == 0) {
FrameIndex = MI.getOperand(1).getIndex();
return MI.getOperand(0).getReg();
}
- break;
}
-
return 0;
}
-Register AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
- int &FrameIndex) const {
- switch (MI.getOpcode()) {
+static bool isFrameStoreOpcode(int Opcode) {
+ switch (Opcode) {
default:
- break;
+ return false;
case AArch64::STRWui:
case AArch64::STRXui:
case AArch64::STRBui:
@@ -2394,16 +2397,55 @@ Register AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
case AArch64::STRDui:
case AArch64::STRQui:
case AArch64::STR_PXI:
+ return true;
+ }
+}
+
+Register AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
+ int &FrameIndex) const {
+ if (isFrameStoreOpcode(MI.getOpcode())) {
if (MI.getOperand(0).getSubReg() == 0 && MI.getOperand(1).isFI() &&
MI.getOperand(2).isImm() && MI.getOperand(2).getImm() == 0) {
FrameIndex = MI.getOperand(1).getIndex();
return MI.getOperand(0).getReg();
}
- break;
}
return 0;
}
+Register AArch64InstrInfo::isStoreToStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const {
+ if (isFrameStoreOpcode(MI.getOpcode())) {
+ SmallVector<const MachineMemOperand *, 1> Accesses;
+ if (Register Reg = isStoreToStackSlot(MI, FrameIndex))
+ return Reg;
+
+ if (hasStoreToStackSlot(MI, Accesses)) {
+ FrameIndex =
+ cast<FixedStackPseudoSourceValue>(Accesses.front()->getPseudoValue())
+ ->getFrameIndex();
+ return 1;
+ }
+ }
+ return Register();
+}
+
+Register AArch64InstrInfo::isLoadFromStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const {
+ if (isFrameLoadOpcode(MI.getOpcode())) {
+ if (Register Reg = isLoadFromStackSlot(MI, FrameIndex))
+ return Reg;
+ SmallVector<const MachineMemOperand *, 1> Accesses;
+ if (hasLoadFromStackSlot(MI, Accesses)) {
+ FrameIndex =
+ cast<FixedStackPseudoSourceValue>(Accesses.front()->getPseudoValue())
+ ->getFrameIndex();
+ return 1;
+ }
+ }
+ return Register();
+}
+
/// Check all MachineMemOperands for a hint to suppress pairing.
bool AArch64InstrInfo::isLdStPairSuppressed(const MachineInstr &MI) {
return llvm::any_of(MI.memoperands(), [](MachineMemOperand *MMO) {
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.h b/llvm/lib/Target/AArch64/AArch64InstrInfo.h
index 179574a73aa01..44863eb2f6d95 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.h
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.h
@@ -205,6 +205,15 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
Register isStoreToStackSlot(const MachineInstr &MI,
int &FrameIndex) const override;
+ /// isStoreToStackSlotPostFE - Check for post-frame ptr elimination
+ /// stack locations as well. This uses a heuristic so it isn't
+ /// reliable for correctness.
+ Register isStoreToStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const override;
+
+ Register isLoadFromStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const override;
+
/// Does this instruction set its full destination register to zero?
static bool isGPRZero(const MachineInstr &MI);
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-128.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-128.ll
index 1fe63c9be8c62..be51210882eaa 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-128.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-128.ll
@@ -89,23 +89,23 @@ define void @val_compare_and_swap(ptr %p, i128 %oldval, i128 %newval) {
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap:
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
;
@@ -113,9 +113,9 @@ define void @val_compare_and_swap(ptr %p, i128 %oldval, i128 %newval) {
; CHECK-CAS-O0: // %bb.0:
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
-; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
+; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
; CHECK-CAS-O0-NEXT: mov x1, x5
-; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
+; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
; CHECK-CAS-O0-NEXT: mov x3, x5
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -216,23 +216,23 @@ define void @val_compare_and_swap_monotonic_seqcst(ptr %p, i128 %oldval, i128 %n
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_monotonic_seqcst:
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq_rel
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
;
@@ -240,9 +240,9 @@ define void @val_compare_and_swap_monotonic_seqcst(ptr %p, i128 %oldval, i128 %n
; CHECK-CAS-O0: // %bb.0:
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
-; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
+; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
; CHECK-CAS-O0-NEXT: mov x1, x5
-; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
+; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
; CHECK-CAS-O0-NEXT: mov x3, x5
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -343,23 +343,23 @@ define void @val_compare_and_swap_release_acquire(ptr %p, i128 %oldval, i128 %ne
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_release_acquire:
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq_rel
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
;
@@ -367,9 +367,9 @@ define void @val_compare_and_swap_release_acquire(ptr %p, i128 %oldval, i128 %ne
; CHECK-CAS-O0: // %bb.0:
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
-; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
+; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
; CHECK-CAS-O0-NEXT: mov x1, x5
-; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
+; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
; CHECK-CAS-O0-NEXT: mov x3, x5
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -470,23 +470,23 @@ define void @val_compare_and_swap_monotonic(ptr %p, i128 %oldval, i128 %newval)
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_monotonic:
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq_rel
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
;
@@ -494,9 +494,9 @@ define void @val_compare_and_swap_monotonic(ptr %p, i128 %oldval, i128 %newval)
; CHECK-CAS-O0: // %bb.0:
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
-; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
+; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
; CHECK-CAS-O0-NEXT: mov x1, x5
-; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
+; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
; CHECK-CAS-O0-NEXT: mov x3, x5
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -580,22 +580,22 @@ define void @atomic_load_relaxed(i64, i64, ptr %p, ptr %p2) {
; CHECK-OUTLINE-LLSC-O0-LABEL: atomic_load_relaxed:
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x4, x2
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, xzr
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_relax
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x3, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x3, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x0
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x3]
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
;
@@ -690,17 +690,17 @@ define i128 @val_compare_and_swap_return(ptr %p, i128 %oldval, i128 %newval) {
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_return:
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
-; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
+; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq
-; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
;
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll
index e6bf3ab674717..3f51ec747182a 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll
@@ -56,10 +56,10 @@ define i32 @val_compare_and_swap(ptr %p, i32 %cmp, i32 %new) #0 {
; CHECK-OUTLINE-O0: ; %bb.0:
; CHECK-OUTLINE-O0-NEXT: sub sp, sp, #32
; CHECK-OUTLINE-O0-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Folded Spill
+; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Spill
; CHECK-OUTLINE-O0-NEXT: mov w0, w1
; CHECK-OUTLINE-O0-NEXT: mov w1, w2
-; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Folded Reload
+; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Reload
; CHECK-OUTLINE-O0-NEXT: bl ___aarch64_cas4_acq
; CHECK-OUTLINE-O0-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
; CHECK-OUTLINE-O0-NEXT: add sp, sp, #32
@@ -133,10 +133,10 @@ define i32 @val_compare_and_swap_from_load(ptr %p, i32 %cmp, ptr %pnew) #0 {
; CHECK-OUTLINE-O0: ; %bb.0:
; CHECK-OUTLINE-O0-NEXT: sub sp, sp, #32
; CHECK-OUTLINE-O0-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Folded Spill
+; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Spill
; CHECK-OUTLINE-O0-NEXT: mov w0, w1
; CHECK-OUTLINE-O0-NEXT: mov x8, x2
-; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Folded Reload
+; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Reload
; CHECK-OUTLINE-O0-NEXT: ldr w1, [x8]
; CHECK-OUTLINE-O0-NEXT: bl ___aarch64_cas4_acq
; CHECK-OUTLINE-O0-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
@@ -211,10 +211,10 @@ define i32 @val_compare_and_swap_rel(ptr %p, i32 %cmp, i32 %new) #0 {
; CHECK-OUTLINE-O0: ; %bb.0:
; CHECK-OUTLINE-O0-NEXT: sub sp, sp, #32
; CHECK-OUTLINE-O0-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Folded Spill
+; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Spill
; CHECK-OUTLINE-O0-NEXT: mov w0, w1
; CHECK-OUTLINE-O0-NEXT: mov w1, w2
-; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Folded Reload
+; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Reload
; CHECK-OUTLINE-O0-NEXT: bl ___aarch64_cas4_acq_rel
; CHECK-OUTLINE-O0-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
; CHECK-OUTLINE-O0-NEXT: add sp, sp, #32
@@ -285,10 +285,10 @@ define i64 @val_compare_and_swap_64(ptr %p, i64 %cmp, i64 %new) #0 {
; CHECK-OUTLINE-O0: ; %bb.0:
; CHECK-OUTLINE-O0-NEXT: sub sp, sp, #32
; CHECK-OUTLINE-O0-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Folded Spill
+; CHECK-OUTLINE-O0-NEXT: str x0, [sp, #8] ; 8-byte Spill
; CHECK-OUTLINE-O0-NEXT: mov x0, x1
; CHECK-OUTLINE-O0-NEXT: mov x1, x2
-; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Folded Reload
+; CHECK-OUTLINE-O0-NEXT: ldr x2, [sp, #8] ; 8-byte Reload
; CHECK-OUTLINE-O0-NEXT: bl ___aarch64_cas8_relax
; CHECK-OUTLINE-O0-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
; CHECK-OUTLINE-O0-NEXT: ...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/162327
More information about the llvm-commits
mailing list