summaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveIntervalAnalysis.cpp
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-03-07 18:56:16 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-03-07 18:56:16 +0000
commita9d5c2715b5e8e0be613d8d31e76c35a5bfff07d (patch)
treed53d3f34e24e4bb9932e2faaaefbac7b27377174 /lib/CodeGen/LiveIntervalAnalysis.cpp
parent6154f6c9292179fab6346ae8336f2ad790b52028 (diff)
downloadllvm-a9d5c2715b5e8e0be613d8d31e76c35a5bfff07d.tar.gz
llvm-a9d5c2715b5e8e0be613d8d31e76c35a5bfff07d.tar.bz2
llvm-a9d5c2715b5e8e0be613d8d31e76c35a5bfff07d.tar.xz
Handle the special case of registers begin redefined by early-clobber defs.
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
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r--lib/CodeGen/LiveIntervalAnalysis.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index d326729920..4dda548548 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -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.