mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Tighter data structure for deleted debug labels.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31152 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1544,16 +1544,33 @@ unsigned MachineDebugInfo::RecordLabel(unsigned Line, unsigned Column,
|
||||
return ID;
|
||||
}
|
||||
|
||||
static bool LabelUIDComparison(const SourceLineInfo &LI, unsigned UID) {
|
||||
return LI.getLabelID() < UID;
|
||||
}
|
||||
|
||||
/// InvalidateLabel - Inhibit use of the specified label # from
|
||||
/// MachineDebugInfo, for example because the code was deleted.
|
||||
void MachineDebugInfo::InvalidateLabel(unsigned LabelID) {
|
||||
DeletedLabelIDs.insert(LabelID);
|
||||
// Check source line list first. SourceLineInfo is sorted by LabelID.
|
||||
std::vector<SourceLineInfo>::iterator I =
|
||||
std::lower_bound(Lines.begin(), Lines.end(), LabelID, LabelUIDComparison);
|
||||
if (I != Lines.end() && I->getLabelID() == LabelID) {
|
||||
Lines.erase(I);
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise add for use by isLabelValid.
|
||||
std::vector<unsigned>::iterator J =
|
||||
std::lower_bound(DeletedLabelIDs.begin(), DeletedLabelIDs.end(), LabelID);
|
||||
DeletedLabelIDs.insert(J, LabelID);
|
||||
}
|
||||
|
||||
/// isLabelValid - Check to make sure the label is still valid before
|
||||
/// attempting to use.
|
||||
bool MachineDebugInfo::isLabelValid(unsigned LabelID) {
|
||||
return DeletedLabelIDs.find(LabelID) == DeletedLabelIDs.end();
|
||||
std::vector<unsigned>::iterator I =
|
||||
std::lower_bound(DeletedLabelIDs.begin(), DeletedLabelIDs.end(), LabelID);
|
||||
return I != DeletedLabelIDs.end() && *I == LabelID;
|
||||
}
|
||||
|
||||
/// RecordSource - Register a source file with debug info. Returns an source
|
||||
|
Reference in New Issue
Block a user