[llvm] [AArch64] Disable red-zone when lowering Q-reg copy through memory. (PR #94962)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 10 04:10:57 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
Author: Sander de Smalen (sdesmalen-arm)
<details>
<summary>Changes</summary>
This was pointed out in PR #<!-- -->93940.
---
Full diff: https://github.com/llvm/llvm-project/pull/94962.diff
1 Files Affected:
- (modified) llvm/lib/Target/AArch64/AArch64FrameLowering.cpp (+8-1)
``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
index cd532671f5018..65e3bbf4e9c35 100644
--- a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
@@ -431,8 +431,15 @@ bool AArch64FrameLowering::canUseRedZone(const MachineFunction &MF) const {
const AArch64FunctionInfo *AFI = MF.getInfo<AArch64FunctionInfo>();
uint64_t NumBytes = AFI->getLocalStackSize();
+ // If neither NEON or SVE are available, a COPY from one Q-reg to
+ // another requires a spill -> reload sequence. We can do that
+ // using a pre-decrementing store/post-decrementing load, but
+ // if we do so, we can't use the Red Zone.
+ bool LowerQRegCopyThroughMem =
+ !Subtarget.isNeonAvailable() && !Subtarget.hasSVE();
+
return !(MFI.hasCalls() || hasFP(MF) || NumBytes > RedZoneSize ||
- getSVEStackSize(MF));
+ getSVEStackSize(MF) || LowerQRegCopyThroughMem);
}
/// hasFP - Return true if the specified function should have a dedicated frame
``````````
</details>
https://github.com/llvm/llvm-project/pull/94962
More information about the llvm-commits
mailing list