[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