From 773353be4e5d76c4dda3b1776c745c8e794a3384 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Wed, 17 Jun 2020 09:40:47 +0100 Subject: [PATCH] [SCCP] Move common code to simplify basic block to helper (NFC). Reviewers: efriedma, davide Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D81755 --- llvm/lib/Transforms/Scalar/SCCP.cpp | 56 +++++++++++++---------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index cfe5aea61093..ccfc0b844c30 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -1606,6 +1606,23 @@ static bool tryToReplaceWithConstant(SCCPSolver &Solver, Value *V) { return true; } +static bool simplifyInstsInBlock(SCCPSolver &Solver, BasicBlock &BB, + Statistic &InstRemovedStat) { + bool MadeChanges = false; + for (Instruction &Inst : make_early_inc_range(BB)) { + if (Inst.getType()->isVoidTy()) + continue; + if (tryToReplaceWithConstant(Solver, &Inst)) { + if (Inst.isSafeToRemove()) + Inst.eraseFromParent(); + // Hey, we just changed something! + MadeChanges = true; + ++InstRemovedStat; + } + } + return MadeChanges; +} + // runSCCP() - Run the Sparse Conditional Constant Propagation algorithm, // and return true if the function was modified. static bool runSCCP(Function &F, const DataLayout &DL, @@ -1647,21 +1664,7 @@ static bool runSCCP(Function &F, const DataLayout &DL, continue; } - // Iterate over all of the instructions in a function, replacing them with - // constants if we have found them to be of constant values. - for (BasicBlock::iterator BI = BB.begin(), E = BB.end(); BI != E;) { - Instruction *Inst = &*BI++; - if (Inst->getType()->isVoidTy() || Inst->isTerminator()) - continue; - - if (tryToReplaceWithConstant(Solver, Inst)) { - if (isInstructionTriviallyDead(Inst)) - Inst->eraseFromParent(); - // Hey, we just changed something! - MadeChanges = true; - ++NumInstRemoved; - } - } + MadeChanges |= simplifyInstsInBlock(Solver, BB, NumInstRemoved); } return MadeChanges; @@ -1890,30 +1893,19 @@ bool llvm::runIPSCCP( } } - for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { - if (!Solver.isBlockExecutable(&*BB)) { - LLVM_DEBUG(dbgs() << " BasicBlock Dead:" << *BB); + for (BasicBlock &BB : F) { + if (!Solver.isBlockExecutable(&BB)) { + LLVM_DEBUG(dbgs() << " BasicBlock Dead:" << BB); ++NumDeadBlocks; MadeChanges = true; - if (&*BB != &F.front()) - BlocksToErase.push_back(&*BB); + if (&BB != &F.front()) + BlocksToErase.push_back(&BB); continue; } - for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) { - Instruction *Inst = &*BI++; - if (Inst->getType()->isVoidTy()) - continue; - if (tryToReplaceWithConstant(Solver, Inst)) { - if (Inst->isSafeToRemove()) - Inst->eraseFromParent(); - // Hey, we just changed something! - MadeChanges = true; - ++IPNumInstRemoved; - } - } + MadeChanges |= simplifyInstsInBlock(Solver, BB, IPNumInstRemoved); } DomTreeUpdater DTU = Solver.getDTU(F);