From 497110d1b0ebcab15eb001d593747f113af047a4 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Mon, 30 Mar 2015 23:47:26 +0000 Subject: [PATCH] DebugLoc: Remove getFromDILexicalBlock() The only user of `DebugLoc::getFromDILexicalBlock()` was creating a new `MDLocation` as convenient API for passing an `MDScope`. Stop doing that, and remove the API. If in the future we actually *want* to create new DebugLocs, calling `MDLexicalBlock::get()` makes more sense. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233643 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/LexicalScopes.h | 9 +++++++-- include/llvm/IR/DebugLoc.h | 6 ------ lib/CodeGen/LexicalScopes.cpp | 17 +++++++---------- lib/IR/DebugLoc.cpp | 9 --------- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/include/llvm/CodeGen/LexicalScopes.h b/include/llvm/CodeGen/LexicalScopes.h index f7ce894cb81..aa217d5519e 100644 --- a/include/llvm/CodeGen/LexicalScopes.h +++ b/include/llvm/CodeGen/LexicalScopes.h @@ -200,9 +200,14 @@ public: LexicalScope *getOrCreateAbstractScope(const MDLocalScope *Scope); private: - /// getOrCreateLexicalScope - Find lexical scope for the given DebugLoc. If + /// getOrCreateLexicalScope - Find lexical scope for the given Scope/IA. If /// not available then create new lexical scope. - LexicalScope *getOrCreateLexicalScope(const MDLocation *DL); + LexicalScope *getOrCreateLexicalScope(const MDLocalScope *Scope, + const MDLocation *IA = nullptr); + LexicalScope *getOrCreateLexicalScope(const MDLocation *DL) { + return DL ? getOrCreateLexicalScope(DL->getScope(), DL->getInlinedAt()) + : nullptr; + } /// getOrCreateRegularScope - Find or create a regular lexical scope. LexicalScope *getOrCreateRegularScope(const MDLocalScope *Scope); diff --git a/include/llvm/IR/DebugLoc.h b/include/llvm/IR/DebugLoc.h index 8f2781304a8..365860fd877 100644 --- a/include/llvm/IR/DebugLoc.h +++ b/include/llvm/IR/DebugLoc.h @@ -90,12 +90,6 @@ namespace llvm { static DebugLoc get(unsigned Line, unsigned Col, MDNode *Scope, MDNode *InlinedAt = nullptr); - /// \brief Translate the DILexicalBlock into a DebugLoc. - /// - /// FIXME: Remove this. It has only one user, and the user just wants to - /// pass an \a MDScope around. - static DebugLoc getFromDILexicalBlock(MDNode *N); - unsigned getLine() const; unsigned getCol() const; MDNode *getScope() const; diff --git a/lib/CodeGen/LexicalScopes.cpp b/lib/CodeGen/LexicalScopes.cpp index 2b356b4adee..45f312bb7b1 100644 --- a/lib/CodeGen/LexicalScopes.cpp +++ b/lib/CodeGen/LexicalScopes.cpp @@ -134,15 +134,13 @@ LexicalScope *LexicalScopes::findLexicalScope(const MDLocation *DL) { /// getOrCreateLexicalScope - Find lexical scope for the given DebugLoc. If /// not available then create new lexical scope. -LexicalScope *LexicalScopes::getOrCreateLexicalScope(const MDLocation *DL) { - if (!DL) - return nullptr; - MDLocalScope *Scope = DL->getScope(); - if (auto *InlinedAt = DL->getInlinedAt()) { +LexicalScope *LexicalScopes::getOrCreateLexicalScope(const MDLocalScope *Scope, + const MDLocation *IA) { + if (IA) { // Create an abstract scope for inlined function. getOrCreateAbstractScope(Scope); // Create an inlined scope for inlined function. - return getOrCreateInlinedScope(Scope, InlinedAt); + return getOrCreateInlinedScope(Scope, IA); } return getOrCreateRegularScope(Scope); @@ -158,11 +156,10 @@ LexicalScopes::getOrCreateRegularScope(const MDLocalScope *Scope) { if (I != LexicalScopeMap.end()) return &I->second; + // FIXME: Should the following dyn_cast be MDLexicalBlock? LexicalScope *Parent = nullptr; - if (isa(Scope)) // FIXME: Should this be MDLexicalBlock? - Parent = - getOrCreateLexicalScope(DebugLoc::getFromDILexicalBlock( - const_cast(Scope)).get()); + if (auto *Block = dyn_cast(Scope)) + Parent = getOrCreateLexicalScope(Block->getScope()); I = LexicalScopeMap.emplace(std::piecewise_construct, std::forward_as_tuple(Scope), std::forward_as_tuple(Parent, Scope, nullptr, diff --git a/lib/IR/DebugLoc.cpp b/lib/IR/DebugLoc.cpp index 5a5f201fe12..95f6d67c542 100644 --- a/lib/IR/DebugLoc.cpp +++ b/lib/IR/DebugLoc.cpp @@ -66,15 +66,6 @@ DebugLoc DebugLoc::get(unsigned Line, unsigned Col, return MDLocation::get(Scope->getContext(), Line, Col, Scope, InlinedAt); } -/// getFromDILexicalBlock - Translate the DILexicalBlock into a DebugLoc. -DebugLoc DebugLoc::getFromDILexicalBlock(MDNode *N) { - DILexicalBlock LexBlock(N); - MDNode *Scope = LexBlock.getContext(); - if (!Scope) return DebugLoc(); - return get(LexBlock.getLineNumber(), LexBlock.getColumnNumber(), Scope, - nullptr); -} - void DebugLoc::dump() const { #ifndef NDEBUG if (!Loc) -- 2.34.1