Handle the special case of registers begin redefined by early-clobber defs.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 7 Mar 2011 18:56:16 +0000 (18:56 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 7 Mar 2011 18:56:16 +0000 (18:56 +0000)
In this case, the value need to be available at the load index instead of the
normal use index.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127167 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index d326729920478ace01b3b650ec229eaac8b43ba1..4dda5485488338244e0e46c921b54bf7062a4599 100644 (file)
@@ -779,6 +779,13 @@ void LiveIntervals::shrinkToUses(LiveInterval *li) {
     if (VNI->isUnused())
       continue;
     NewLI.addRange(LiveRange(VNI->def, VNI->def.getNextSlot(), VNI));
+
+    // A use tied to an early-clobber def ends at the load slot and isn't caught
+    // above. Catch it here instead. This probably only ever happens for inline
+    // assembly.
+    if (VNI->def.isUse())
+      if (VNInfo *UVNI = li->getVNInfoAt(VNI->def.getLoadIndex()))
+        WorkList.push_back(std::make_pair(VNI->def.getLoadIndex(), UVNI));
   }
 
   // Keep track of the PHIs that are in use.