[llvm] r207726 - LexicalScopes: Use unique_ptr to manage ownership of abstract LexicalScopes.

David Blaikie dblaikie at gmail.com
Wed Apr 30 16:46:27 PDT 2014


Author: dblaikie
Date: Wed Apr 30 18:46:27 2014
New Revision: 207726

URL: http://llvm.org/viewvc/llvm-project?rev=207726&view=rev
Log:
LexicalScopes: Use unique_ptr to manage ownership of abstract LexicalScopes.

Modified:
    llvm/trunk/include/llvm/CodeGen/LexicalScopes.h
    llvm/trunk/lib/CodeGen/LexicalScopes.cpp

Modified: llvm/trunk/include/llvm/CodeGen/LexicalScopes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LexicalScopes.h?rev=207726&r1=207725&r2=207726&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/LexicalScopes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LexicalScopes.h Wed Apr 30 18:46:27 2014
@@ -90,7 +90,8 @@ public:
 
   /// findAbstractScope - Find an abstract scope or return NULL.
   LexicalScope *findAbstractScope(const MDNode *N) {
-    return AbstractScopeMap.lookup(N);
+    auto I = AbstractScopeMap.find(N);
+    return I != AbstractScopeMap.end() ? I->second.get() : nullptr;
   }
 
   /// findInlinedScope - Find an inlined scope for the given DebugLoc or return
@@ -144,7 +145,7 @@ private:
 
   /// AbstractScopeMap - These scopes are  not included LexicalScopeMap.
   /// AbstractScopes owns its LexicalScope*s.
-  DenseMap<const MDNode *, LexicalScope *> AbstractScopeMap;
+  DenseMap<const MDNode *, std::unique_ptr<LexicalScope>> AbstractScopeMap;
 
   /// AbstractScopesList - Tracks abstract scopes constructed while processing
   /// a function.

Modified: llvm/trunk/lib/CodeGen/LexicalScopes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LexicalScopes.cpp?rev=207726&r1=207725&r2=207726&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LexicalScopes.cpp (original)
+++ llvm/trunk/lib/CodeGen/LexicalScopes.cpp Wed Apr 30 18:46:27 2014
@@ -33,7 +33,6 @@ LexicalScopes::~LexicalScopes() { reset(
 void LexicalScopes::reset() {
   MF = nullptr;
   CurrentFnLexicalScope = nullptr;
-  DeleteContainerSeconds(AbstractScopeMap);
   InlinedLexicalScopeMap.clear();
   AbstractScopesList.clear();
 }
@@ -194,9 +193,11 @@ LexicalScope *LexicalScopes::getOrCreate
   DIDescriptor Scope(N);
   if (Scope.isLexicalBlockFile())
     Scope = DILexicalBlockFile(Scope).getScope();
-  LexicalScope *AScope = AbstractScopeMap.lookup(N);
-  if (AScope)
-    return AScope;
+  auto IterBool = AbstractScopeMap.insert(
+      std::make_pair(N, std::unique_ptr<LexicalScope>()));
+  auto &MapEntry = *IterBool.first;
+  if (!IterBool.second)
+    return MapEntry.second.get();
 
   LexicalScope *Parent = nullptr;
   if (Scope.isLexicalBlock()) {
@@ -204,11 +205,11 @@ LexicalScope *LexicalScopes::getOrCreate
     DIDescriptor ParentDesc = DB.getContext();
     Parent = getOrCreateAbstractScope(ParentDesc);
   }
-  AScope = new LexicalScope(Parent, DIDescriptor(N), nullptr, true);
-  AbstractScopeMap[N] = AScope;
+  MapEntry.second =
+      make_unique<LexicalScope>(Parent, DIDescriptor(N), nullptr, true);
   if (DIDescriptor(N).isSubprogram())
-    AbstractScopesList.push_back(AScope);
-  return AScope;
+    AbstractScopesList.push_back(MapEntry.second.get());
+  return MapEntry.second.get();
 }
 
 /// constructScopeNest





More information about the llvm-commits mailing list