mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-25 21:00:00 +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:
parent
ae5d51c9c9
commit
fcc1d9473e
@ -30,8 +30,6 @@
|
|||||||
#ifndef LLVM_CODEGEN_MACHINEDEBUGINFO_H
|
#ifndef LLVM_CODEGEN_MACHINEDEBUGINFO_H
|
||||||
#define LLVM_CODEGEN_MACHINEDEBUGINFO_H
|
#define LLVM_CODEGEN_MACHINEDEBUGINFO_H
|
||||||
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
#include "llvm/Support/Dwarf.h"
|
#include "llvm/Support/Dwarf.h"
|
||||||
#include "llvm/Support/DataTypes.h"
|
#include "llvm/Support/DataTypes.h"
|
||||||
#include "llvm/ADT/UniqueVector.h"
|
#include "llvm/ADT/UniqueVector.h"
|
||||||
@ -981,9 +979,9 @@ private:
|
|||||||
//
|
//
|
||||||
DebugScope *RootScope;
|
DebugScope *RootScope;
|
||||||
|
|
||||||
// DeletedLabelIDs - List of label IDs that have been removed from the
|
// DeletedLabelIDs - Sorted list of label IDs that have been removed from the
|
||||||
// module.
|
// module.
|
||||||
std::set<unsigned> DeletedLabelIDs;
|
std::vector<unsigned> DeletedLabelIDs;
|
||||||
|
|
||||||
// FrameMoves - List of moves done by a function's prolog. Used to construct
|
// FrameMoves - List of moves done by a function's prolog. Used to construct
|
||||||
// frame maps by debug consumers.
|
// frame maps by debug consumers.
|
||||||
|
@ -2207,8 +2207,7 @@ void DwarfWriter::EmitDebugLines() const {
|
|||||||
const SourceLineInfo &LineInfo = LineInfos[i];
|
const SourceLineInfo &LineInfo = LineInfos[i];
|
||||||
unsigned LabelID = LineInfo.getLabelID();
|
unsigned LabelID = LineInfo.getLabelID();
|
||||||
|
|
||||||
// Throw out line info if label is invalid.
|
// Source line labels are validated at the MachineDebugInfo level.
|
||||||
if (!DebugInfo->isLabelValid(LabelID)) continue;
|
|
||||||
|
|
||||||
if (DwarfVerbose) {
|
if (DwarfVerbose) {
|
||||||
unsigned SourceID = LineInfo.getSourceID();
|
unsigned SourceID = LineInfo.getSourceID();
|
||||||
|
@ -1544,16 +1544,33 @@ unsigned MachineDebugInfo::RecordLabel(unsigned Line, unsigned Column,
|
|||||||
return ID;
|
return ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool LabelUIDComparison(const SourceLineInfo &LI, unsigned UID) {
|
||||||
|
return LI.getLabelID() < UID;
|
||||||
|
}
|
||||||
|
|
||||||
/// InvalidateLabel - Inhibit use of the specified label # from
|
/// InvalidateLabel - Inhibit use of the specified label # from
|
||||||
/// MachineDebugInfo, for example because the code was deleted.
|
/// MachineDebugInfo, for example because the code was deleted.
|
||||||
void MachineDebugInfo::InvalidateLabel(unsigned LabelID) {
|
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
|
/// isLabelValid - Check to make sure the label is still valid before
|
||||||
/// attempting to use.
|
/// attempting to use.
|
||||||
bool MachineDebugInfo::isLabelValid(unsigned LabelID) {
|
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
|
/// RecordSource - Register a source file with debug info. Returns an source
|
||||||
|
Loading…
Reference in New Issue
Block a user