diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-05-11 18:12:17 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-05-11 18:12:17 +0000 |
commit | 99ccb1fae75d3d7296c11f1ec4a6eb5e1cbbe4d4 (patch) | |
tree | 1eb2ec5f1415712c07e6ecb51a9cccf296266002 /include | |
parent | db692e7d5539bcdac5b892904b06caef4591c096 (diff) |
DebugInfo: Include lexical scopes in inlined subroutines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208506 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/ADT/STLExtras.h | 7 | ||||
-rw-r--r-- | include/llvm/CodeGen/LexicalScopes.h | 9 |
2 files changed, 12 insertions, 4 deletions
diff --git a/include/llvm/ADT/STLExtras.h b/include/llvm/ADT/STLExtras.h index 807ec59061d..5b7b88b9008 100644 --- a/include/llvm/ADT/STLExtras.h +++ b/include/llvm/ADT/STLExtras.h @@ -530,6 +530,13 @@ make_unique(size_t n) { #endif +template<typename First, typename Second> +struct pair_hash { + size_t operator()(const std::pair<First, Second> &P) const { + return std::hash<First>()(P.first) * 31 + std::hash<Second>()(P.second); + } +}; + } // End llvm namespace #endif diff --git a/include/llvm/CodeGen/LexicalScopes.h b/include/llvm/CodeGen/LexicalScopes.h index 31d40ff588c..31d68726741 100644 --- a/include/llvm/CodeGen/LexicalScopes.h +++ b/include/llvm/CodeGen/LexicalScopes.h @@ -21,6 +21,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/IR/DebugLoc.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/ValueHandle.h" @@ -185,9 +186,7 @@ public: /// findInlinedScope - Find an inlined scope for the given DebugLoc or return /// NULL. - LexicalScope *findInlinedScope(DebugLoc DL) { - return InlinedLexicalScopeMap.lookup(DL); - } + LexicalScope *findInlinedScope(DebugLoc DL); /// findLexicalScope - Find regular lexical scope or return null. LexicalScope *findLexicalScope(const MDNode *N) { @@ -230,7 +229,9 @@ private: /// InlinedLexicalScopeMap - Tracks inlined function scopes in current /// function. - DenseMap<DebugLoc, LexicalScope *> InlinedLexicalScopeMap; + std::unordered_map<std::pair<const MDNode *, const MDNode *>, LexicalScope, + pair_hash<const MDNode *, const MDNode *>> + InlinedLexicalScopeMap; /// AbstractScopeMap - These scopes are not included LexicalScopeMap. // Use an unordered_map to ensure value pointer validity over insertion. |