diff options
Diffstat (limited to 'lib/Transforms/IPO/ElimAvailExtern.cpp')
-rw-r--r-- | lib/Transforms/IPO/ElimAvailExtern.cpp | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/lib/Transforms/IPO/ElimAvailExtern.cpp b/lib/Transforms/IPO/ElimAvailExtern.cpp index af313a6b001d..98c4b1740306 100644 --- a/lib/Transforms/IPO/ElimAvailExtern.cpp +++ b/lib/Transforms/IPO/ElimAvailExtern.cpp @@ -13,10 +13,11 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Transforms/IPO.h" +#include "llvm/Transforms/IPO/ElimAvailExtern.h" #include "llvm/ADT/Statistic.h" #include "llvm/IR/Constants.h" #include "llvm/IR/Module.h" +#include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Utils/GlobalStatus.h" #include "llvm/Pass.h" using namespace llvm; @@ -26,30 +27,7 @@ using namespace llvm; STATISTIC(NumFunctions, "Number of functions removed"); STATISTIC(NumVariables, "Number of global variables removed"); -namespace { -struct EliminateAvailableExternally : public ModulePass { - static char ID; // Pass identification, replacement for typeid - EliminateAvailableExternally() : ModulePass(ID) { - initializeEliminateAvailableExternallyPass( - *PassRegistry::getPassRegistry()); - } - - // run - Do the EliminateAvailableExternally pass on the specified module, - // optionally updating the specified callgraph to reflect the changes. - // - bool runOnModule(Module &M) override; -}; -} - -char EliminateAvailableExternally::ID = 0; -INITIALIZE_PASS(EliminateAvailableExternally, "elim-avail-extern", - "Eliminate Available Externally Globals", false, false) - -ModulePass *llvm::createEliminateAvailableExternallyPass() { - return new EliminateAvailableExternally(); -} - -bool EliminateAvailableExternally::runOnModule(Module &M) { +static bool eliminateAvailableExternally(Module &M) { bool Changed = false; // Drop initializers of available externally global variables. @@ -82,3 +60,37 @@ bool EliminateAvailableExternally::runOnModule(Module &M) { return Changed; } + +PreservedAnalyses +EliminateAvailableExternallyPass::run(Module &M, ModuleAnalysisManager &) { + if (!eliminateAvailableExternally(M)) + return PreservedAnalyses::all(); + return PreservedAnalyses::none(); +} + +namespace { +struct EliminateAvailableExternallyLegacyPass : public ModulePass { + static char ID; // Pass identification, replacement for typeid + EliminateAvailableExternallyLegacyPass() : ModulePass(ID) { + initializeEliminateAvailableExternallyLegacyPassPass( + *PassRegistry::getPassRegistry()); + } + + // run - Do the EliminateAvailableExternally pass on the specified module, + // optionally updating the specified callgraph to reflect the changes. + // + bool runOnModule(Module &M) { + if (skipModule(M)) + return false; + return eliminateAvailableExternally(M); + } +}; +} + +char EliminateAvailableExternallyLegacyPass::ID = 0; +INITIALIZE_PASS(EliminateAvailableExternallyLegacyPass, "elim-avail-extern", + "Eliminate Available Externally Globals", false, false) + +ModulePass *llvm::createEliminateAvailableExternallyPass() { + return new EliminateAvailableExternallyLegacyPass(); +} |