[llvm-commits] [llvm] r77912 - in /llvm/trunk: lib/CodeGen/RegisterScavenging.cpp test/CodeGen/Blackfin/addsub-i128.ll

Jakob Stoklund Olesen stoklund at 2pi.dk
Sun Aug 2 13:29:41 PDT 2009


Author: stoklund
Date: Sun Aug  2 15:29:41 2009
New Revision: 77912

URL: http://llvm.org/viewvc/llvm-project?rev=77912&view=rev
Log:
Fix issue in regscavenger when scavenging a callee-saved register that has not been spilled.

Modified:
    llvm/trunk/lib/CodeGen/RegisterScavenging.cpp
    llvm/trunk/test/CodeGen/Blackfin/addsub-i128.ll

Modified: llvm/trunk/lib/CodeGen/RegisterScavenging.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterScavenging.cpp?rev=77912&r1=77911&r2=77912&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/RegisterScavenging.cpp (original)
+++ llvm/trunk/lib/CodeGen/RegisterScavenging.cpp Sun Aug  2 15:29:41 2009
@@ -471,9 +471,16 @@
     Reg = Candidates.find_next(Reg);
   }
 
-  assert(ScavengedReg == 0 && 
+  assert(ScavengedReg == 0 &&
          "Scavenger slot is live, unable to scavenge another register!");
 
+  // Make sure SReg is marked as used. It could be considered available if it is
+  // one of the callee saved registers, but hasn't been spilled.
+  if (!isUsed(SReg)) {
+    MBB->addLiveIn(SReg);
+    setUsed(SReg);
+  }
+
   // Spill the scavenged register before I.
   TII->storeRegToStackSlot(*MBB, I, SReg, true, ScavengingFrameIndex, RC);
   MachineBasicBlock::iterator II = prior(I);

Modified: llvm/trunk/test/CodeGen/Blackfin/addsub-i128.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Blackfin/addsub-i128.ll?rev=77912&r1=77911&r2=77912&view=diff

==============================================================================
--- llvm/trunk/test/CodeGen/Blackfin/addsub-i128.ll (original)
+++ llvm/trunk/test/CodeGen/Blackfin/addsub-i128.ll Sun Aug  2 15:29:41 2009
@@ -1,7 +1,7 @@
 ; RUN: llvm-as < %s | llc -march=bfin -verify-machineinstrs
-; XFAIL: *
-; Assertion failed: (isUsed(Reg) && "Using an undefined register!"),
-; function forward, file RegisterScavenging.cpp, line 182.
+
+; These functions have just the right size to annoy the register scavenger: They
+; use all the scratch registers, but not all the callee-saved registers.
 
 define void @test_add(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) {
 entry:





More information about the llvm-commits mailing list