diff options
| author | Justin Bogner <mail@justinbogner.com> | 2016-04-22 19:40:41 +0000 |
|---|---|---|
| committer | Justin Bogner <mail@justinbogner.com> | 2016-04-22 19:40:41 +0000 |
| commit | 395c2127ed4dd630ed6ebb6ed4d3877b04126f98 (patch) | |
| tree | a858aec098fc9cecfc0e2f6006b71eda1aefa8df /llvm/lib/Transforms/Scalar | |
| parent | 8bf71066c5a7826b775d652e65cc35ce6308d3be (diff) | |
| download | bcm5719-llvm-395c2127ed4dd630ed6ebb6ed4d3877b04126f98.tar.gz bcm5719-llvm-395c2127ed4dd630ed6ebb6ed4d3877b04126f98.zip | |
PM: Port DCE to the new pass manager
Also add a very basic test, since apparently there aren't any tests
for DCE whatsoever to add the new pass version to.
llvm-svn: 267196
Diffstat (limited to 'llvm/lib/Transforms/Scalar')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/DCE.cpp | 68 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/Scalar.cpp | 2 |
2 files changed, 37 insertions, 33 deletions
diff --git a/llvm/lib/Transforms/Scalar/DCE.cpp b/llvm/lib/Transforms/Scalar/DCE.cpp index b67c3c7742f..95387eb7b2b 100644 --- a/llvm/lib/Transforms/Scalar/DCE.cpp +++ b/llvm/lib/Transforms/Scalar/DCE.cpp @@ -16,13 +16,14 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Scalar/DCE.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/IR/InstIterator.h" #include "llvm/IR/Instruction.h" #include "llvm/Pass.h" #include "llvm/Analysis/TargetLibraryInfo.h" +#include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Utils/Local.h" using namespace llvm; @@ -71,28 +72,6 @@ Pass *llvm::createDeadInstEliminationPass() { return new DeadInstElimination(); } - -namespace { - //===--------------------------------------------------------------------===// - // DeadCodeElimination pass implementation - // - struct DCE : public FunctionPass { - static char ID; // Pass identification, replacement for typeid - DCE() : FunctionPass(ID) { - initializeDCEPass(*PassRegistry::getPassRegistry()); - } - - bool runOnFunction(Function &F) override; - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.setPreservesCFG(); - } - }; -} - -char DCE::ID = 0; -INITIALIZE_PASS(DCE, "dce", "Dead Code Elimination", false, false) - static bool DCEInstruction(Instruction *I, SmallSetVector<Instruction *, 16> &WorkList, const TargetLibraryInfo *TLI) { @@ -121,13 +100,7 @@ static bool DCEInstruction(Instruction *I, return false; } -bool DCE::runOnFunction(Function &F) { - if (skipOptnoneFunction(F)) - return false; - - auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>(); - TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI() : nullptr; - +bool eliminateDeadCode(Function &F, TargetLibraryInfo *TLI) { bool MadeChange = false; SmallSetVector<Instruction *, 16> WorkList; // Iterate over the original function, only adding insts to the worklist @@ -150,7 +123,38 @@ bool DCE::runOnFunction(Function &F) { return MadeChange; } -FunctionPass *llvm::createDeadCodeEliminationPass() { - return new DCE(); +PreservedAnalyses DCEPass::run(Function &F, AnalysisManager<Function> &AM) { + if (eliminateDeadCode(F, AM.getCachedResult<TargetLibraryAnalysis>(F))) + return PreservedAnalyses::none(); + return PreservedAnalyses::all(); +} + +namespace { +struct DCELegacyPass : public FunctionPass { + static char ID; // Pass identification, replacement for typeid + DCELegacyPass() : FunctionPass(ID) { + initializeDCELegacyPassPass(*PassRegistry::getPassRegistry()); + } + + bool runOnFunction(Function &F) override { + if (skipOptnoneFunction(F)) + return false; + + auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>(); + TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI() : nullptr; + + return eliminateDeadCode(F, TLI); + } + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesCFG(); + } +}; } +char DCELegacyPass::ID = 0; +INITIALIZE_PASS(DCELegacyPass, "dce", "Dead Code Elimination", false, false) + +FunctionPass *llvm::createDeadCodeEliminationPass() { + return new DCELegacyPass(); +} diff --git a/llvm/lib/Transforms/Scalar/Scalar.cpp b/llvm/lib/Transforms/Scalar/Scalar.cpp index a8c0c14f738..84e0f28be99 100644 --- a/llvm/lib/Transforms/Scalar/Scalar.cpp +++ b/llvm/lib/Transforms/Scalar/Scalar.cpp @@ -37,7 +37,7 @@ void llvm::initializeScalarOpts(PassRegistry &Registry) { initializeConstantHoistingPass(Registry); initializeConstantPropagationPass(Registry); initializeCorrelatedValuePropagationPass(Registry); - initializeDCEPass(Registry); + initializeDCELegacyPassPass(Registry); initializeDeadInstEliminationPass(Registry); initializeScalarizerPass(Registry); initializeDSEPass(Registry); |

