[PATCH] D92104: [RegisterScavenging] Fix assert in scavengeRegisterBackwards

Craig Blackmore via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 25 08:03:01 PST 2020


craigblackmore created this revision.
craigblackmore added reviewers: MatzeB, arsenm.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
craigblackmore requested review of this revision.
Herald added a subscriber: wdng.

According to the documentation, if a spill is required to make a
register available and AllowSpill is false, then NoRegister should be
returned, however, this scenario was actually triggering an assertion
failure.

      

This patch moves the assertion after the handling of AllowSpill.

      

Authored by: Lewis Revill


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D92104

Files:
  llvm/lib/CodeGen/RegisterScavenging.cpp


Index: llvm/lib/CodeGen/RegisterScavenging.cpp
===================================================================
--- llvm/lib/CodeGen/RegisterScavenging.cpp
+++ llvm/lib/CodeGen/RegisterScavenging.cpp
@@ -573,7 +573,6 @@
                             RestoreAfter);
   MCPhysReg Reg = P.first;
   MachineBasicBlock::iterator SpillBefore = P.second;
-  assert(Reg != 0 && "No register left to scavenge!");
   // Found an available register?
   if (SpillBefore == MBB.end()) {
     LLVM_DEBUG(dbgs() << "Scavenged free register: " << printReg(Reg, TRI)
@@ -584,6 +583,8 @@
   if (!AllowSpill)
     return 0;
 
+  assert(Reg != 0 && "No register left to scavenge!");
+
   MachineBasicBlock::iterator ReloadAfter =
     RestoreAfter ? std::next(MBBI) : MBBI;
   MachineBasicBlock::iterator ReloadBefore = std::next(ReloadAfter);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92104.307601.patch
Type: text/x-patch
Size: 826 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201125/1af89d08/attachment.bin>


More information about the llvm-commits mailing list