From a9d5c2715b5e8e0be613d8d31e76c35a5bfff07d Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Mon, 7 Mar 2011 18:56:16 +0000 Subject: [PATCH] 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 --- lib/CodeGen/LiveIntervalAnalysis.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index d3267299204..4dda5485488 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.