[llvm] [llvm][PowerPC] Correct handling of spill slots for SPE when EXPENSIVE_CHECKS is enabled (PR #73940)
David Spickett via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 30 05:57:41 PST 2023
https://github.com/DavidSpickett created https://github.com/llvm/llvm-project/pull/73940
This was modifying a container as it iterated it, which tripped a check in libstdc++'s debug checks.
Instead, just assign to the item via the reference we already have.
This fixes the following expensive checks failures on my machine:
LLVM :: CodeGen/PowerPC/fp-strict.ll
LLVM :: CodeGen/PowerPC/pr55463.ll
LLVM :: CodeGen/PowerPC/register-pressure.ll
LLVM :: CodeGen/PowerPC/spe.ll
Which are some of the tests noted by #68594.
>From dff5241f03b0a54775bfb018777d799d0b294a35 Mon Sep 17 00:00:00 2001
From: David Spickett <david.spickett at linaro.org>
Date: Thu, 30 Nov 2023 13:40:20 +0000
Subject: [PATCH] [llvm][PowerPC] Correct handling of spill slots for SPE when
EXPENSIVE_CHECKS is enabled
This was modifying a container as it iterated it, which tripped a
check in libstdc++'s debug checks.
Instead, just assign to the item via the reference we already have.
This fixes the following expensive checks failures on my machine:
LLVM :: CodeGen/PowerPC/fp-strict.ll
LLVM :: CodeGen/PowerPC/pr55463.ll
LLVM :: CodeGen/PowerPC/register-pressure.ll
LLVM :: CodeGen/PowerPC/spe.ll
Which are some of the tests noted by #68594.
---
llvm/lib/Target/PowerPC/PPCFrameLowering.cpp | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
index eb3bf3b2690b227..9f38a82e946f5c5 100644
--- a/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
@@ -2334,24 +2334,16 @@ bool PPCFrameLowering::assignCalleeSavedSpillSlots(
// In case of SPE we only have SuperRegs and CRs
// in our CalleSaveInfo vector.
- unsigned Idx = 0;
for (auto &CalleeSaveReg : CSI) {
const MCPhysReg &Reg = CalleeSaveReg.getReg();
const MCPhysReg &Lower = RegInfo->getSubReg(Reg, 1);
const MCPhysReg &Higher = RegInfo->getSubReg(Reg, 2);
- // Check only for SuperRegs.
- if (Lower) {
- if (MRI.isPhysRegModified(Higher)) {
- Idx++;
- continue;
- } else {
+ if ( // Check only for SuperRegs.
+ Lower &&
// Replace Reg if only lower-32 bits modified
- CSI.erase(CSI.begin() + Idx);
- CSI.insert(CSI.begin() + Idx, CalleeSavedInfo(Lower));
- }
- }
- Idx++;
+ !MRI.isPhysRegModified(Higher))
+ CalleeSaveReg = CalleeSavedInfo(Lower);
}
}
More information about the llvm-commits
mailing list