From: Alkis Evlogimenos Date: Thu, 18 Dec 2003 08:53:43 +0000 (+0000) Subject: When a variable is killed and redifined in a basic block only one X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=43f692f90f6b27304570e1b1807542dff4b8e847;p=oota-llvm.git When a variable is killed and redifined in a basic block only one killing instruction is tracked. This causes the LiveIntervals to create bogus intervals. The workaound is to add a range to the interval from the redefinition to the end of the basic block. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10510 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 564d9cd384a..e5171ad5c48 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -152,11 +152,14 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock* mbb, for (int i = 0, e = vi.Kills.size(); i != e; ++i) { MachineBasicBlock* killerBlock = vi.Kills[i].first; MachineInstr* killerInstr = vi.Kills[i].second; - killedInDefiningBasicBlock |= mbb == killerBlock; unsigned start = (mbb == killerBlock ? instrIndex : getInstructionIndex(killerBlock->front())); unsigned end = getInstructionIndex(killerInstr) + 1; + if (start < end) { + killedInDefiningBasicBlock |= mbb == killerBlock; + interval->addRange(start, end); + } } if (!killedInDefiningBasicBlock) {