diff options
author | Davide Italiano <davide@freebsd.org> | 2016-05-25 01:57:04 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-05-25 01:57:04 +0000 |
commit | 655a145e83aa678d1e0b492820a55d574be46b19 (patch) | |
tree | 81ffc7b870b3fec320754917bac9a0fb4a2f4c8d /llvm/lib/Transforms/Scalar/BDCE.cpp | |
parent | e003bb7eade6ece69847c0a85e1f4de2d18f2989 (diff) | |
download | bcm5719-llvm-655a145e83aa678d1e0b492820a55d574be46b19.tar.gz bcm5719-llvm-655a145e83aa678d1e0b492820a55d574be46b19.zip |
[PM] Port BDCE to the new pass manager.
llvm-svn: 270647
Diffstat (limited to 'llvm/lib/Transforms/Scalar/BDCE.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/BDCE.cpp | 72 |
1 files changed, 39 insertions, 33 deletions
diff --git a/llvm/lib/Transforms/Scalar/BDCE.cpp b/llvm/lib/Transforms/Scalar/BDCE.cpp index a357280dcef..a1331ddf44a 100644 --- a/llvm/lib/Transforms/Scalar/BDCE.cpp +++ b/llvm/lib/Transforms/Scalar/BDCE.cpp @@ -14,11 +14,11 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Scalar/BDCE.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" -#include "llvm/Analysis/GlobalsModRef.h" #include "llvm/Analysis/DemandedBits.h" +#include "llvm/Analysis/GlobalsModRef.h" #include "llvm/IR/CFG.h" #include "llvm/IR/InstIterator.h" #include "llvm/IR/Instructions.h" @@ -27,6 +27,7 @@ #include "llvm/Pass.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Transforms/Scalar.h" using namespace llvm; #define DEBUG_TYPE "bdce" @@ -34,35 +35,7 @@ using namespace llvm; STATISTIC(NumRemoved, "Number of instructions removed (unused)"); STATISTIC(NumSimplified, "Number of instructions trivialized (dead bits)"); -namespace { -struct BDCE : public FunctionPass { - static char ID; // Pass identification, replacement for typeid - BDCE() : FunctionPass(ID) { - initializeBDCEPass(*PassRegistry::getPassRegistry()); - } - - bool runOnFunction(Function& F) override; - - void getAnalysisUsage(AnalysisUsage& AU) const override { - AU.setPreservesCFG(); - AU.addRequired<DemandedBitsWrapperPass>(); - AU.addPreserved<GlobalsAAWrapperPass>(); - } -}; -} - -char BDCE::ID = 0; -INITIALIZE_PASS_BEGIN(BDCE, "bdce", "Bit-Tracking Dead Code Elimination", - false, false) -INITIALIZE_PASS_DEPENDENCY(DemandedBitsWrapperPass) -INITIALIZE_PASS_END(BDCE, "bdce", "Bit-Tracking Dead Code Elimination", - false, false) - -bool BDCE::runOnFunction(Function& F) { - if (skipFunction(F)) - return false; - auto &DB = getAnalysis<DemandedBitsWrapperPass>().getDemandedBits(); - +static bool bitTrackingDCE(Function &F, DemandedBits &DB) { SmallVector<Instruction*, 128> Worklist; bool Changed = false; for (Instruction &I : instructions(F)) { @@ -96,7 +69,40 @@ bool BDCE::runOnFunction(Function& F) { return Changed; } -FunctionPass *llvm::createBitTrackingDCEPass() { - return new BDCE(); +PreservedAnalyses BDCEPass::run(Function &F, FunctionAnalysisManager &AM) { + auto &DB = AM.getResult<DemandedBitsAnalysis>(F); + if (bitTrackingDCE(F, DB)) + return PreservedAnalyses::none(); + return PreservedAnalyses::all(); } +namespace { +struct BDCELegacyPass : public FunctionPass { + static char ID; // Pass identification, replacement for typeid + BDCELegacyPass() : FunctionPass(ID) { + initializeBDCELegacyPassPass(*PassRegistry::getPassRegistry()); + } + + bool runOnFunction(Function &F) override { + if (skipFunction(F)) + return false; + auto &DB = getAnalysis<DemandedBitsWrapperPass>().getDemandedBits(); + return bitTrackingDCE(F, DB); + } + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesCFG(); + AU.addRequired<DemandedBitsWrapperPass>(); + AU.addPreserved<GlobalsAAWrapperPass>(); + } +}; +} + +char BDCELegacyPass::ID = 0; +INITIALIZE_PASS_BEGIN(BDCELegacyPass, "bdce", + "Bit-Tracking Dead Code Elimination", false, false) +INITIALIZE_PASS_DEPENDENCY(DemandedBitsWrapperPass) +INITIALIZE_PASS_END(BDCELegacyPass, "bdce", + "Bit-Tracking Dead Code Elimination", false, false) + +FunctionPass *llvm::createBitTrackingDCEPass() { return new BDCELegacyPass(); } |