diff options
author | Bill Wendling <isanbard@gmail.com> | 2012-04-21 23:59:16 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2012-04-21 23:59:16 +0000 |
commit | 32854e272746fd97870276bb70740d0a7f9e6341 (patch) | |
tree | 68e92f6b4108e8f34f1c94221c4265ae7da6631e /llvm | |
parent | 46cb6f1b51d0f54a133995f31cb98f110ac69b81 (diff) | |
download | bcm5719-llvm-32854e272746fd97870276bb70740d0a7f9e6341.tar.gz bcm5719-llvm-32854e272746fd97870276bb70740d0a7f9e6341.zip |
Add a flag to the struct type finder to collect only those types which have
names. This saves collecting types we normally don't care about.
llvm-svn: 155300
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Module.h | 3 | ||||
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/VMCore/Module.cpp | 13 |
3 files changed, 12 insertions, 8 deletions
diff --git a/llvm/include/llvm/Module.h b/llvm/include/llvm/Module.h index b9c98814f15..570b1bc7b45 100644 --- a/llvm/include/llvm/Module.h +++ b/llvm/include/llvm/Module.h @@ -303,7 +303,8 @@ public: /// findUsedStructTypes - Walk the entire module and find all of the /// struct types that are in use, returning them in a vector. - void findUsedStructTypes(std::vector<StructType*> &StructTypes) const; + void findUsedStructTypes(std::vector<StructType*> &StructTypes, + bool OnlyNamed = false) const; /// getTypeByName - Return the type with the specified name, or null if there /// is none by that name. diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 765fcc88235..630289b2bdc 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -595,12 +595,12 @@ void ModuleLinker::computeTypeMapping() { // example. When the source module got loaded into the same LLVMContext, if // it had the same type, it would have been renamed to "%foo.42 = { i32 }". std::vector<StructType*> SrcStructTypes; - SrcM->findUsedStructTypes(SrcStructTypes); + SrcM->findUsedStructTypes(SrcStructTypes, true); SmallPtrSet<StructType*, 32> SrcStructTypesSet(SrcStructTypes.begin(), SrcStructTypes.end()); std::vector<StructType*> DstStructTypes; - DstM->findUsedStructTypes(DstStructTypes); + DstM->findUsedStructTypes(DstStructTypes, true); SmallPtrSet<StructType*, 32> DstStructTypesSet(DstStructTypes.begin(), DstStructTypes.end()); diff --git a/llvm/lib/VMCore/Module.cpp b/llvm/lib/VMCore/Module.cpp index 3c67191e09c..24c2707b543 100644 --- a/llvm/lib/VMCore/Module.cpp +++ b/llvm/lib/VMCore/Module.cpp @@ -483,9 +483,10 @@ namespace { DenseSet<Type*> VisitedTypes; std::vector<StructType*> &StructTypes; + bool OnlyNamed; public: - TypeFinder(std::vector<StructType*> &structTypes) - : StructTypes(structTypes) {} + TypeFinder(std::vector<StructType*> &structTypes, bool onlyNamed) + : StructTypes(structTypes), OnlyNamed(onlyNamed) {} void run(const Module &M) { // Get types from global variables. @@ -545,7 +546,8 @@ namespace { // If this is a structure or opaque type, add a name for the type. if (StructType *STy = dyn_cast<StructType>(Ty)) - StructTypes.push_back(STy); + if (!OnlyNamed || STy->hasName()) + StructTypes.push_back(STy); // Recursively walk all contained types. for (Type::subtype_iterator I = Ty->subtype_begin(), @@ -590,6 +592,7 @@ namespace { }; } // end anonymous namespace -void Module::findUsedStructTypes(std::vector<StructType*> &StructTypes) const { - TypeFinder(StructTypes).run(*this); +void Module::findUsedStructTypes(std::vector<StructType*> &StructTypes, + bool OnlyNamed) const { + TypeFinder(StructTypes, OnlyNamed).run(*this); } |