DebugInfo: Gut DILocation

This is along the same lines as r234832, but for `DILocation`.  Clean
out all accessors from `DILocation`.  Any callers should be using
`MDLocation` directly (e.g., via `operator->()`).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234835 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-04-14 01:35:55 +00:00
parent 1624f35f2b
commit d59e30dfb7
6 changed files with 23 additions and 37 deletions

View File

@ -663,28 +663,15 @@ public:
MDExpression &operator*() const { return *N; }
};
/// \brief This object holds location information.
///
/// This object is not associated with any DWARF tag.
class DILocation : public DIDescriptor {
class DILocation {
MDLocation *N;
public:
DILocation() = default;
DILocation(const MDLocation *N) : DIDescriptor(N) {}
DILocation(const MDLocation *N = nullptr) : N(const_cast<MDLocation *>(N)) {}
MDLocation *get() const {
return cast_or_null<MDLocation>(DIDescriptor::get());
}
operator MDLocation *() const { return get(); }
MDLocation *operator->() const { return get(); }
MDLocation &operator*() const { return *get(); }
unsigned getLineNumber() const { return get()->getLine(); }
unsigned getColumnNumber() const { return get()->getColumn(); }
DIScope getScope() const { return DIScope(get()->getScope()); }
DILocation getOrigLocation() const { return get()->getInlinedAt(); }
StringRef getFilename() const { return get()->getFilename(); }
StringRef getDirectory() const { return get()->getDirectory(); }
unsigned getDiscriminator() const { return get()->getDiscriminator(); }
operator MDLocation *() const { return N; }
MDLocation *operator->() const { return N; }
MDLocation &operator*() const { return *N; }
};
class DIObjCProperty : public DIDescriptor {

View File

@ -430,10 +430,10 @@ DwarfCompileUnit::constructInlinedScopeDIE(LexicalScope *Scope) {
attachRangesOrLowHighPC(*ScopeDIE, Scope->getRanges());
// Add the call site information to the DIE.
DILocation DL(Scope->getInlinedAt());
const MDLocation *IA = Scope->getInlinedAt();
addUInt(*ScopeDIE, dwarf::DW_AT_call_file, None,
getOrCreateSourceID(DL.getFilename(), DL.getDirectory()));
addUInt(*ScopeDIE, dwarf::DW_AT_call_line, None, DL.getLineNumber());
getOrCreateSourceID(IA->getFilename(), IA->getDirectory()));
addUInt(*ScopeDIE, dwarf::DW_AT_call_line, None, IA->getLine());
// Add name to the name table, we do this here because we're guaranteed
// to have concrete versions of our DW_TAG_inlined_subprogram nodes.

View File

@ -179,8 +179,8 @@ void DebugInfoFinder::processLocation(const Module &M, DILocation Loc) {
if (!Loc)
return;
InitializeTypeMap(M);
processScope(Loc.getScope());
processLocation(M, Loc.getOrigLocation());
processScope(Loc->getScope());
processLocation(M, Loc->getInlinedAt());
}
void DebugInfoFinder::processType(DIType DT) {

View File

@ -136,10 +136,9 @@ void DiagnosticInfoOptimizationBase::getLocation(StringRef *Filename,
unsigned *Line,
unsigned *Column) const {
MDLocation *L = getDebugLoc();
DILocation DIL = L;
*Filename = DIL.getFilename();
*Line = DIL.getLineNumber();
*Column = DIL.getColumnNumber();
*Filename = L->getFilename();
*Line = L->getLine();
*Column = L->getColumn();
}
const std::string DiagnosticInfoOptimizationBase::getLocationStr() const {

View File

@ -226,7 +226,7 @@ unsigned SampleProfileLoader::getInstWeight(Instruction &Inst) {
DILocation DIL = DLoc.get();
int LOffset = Lineno - HeaderLineno;
unsigned Discriminator = DIL.getDiscriminator();
unsigned Discriminator = DIL->getDiscriminator();
unsigned Weight = Samples->samplesAt(LOffset, Discriminator);
DEBUG(dbgs() << " " << Lineno << "." << Discriminator << ":" << Inst
<< " (line offset: " << LOffset << "." << Discriminator

View File

@ -192,8 +192,8 @@ bool AddDiscriminators::runOnFunction(Function &F) {
if (!FirstDIL->canDiscriminate(*LastDIL)) {
// Create a new lexical scope and compute a new discriminator
// number for it.
StringRef Filename = FirstDIL.getFilename();
DIScope Scope = FirstDIL.getScope();
StringRef Filename = FirstDIL->getFilename();
DIScope Scope = FirstDIL->getScope();
DIFile File = Builder.createFile(Filename, Scope.getDirectory());
// FIXME: Calculate the discriminator here, based on local information,
@ -204,10 +204,10 @@ bool AddDiscriminators::runOnFunction(Function &F) {
unsigned Discriminator = FirstDIL->computeNewDiscriminator();
DILexicalBlockFile NewScope =
Builder.createLexicalBlockFile(Scope, File, Discriminator);
DILocation NewDIL =
auto *NewDIL =
MDLocation::get(Ctx, FirstDIL->getLine(), FirstDIL->getColumn(),
NewScope, FirstDIL->getInlinedAt());
DebugLoc newDebugLoc = NewDIL.get();
DebugLoc newDebugLoc = NewDIL;
// Attach this new debug location to First and every
// instruction following First that shares the same location.
@ -216,9 +216,9 @@ bool AddDiscriminators::runOnFunction(Function &F) {
if (I1->getDebugLoc().get() != FirstDIL)
break;
I1->setDebugLoc(newDebugLoc);
DEBUG(dbgs() << NewDIL.getFilename() << ":" << NewDIL.getLineNumber()
<< ":" << NewDIL.getColumnNumber() << ":"
<< NewDIL.getDiscriminator() << *I1 << "\n");
DEBUG(dbgs() << NewDIL->getFilename() << ":" << NewDIL->getLine()
<< ":" << NewDIL->getColumn() << ":"
<< NewDIL->getDiscriminator() << *I1 << "\n");
}
DEBUG(dbgs() << "\n");
Changed = true;