diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Transforms/Scalar/DCE.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Transforms/Scalar/DCE.cpp | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/contrib/llvm-project/llvm/lib/Transforms/Scalar/DCE.cpp b/contrib/llvm-project/llvm/lib/Transforms/Scalar/DCE.cpp index 28947482e303..d55adf7c2d12 100644 --- a/contrib/llvm-project/llvm/lib/Transforms/Scalar/DCE.cpp +++ b/contrib/llvm-project/llvm/lib/Transforms/Scalar/DCE.cpp @@ -32,57 +32,10 @@ using namespace llvm; #define DEBUG_TYPE "dce" -STATISTIC(DIEEliminated, "Number of insts removed by DIE pass"); STATISTIC(DCEEliminated, "Number of insts removed"); DEBUG_COUNTER(DCECounter, "dce-transform", "Controls which instructions are eliminated"); -namespace { - //===--------------------------------------------------------------------===// - // DeadInstElimination pass implementation - // -struct DeadInstElimination : public FunctionPass { - static char ID; // Pass identification, replacement for typeid - DeadInstElimination() : FunctionPass(ID) { - initializeDeadInstEliminationPass(*PassRegistry::getPassRegistry()); - } - bool runOnFunction(Function &F) override { - if (skipFunction(F)) - return false; - auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>(); - TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI(F) : nullptr; - - bool Changed = false; - for (auto &BB : F) { - for (BasicBlock::iterator DI = BB.begin(); DI != BB.end(); ) { - Instruction *Inst = &*DI++; - if (isInstructionTriviallyDead(Inst, TLI)) { - if (!DebugCounter::shouldExecute(DCECounter)) - continue; - salvageDebugInfo(*Inst); - Inst->eraseFromParent(); - Changed = true; - ++DIEEliminated; - } - } - } - return Changed; - } - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.setPreservesCFG(); - } -}; -} - -char DeadInstElimination::ID = 0; -INITIALIZE_PASS(DeadInstElimination, "die", - "Dead Instruction Elimination", false, false) - -Pass *llvm::createDeadInstEliminationPass() { - return new DeadInstElimination(); -} - //===--------------------------------------------------------------------===// // RedundantDbgInstElimination pass implementation // @@ -116,6 +69,18 @@ Pass *llvm::createRedundantDbgInstEliminationPass() { return new RedundantDbgInstElimination(); } +PreservedAnalyses +RedundantDbgInstEliminationPass::run(Function &F, FunctionAnalysisManager &AM) { + bool Changed = false; + for (auto &BB : F) + Changed |= RemoveRedundantDbgInstrs(&BB); + if (!Changed) + return PreservedAnalyses::all(); + PreservedAnalyses PA; + PA.preserveSet<CFGAnalyses>(); + return PA; +} + //===--------------------------------------------------------------------===// // DeadCodeElimination pass implementation // @@ -178,7 +143,7 @@ static bool eliminateDeadCode(Function &F, TargetLibraryInfo *TLI) { } PreservedAnalyses DCEPass::run(Function &F, FunctionAnalysisManager &AM) { - if (!eliminateDeadCode(F, AM.getCachedResult<TargetLibraryAnalysis>(F))) + if (!eliminateDeadCode(F, &AM.getResult<TargetLibraryAnalysis>(F))) return PreservedAnalyses::all(); PreservedAnalyses PA; @@ -197,13 +162,14 @@ struct DCELegacyPass : public FunctionPass { if (skipFunction(F)) return false; - auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>(); - TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI(F) : nullptr; + TargetLibraryInfo *TLI = + &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(F); return eliminateDeadCode(F, TLI); } void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.addRequired<TargetLibraryInfoWrapperPass>(); AU.setPreservesCFG(); } }; |