[llvm] r270219 - Skip entries with invalid indexes in the search loop in register scavenger

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Fri May 20 07:18:56 PDT 2016


Author: kparzysz
Date: Fri May 20 09:18:54 2016
New Revision: 270219

URL: http://llvm.org/viewvc/llvm-project?rev=270219&view=rev
Log:
Skip entries with invalid indexes in the search loop in register scavenger

Modified:
    llvm/trunk/lib/CodeGen/RegisterScavenging.cpp

Modified: llvm/trunk/lib/CodeGen/RegisterScavenging.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterScavenging.cpp?rev=270219&r1=270218&r2=270219&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/RegisterScavenging.cpp (original)
+++ llvm/trunk/lib/CodeGen/RegisterScavenging.cpp Fri May 20 09:18:54 2016
@@ -400,11 +400,14 @@ unsigned RegScavenger::scavengeRegister(
   unsigned NeedAlign = RC->getAlignment();
 
   unsigned SI = Scavenged.size(), Diff = UINT_MAX;
+  int FIB = MFI.getObjectIndexBegin(), FIE = MFI.getObjectIndexEnd();
   for (unsigned I = 0; I < Scavenged.size(); ++I) {
     if (Scavenged[I].Reg != 0)
       continue;
     // Verify that this slot is valid for this register.
     int FI = Scavenged[I].FrameIndex;
+    if (FI < FIB || FI >= FIE)
+      continue;
     unsigned S = MFI.getObjectSize(FI);
     unsigned A = MFI.getObjectAlignment(FI);
     if (NeedSize > S || NeedAlign > A)
@@ -425,7 +428,7 @@ unsigned RegScavenger::scavengeRegister(
   if (SI == Scavenged.size()) {
     // We need to scavenge a register but have no spill slot, the target
     // must know how to do it (if not, we'll assert below).
-    Scavenged.push_back(ScavengedInfo());
+    Scavenged.push_back(ScavengedInfo(FIE));
   }
 
   // Avoid infinite regress




More information about the llvm-commits mailing list