[PATCH] D81821: [AMDGPU] Make overlaps with ScratchRSrcReg fatal errors
Carl Ritson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 14 21:51:44 PDT 2020
critson created this revision.
critson added reviewers: dstuttard, arsenm, rampitec.
Herald added subscribers: llvm-commits, kerbowa, hiraditya, t-tye, tpr, yaxunl, nhaehnle, wdng, jvesely, kzhuravl.
Herald added a project: LLVM.
Overlaps of these will always result in bad code.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D81821
Files:
llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
Index: llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
+++ llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
@@ -327,6 +327,12 @@
// Reserve 4 SGPRs for the scratch buffer resource descriptor in case we need
// to spill.
// TODO: May need to reserve a VGPR if doing LDS spilling.
+ const MachineRegisterInfo &MRI = MF.getRegInfo();
+ for (unsigned i = 0; i < 4; ++i) {
+ Register SubReg = getSubReg(ScratchRSrcReg, getSubRegFromChannel(i));
+ if (MRI.isLiveIn(SubReg))
+ report_fatal_error("scratch resource registers overlap live in");
+ }
reserveRegisterTuples(Reserved, ScratchRSrcReg);
}
@@ -336,20 +342,23 @@
MCRegister StackPtrReg = MFI->getStackPtrOffsetReg();
if (StackPtrReg) {
+ if (isSubRegister(ScratchRSrcReg, StackPtrReg))
+ report_fatal_error("scratch resource registers overlap stack pointer");
reserveRegisterTuples(Reserved, StackPtrReg);
- assert(!isSubRegister(ScratchRSrcReg, StackPtrReg));
}
MCRegister FrameReg = MFI->getFrameOffsetReg();
if (FrameReg) {
+ if (isSubRegister(ScratchRSrcReg, FrameReg))
+ report_fatal_error("scratch resource registers overlap frame offset");
reserveRegisterTuples(Reserved, FrameReg);
- assert(!isSubRegister(ScratchRSrcReg, FrameReg));
}
if (hasBasePointer(MF)) {
MCRegister BasePtrReg = getBaseRegister();
+ if (isSubRegister(ScratchRSrcReg, BasePtrReg))
+ report_fatal_error("scratch resource registers overlap base pointer");
reserveRegisterTuples(Reserved, BasePtrReg);
- assert(!isSubRegister(ScratchRSrcReg, BasePtrReg));
}
for (MCRegister Reg : MFI->WWMReservedRegs) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81821.270658.patch
Type: text/x-patch
Size: 1772 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200615/39a1672c/attachment.bin>
More information about the llvm-commits
mailing list