diff options
-rw-r--r-- | llvm/include/llvm/Transforms/IPO.h | 5 | ||||
-rw-r--r-- | llvm/lib/Transforms/IPO/Internalize.cpp | 14 |
2 files changed, 17 insertions, 2 deletions
diff --git a/llvm/include/llvm/Transforms/IPO.h b/llvm/include/llvm/Transforms/IPO.h index 7c764530f72..6d0f9eaefb7 100644 --- a/llvm/include/llvm/Transforms/IPO.h +++ b/llvm/include/llvm/Transforms/IPO.h @@ -17,6 +17,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" +#include "llvm/ADT/StringSet.h" namespace llvm { @@ -126,7 +127,11 @@ Pass *createPruneEHPass(); /// /// Note that commandline options that are used with the above function are not /// used now! +ModulePass *createInternalizePass(StringSet<> ExportList); + +/// Same as above, but with an exportList created for an array. ModulePass *createInternalizePass(ArrayRef<const char *> ExportList); + /// createInternalizePass - Same as above, but with an empty exportList. ModulePass *createInternalizePass(); diff --git a/llvm/lib/Transforms/IPO/Internalize.cpp b/llvm/lib/Transforms/IPO/Internalize.cpp index 21bb5d000bc..a57176f75b0 100644 --- a/llvm/lib/Transforms/IPO/Internalize.cpp +++ b/llvm/lib/Transforms/IPO/Internalize.cpp @@ -22,6 +22,7 @@ #include "llvm/Transforms/IPO.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/Statistic.h" +#include "llvm/ADT/StringSet.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/IR/Module.h" #include "llvm/Pass.h" @@ -54,11 +55,13 @@ APIList("internalize-public-api-list", cl::value_desc("list"), namespace { class InternalizePass : public ModulePass { - std::set<std::string> ExternalNames; + StringSet<> ExternalNames; + public: static char ID; // Pass identification, replacement for typeid explicit InternalizePass(); explicit InternalizePass(ArrayRef<const char *> ExportList); + explicit InternalizePass(StringSet<> ExportList); void LoadFile(const char *Filename); bool maybeInternalize(GlobalValue &GV, const std::set<const Comdat *> &ExternalComdats); @@ -93,6 +96,9 @@ InternalizePass::InternalizePass(ArrayRef<const char *> ExportList) } } +InternalizePass::InternalizePass(StringSet<> ExportList) + : ModulePass(ID), ExternalNames(std::move(ExportList)) {} + void InternalizePass::LoadFile(const char *Filename) { // Load the APIFile... std::ifstream In(Filename); @@ -110,7 +116,7 @@ void InternalizePass::LoadFile(const char *Filename) { } static bool isExternallyVisible(const GlobalValue &GV, - const std::set<std::string> &ExternalNames) { + const StringSet<> &ExternalNames) { // Function must be defined here if (GV.isDeclaration()) return true; @@ -267,3 +273,7 @@ ModulePass *llvm::createInternalizePass() { return new InternalizePass(); } ModulePass *llvm::createInternalizePass(ArrayRef<const char *> ExportList) { return new InternalizePass(ExportList); } + +ModulePass *llvm::createInternalizePass(StringSet<> ExportList) { + return new InternalizePass(std::move(ExportList)); +} |