aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/LCSSA.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2023-06-05 16:41:49 +0200
committerNikita Popov <npopov@redhat.com>2023-06-05 16:45:38 +0200
commit143ed21b26b2c68695e9f74f0ce4632b8a2e000b (patch)
tree9d55edc6576c7629c80c7f5c6e0205af3251690c /llvm/lib/Transforms/Utils/LCSSA.cpp
parent81cc929d4f9bb8ed279b6b21284ea9a1ca7881b1 (diff)
downloadllvm-143ed21b26b2c68695e9f74f0ce4632b8a2e000b.zip
llvm-143ed21b26b2c68695e9f74f0ce4632b8a2e000b.tar.gz
llvm-143ed21b26b2c68695e9f74f0ce4632b8a2e000b.tar.bz2
Revert "[LCSSA] Remove unused ScalarEvolution argument (NFC)"
This reverts commit 5362a0d859d8e96b3f7c0437b7866e17a818a4f7. In preparation for reverting a dependent revision.
Diffstat (limited to 'llvm/lib/Transforms/Utils/LCSSA.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LCSSA.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/Utils/LCSSA.cpp b/llvm/lib/Transforms/Utils/LCSSA.cpp
index a6895cc..5f1c98c 100644
--- a/llvm/lib/Transforms/Utils/LCSSA.cpp
+++ b/llvm/lib/Transforms/Utils/LCSSA.cpp
@@ -76,6 +76,7 @@ static bool isExitBlock(BasicBlock *BB,
/// rewrite the uses.
bool llvm::formLCSSAForInstructions(SmallVectorImpl<Instruction *> &Worklist,
const DominatorTree &DT, const LoopInfo &LI,
+ ScalarEvolution *Se,
SmallVectorImpl<PHINode *> *PHIsToRemove,
SmallVectorImpl<PHINode *> *InsertedPHIs) {
SmallVector<Use *, 16> UsesToRewrite;
@@ -333,7 +334,8 @@ static void computeBlocksDominatingExits(
}
}
-bool llvm::formLCSSA(Loop &L, const DominatorTree &DT, const LoopInfo *LI) {
+bool llvm::formLCSSA(Loop &L, const DominatorTree &DT, const LoopInfo *LI,
+ ScalarEvolution *SE) {
bool Changed = false;
#ifdef EXPENSIVE_CHECKS
@@ -386,7 +388,7 @@ bool llvm::formLCSSA(Loop &L, const DominatorTree &DT, const LoopInfo *LI) {
}
}
- Changed = formLCSSAForInstructions(Worklist, DT, *LI);
+ Changed = formLCSSAForInstructions(Worklist, DT, *LI, SE);
assert(L.isLCSSAForm(DT));
@@ -395,22 +397,23 @@ bool llvm::formLCSSA(Loop &L, const DominatorTree &DT, const LoopInfo *LI) {
/// Process a loop nest depth first.
bool llvm::formLCSSARecursively(Loop &L, const DominatorTree &DT,
- const LoopInfo *LI) {
+ const LoopInfo *LI, ScalarEvolution *SE) {
bool Changed = false;
// Recurse depth-first through inner loops.
for (Loop *SubLoop : L.getSubLoops())
- Changed |= formLCSSARecursively(*SubLoop, DT, LI);
+ Changed |= formLCSSARecursively(*SubLoop, DT, LI, SE);
- Changed |= formLCSSA(L, DT, LI);
+ Changed |= formLCSSA(L, DT, LI, SE);
return Changed;
}
/// Process all loops in the function, inner-most out.
-static bool formLCSSAOnAllLoops(const LoopInfo *LI, const DominatorTree &DT) {
+static bool formLCSSAOnAllLoops(const LoopInfo *LI, const DominatorTree &DT,
+ ScalarEvolution *SE) {
bool Changed = false;
for (const auto &L : *LI)
- Changed |= formLCSSARecursively(*L, DT, LI);
+ Changed |= formLCSSARecursively(*L, DT, LI, SE);
return Changed;
}
@@ -424,6 +427,7 @@ struct LCSSAWrapperPass : public FunctionPass {
// Cached analysis information for the current function.
DominatorTree *DT;
LoopInfo *LI;
+ ScalarEvolution *SE;
bool runOnFunction(Function &F) override;
void verifyAnalysis() const override {
@@ -480,13 +484,17 @@ char &llvm::LCSSAID = LCSSAWrapperPass::ID;
bool LCSSAWrapperPass::runOnFunction(Function &F) {
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
- return formLCSSAOnAllLoops(LI, *DT);
+ auto *SEWP = getAnalysisIfAvailable<ScalarEvolutionWrapperPass>();
+ SE = SEWP ? &SEWP->getSE() : nullptr;
+
+ return formLCSSAOnAllLoops(LI, *DT, SE);
}
PreservedAnalyses LCSSAPass::run(Function &F, FunctionAnalysisManager &AM) {
auto &LI = AM.getResult<LoopAnalysis>(F);
auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
- if (!formLCSSAOnAllLoops(&LI, DT))
+ auto *SE = AM.getCachedResult<ScalarEvolutionAnalysis>(F);
+ if (!formLCSSAOnAllLoops(&LI, DT, SE))
return PreservedAnalyses::all();
PreservedAnalyses PA;