[llvm-commits] [llvm-gcc-4.2] r81586 - in /llvm-gcc-4.2/trunk/gcc: llvm-debug.cpp llvm-debug.h
Devang Patel
dpatel at apple.com
Fri Sep 11 16:57:27 PDT 2009
Author: dpatel
Date: Fri Sep 11 18:57:27 2009
New Revision: 81586
URL: http://llvm.org/viewvc/llvm-project?rev=81586&view=rev
Log:
Use weak handle to keep track of MDNodes.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
llvm-gcc-4.2/trunk/gcc/llvm-debug.h
Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp?rev=81586&r1=81585&r2=81586&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Fri Sep 11 18:57:27 2009
@@ -661,7 +661,7 @@
return FwdDecl;
// Insert into the TypeCache so that recursive uses will find it.
- TypeCache[type] = FwdDecl.getNode();
+ TypeCache[type] = WeakVH(FwdDecl.getNode());
// Convert all the elements.
llvm::SmallVector<llvm::DIDescriptor, 16> EltTys;
@@ -772,9 +772,10 @@
DIType Ty;
if (tree TyDef = TYPE_NAME(type)) {
- std::map<tree_node *, MDNode *>::iterator I = TypeCache.find(TyDef);
+ std::map<tree_node *, WeakVH >::iterator I = TypeCache.find(TyDef);
if (I != TypeCache.end())
- return DIType(I->second);
+ if (Value *M = I->second)
+ return DIType(cast<MDNode>(M));
if (TREE_CODE(TyDef) == TYPE_DECL && DECL_ORIGINAL_TYPE(TyDef)) {
expanded_location TypeDefLoc = GetNodeLocation(TyDef);
Ty = DebugFactory.CreateDerivedType(DW_TAG_typedef, findRegion(TyDef),
@@ -786,7 +787,7 @@
0 /*offset */,
0 /*flags*/,
MainTy);
- TypeCache[TyDef] = Ty.getNode();
+ TypeCache[TyDef] = WeakVH(Ty.getNode());
return Ty;
}
}
@@ -816,7 +817,7 @@
MainTy);
if (TYPE_VOLATILE(type) || TYPE_READONLY(type)) {
- TypeCache[type] = Ty.getNode();
+ TypeCache[type] = WeakVH(Ty.getNode());
return Ty;
}
@@ -836,9 +837,10 @@
if (TREE_CODE(type) == VOID_TYPE) return DIType();
// Check to see if the compile unit already has created this type.
- std::map<tree_node *, MDNode *>::iterator I = TypeCache.find(type);
+ std::map<tree_node *, WeakVH >::iterator I = TypeCache.find(type);
if (I != TypeCache.end())
- return DIType(I->second);
+ if (Value *M = I->second)
+ return DIType(cast<MDNode>(M));
DIType MainTy;
if (type != TYPE_MAIN_VARIANT(type) && TYPE_MAIN_VARIANT(type))
@@ -905,7 +907,7 @@
Ty = createBasicType(type);
break;
}
- TypeCache[type] = Ty.getNode();
+ TypeCache[type] = WeakVH(Ty.getNode());
return Ty;
}
@@ -931,9 +933,10 @@
bool isMain) {
if (!FullPath)
FullPath = main_input_filename;
- MDNode *&CU = CUCache[FullPath];
- if (CU)
- return DICompileUnit(CU);
+ std::map<std::string, WeakVH >::iterator I = CUCache.find(FullPath);
+ if (I != CUCache.end())
+ if (Value *M = I->second)
+ return DICompileUnit(cast<MDNode>(M));
// Get source file information.
std::string Directory;
@@ -962,24 +965,24 @@
else
LangTag = DW_LANG_C89;
- const char *Flags = "";
- // Do this only when RC_DEBUG_OPTIONS environment variable is set to
- // a nonempty string. This is intended only for internal Apple use.
- char * debugopt = getenv("RC_DEBUG_OPTIONS");
- if (debugopt && debugopt[0])
- Flags = get_arguments();
-
- // flag_objc_abi represents Objective-C runtime version number. It is zero
- // for all other language.
- unsigned ObjcRunTimeVer = 0;
- if (flag_objc_abi != 0 && flag_objc_abi != -1)
- ObjcRunTimeVer = flag_objc_abi;
- DICompileUnit NewCU = DebugFactory.CreateCompileUnit(LangTag, FileName,
- Directory,
- version_string, isMain,
- optimize, Flags,
- ObjcRunTimeVer);
- CU = NewCU.getNode();
+ const char *Flags = "";
+ // Do this only when RC_DEBUG_OPTIONS environment variable is set to
+ // a nonempty string. This is intended only for internal Apple use.
+ char * debugopt = getenv("RC_DEBUG_OPTIONS");
+ if (debugopt && debugopt[0])
+ Flags = get_arguments();
+
+ // flag_objc_abi represents Objective-C runtime version number. It is zero
+ // for all other language.
+ unsigned ObjcRunTimeVer = 0;
+ if (flag_objc_abi != 0 && flag_objc_abi != -1)
+ ObjcRunTimeVer = flag_objc_abi;
+ DICompileUnit NewCU = DebugFactory.CreateCompileUnit(LangTag, FileName,
+ Directory,
+ version_string, isMain,
+ optimize, Flags,
+ ObjcRunTimeVer);
+ CUCache[FullPath] = WeakVH(NewCU.getNode());
return NewCU;
}
Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.h?rev=81586&r1=81585&r2=81586&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.h Fri Sep 11 18:57:27 2009
@@ -30,6 +30,7 @@
#include "llvm/Analysis/DebugInfo.h"
#include "llvm/Support/Dwarf.h"
+#include "llvm/Support/ValueHandle.h"
extern "C" {
#include "llvm.h"
@@ -59,8 +60,8 @@
const char *PrevFullPath; // Previous location file encountered.
int PrevLineNo; // Previous location line# encountered.
BasicBlock *PrevBB; // Last basic block encountered.
- std::map<std::string, MDNode *> CUCache;
- std::map<tree_node *, MDNode *> TypeCache;
+ std::map<std::string, WeakVH > CUCache;
+ std::map<tree_node *, WeakVH > TypeCache;
// Cache of previously constructed
// Types.
std::vector<DIDescriptor> RegionStack;
More information about the llvm-commits
mailing list