Do not construct location list backword!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104705 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2010-05-26 17:29:32 +00:00
parent ca561ffcf3
commit e2df84254d

View File

@ -2215,22 +2215,26 @@ void DwarfDebug::collectVariableInfo(const MachineFunction *MF) {
RegVar->setDotDebugLocOffset(DotDebugLocEntries.size()); RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
if (DotDebugLocEntries.empty()) if (DotDebugLocEntries.empty())
DotDebugLocEntries.push_back(DotDebugLocEntry()); DotDebugLocEntries.push_back(DotDebugLocEntry());
const MachineInstr *Current = MultipleValues.back(); const MachineInstr *Begin = NULL;
MultipleValues.pop_back(); const MachineInstr *End = NULL;
while (!MultipleValues.empty()) { for (SmallVector<const MachineInstr *, 4>::iterator
const MachineInstr *Next = MultipleValues.back(); MVI = MultipleValues.begin(), MVE = MultipleValues.end(); MVI != MVE; ++MVI) {
MultipleValues.pop_back(); if (!Begin) {
DbgValueStartMap[Next] = RegVar; Begin = *MVI;
continue;
}
End = *MVI;
DbgValueStartMap[End] = RegVar;
MachineLocation MLoc; MachineLocation MLoc;
MLoc.set(Current->getOperand(0).getReg(), 0); MLoc.set(Begin->getOperand(0).getReg(), 0);
const MCSymbol *FLabel = getLabelBeforeInsn(Next); const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
const MCSymbol *SLabel = getLabelBeforeInsn(Current); const MCSymbol *SLabel = getLabelBeforeInsn(End);
DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc)); DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc));
Current = Next; Begin = End;
if (MultipleValues.empty()) { if (MVI + 1 == MVE) {
// If Next is the last instruction then its value is valid // If End is the last instruction then its value is valid
// until the end of the funtion. // until the end of the funtion.
MLoc.set(Next->getOperand(0).getReg(), 0); MLoc.set(End->getOperand(0).getReg(), 0);
DotDebugLocEntries. DotDebugLocEntries.
push_back(DotDebugLocEntry(SLabel, FunctionEndSym, MLoc)); push_back(DotDebugLocEntry(SLabel, FunctionEndSym, MLoc));
} }