[llvm] [LSR] Split the -lsr-term-fold transformation into it's own pass (PR #104234)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 14 13:56:23 PDT 2024
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff d385485450652dd75e0946d543c6bb4e0f3abf68 d82e407d836f71fd3cf176a505a170201f663fa8 --extensions cpp,h -- llvm/include/llvm/Transforms/Scalar/LoopTermFold.h llvm/lib/Transforms/Scalar/LoopTermFold.cpp llvm/include/llvm/Analysis/TargetTransformInfo.h llvm/include/llvm/Analysis/TargetTransformInfoImpl.h llvm/include/llvm/CodeGen/BasicTTIImpl.h llvm/include/llvm/CodeGen/TargetPassConfig.h llvm/include/llvm/InitializePasses.h llvm/include/llvm/LinkAllPasses.h llvm/include/llvm/Transforms/Scalar.h llvm/lib/Analysis/TargetTransformInfo.cpp llvm/lib/CodeGen/TargetPassConfig.cpp llvm/lib/Passes/PassBuilder.cpp llvm/lib/Target/RISCV/RISCVTargetMachine.cpp llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp llvm/lib/Transforms/Scalar/Scalar.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 3bf1840cf9..ba1ddd7991 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -168,7 +168,7 @@ void initializeLoopInfoWrapperPassPass(PassRegistry&);
void initializeLoopPassPass(PassRegistry&);
void initializeLoopSimplifyPass(PassRegistry&);
void initializeLoopStrengthReducePass(PassRegistry&);
-void initializeLoopTermFoldPass(PassRegistry&);
+void initializeLoopTermFoldPass(PassRegistry &);
void initializeLoopUnrollPass(PassRegistry&);
void initializeLowerAtomicLegacyPassPass(PassRegistry&);
void initializeLowerConstantIntrinsicsPass(PassRegistry&);
diff --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h
index b490e816f7..77345e0a7e 100644
--- a/llvm/include/llvm/LinkAllPasses.h
+++ b/llvm/include/llvm/LinkAllPasses.h
@@ -88,7 +88,7 @@ namespace {
(void) llvm::createLoopExtractorPass();
(void) llvm::createLoopSimplifyPass();
(void) llvm::createLoopStrengthReducePass();
- (void) llvm::createLoopTermFoldPass();
+ (void)llvm::createLoopTermFoldPass();
(void)llvm::createLoopUnrollPass();
(void) llvm::createLowerGlobalDtorsLegacyPass();
(void) llvm::createLowerInvokePass();
diff --git a/llvm/lib/Transforms/Scalar/LoopTermFold.cpp b/llvm/lib/Transforms/Scalar/LoopTermFold.cpp
index 1729492c1c..9809bff0ce 100644
--- a/llvm/lib/Transforms/Scalar/LoopTermFold.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopTermFold.cpp
@@ -169,8 +169,8 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
continue;
}
- if (Expander.isHighCostExpansion(TermValueSLocal, L, ExpansionBudget,
- &TTI, InsertPt)) {
+ if (Expander.isHighCostExpansion(TermValueSLocal, L, ExpansionBudget, &TTI,
+ InsertPt)) {
LLVM_DEBUG(
dbgs() << "Is too expensive to expand terminating value for phi node"
<< PN << "\n");
@@ -180,8 +180,7 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
// The candidate IV may have been otherwise dead and poison from the
// very first iteration. If we can't disprove that, we can't use the IV.
if (!mustExecuteUBIfPoisonOnPathTo(&PN, LoopLatch->getTerminator(), &DT)) {
- LLVM_DEBUG(dbgs() << "Can not prove poison safety for IV "
- << PN << "\n");
+ LLVM_DEBUG(dbgs() << "Can not prove poison safety for IV " << PN << "\n");
continue;
}
@@ -191,11 +190,11 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
// insert UB which didn't previously exist.
bool MustDropPoisonLocal = false;
Instruction *PostIncV =
- cast<Instruction>(PN.getIncomingValueForBlock(LoopLatch));
+ cast<Instruction>(PN.getIncomingValueForBlock(LoopLatch));
if (!mustExecuteUBIfPoisonOnPathTo(PostIncV, LoopLatch->getTerminator(),
&DT)) {
- LLVM_DEBUG(dbgs() << "Can not prove poison safety to insert use"
- << PN << "\n");
+ LLVM_DEBUG(dbgs() << "Can not prove poison safety to insert use" << PN
+ << "\n");
// If this is a complex recurrance with multiple instructions computing
// the backedge value, we might need to strip poison flags from all of
@@ -203,8 +202,8 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
if (PostIncV->getOperand(0) != &PN)
continue;
- // In order to perform the transform, we need to drop the poison generating
- // flags on this instruction (if any).
+ // In order to perform the transform, we need to drop the poison
+ // generating flags on this instruction (if any).
MustDropPoisonLocal = PostIncV->hasPoisonGeneratingFlags();
}
@@ -231,11 +230,9 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
return std::make_tuple(ToFold, ToHelpFold, TermValueS, MustDropPoison);
}
-static bool RunTermFold(Loop *L, ScalarEvolution &SE,
- DominatorTree &DT, LoopInfo &LI,
- const TargetTransformInfo &TTI,
- TargetLibraryInfo &TLI,
- MemorySSA *MSSA) {
+static bool RunTermFold(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
+ LoopInfo &LI, const TargetTransformInfo &TTI,
+ TargetLibraryInfo &TLI, MemorySSA *MSSA) {
std::unique_ptr<MemorySSAUpdater> MSSAU;
if (MSSA)
MSSAU = std::make_unique<MemorySSAUpdater>(MSSA);
@@ -253,9 +250,9 @@ static bool RunTermFold(Loop *L, ScalarEvolution &SE,
(void)ToFold;
LLVM_DEBUG(dbgs() << "To fold phi-node:\n"
- << *ToFold << "\n"
- << "New term-cond phi-node:\n"
- << *ToHelpFold << "\n");
+ << *ToFold << "\n"
+ << "New term-cond phi-node:\n"
+ << *ToHelpFold << "\n");
Value *StartValue = ToHelpFold->getIncomingValueForBlock(LoopPreheader);
(void)StartValue;
@@ -277,24 +274,25 @@ static bool RunTermFold(Loop *L, ScalarEvolution &SE,
LoopPreheader->getTerminator());
LLVM_DEBUG(dbgs() << "Start value of new term-cond phi-node:\n"
- << *StartValue << "\n"
- << "Terminating value of new term-cond phi-node:\n"
- << *TermValue << "\n");
+ << *StartValue << "\n"
+ << "Terminating value of new term-cond phi-node:\n"
+ << *TermValue << "\n");
// Create new terminating condition at loop latch
BranchInst *BI = cast<BranchInst>(LoopLatch->getTerminator());
ICmpInst *OldTermCond = cast<ICmpInst>(BI->getCondition());
IRBuilder<> LatchBuilder(LoopLatch->getTerminator());
Value *NewTermCond =
- LatchBuilder.CreateICmp(CmpInst::ICMP_EQ, LoopValue, TermValue,
- "lsr_fold_term_cond.replaced_term_cond");
+ LatchBuilder.CreateICmp(CmpInst::ICMP_EQ, LoopValue, TermValue,
+ "lsr_fold_term_cond.replaced_term_cond");
// Swap successors to exit loop body if IV equals to new TermValue
if (BI->getSuccessor(0) == L->getHeader())
BI->swapSuccessors();
LLVM_DEBUG(dbgs() << "Old term-cond:\n"
- << *OldTermCond << "\n"
- << "New term-cond:\n" << *NewTermCond << "\n");
+ << *OldTermCond << "\n"
+ << "New term-cond:\n"
+ << *NewTermCond << "\n");
BI->setCondition(NewTermCond);
@@ -340,7 +338,6 @@ void LoopTermFold::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addPreserved<MemorySSAWrapperPass>();
}
-
bool LoopTermFold::runOnLoop(Loop *L, LPPassManager & /*LPM*/) {
if (skipLoop(L))
return false;
@@ -373,14 +370,14 @@ PreservedAnalyses LoopTermFoldPass::run(Loop &L, LoopAnalysisManager &AM,
char LoopTermFold::ID = 0;
-INITIALIZE_PASS_BEGIN(LoopTermFold, "loop-term-fold",
- "Loop Terminator Folding", false, false)
+INITIALIZE_PASS_BEGIN(LoopTermFold, "loop-term-fold", "Loop Terminator Folding",
+ false, false)
INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass)
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
-INITIALIZE_PASS_END(LoopTermFold, "loop-term-fold",
- "Loop Terminator Folding", false, false)
+INITIALIZE_PASS_END(LoopTermFold, "loop-term-fold", "Loop Terminator Folding",
+ false, false)
Pass *llvm::createLoopTermFoldPass() { return new LoopTermFold(); }
``````````
</details>
https://github.com/llvm/llvm-project/pull/104234
More information about the llvm-commits
mailing list