[PATCH] D94470: [LSR] Don't break a critical edge if parent ends with "callbr"
Bill Wendling via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 12 15:14:48 PST 2021
void added inline comments.
================
Comment at: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:5594-5595
+
+ // Also bail out if we have a PHI with a value from a block ending in a
+ // CallBrInst, because those also can't be split for similar reasons.
+ for (BasicBlock *PredBB : PN->blocks())
----------------
void wrote:
> nickdesaulniers wrote:
> > MaskRay wrote:
> > > void wrote:
> > > > nickdesaulniers wrote:
> > > > > Can this comment be made more precise, I don't think what's described is what's being tested?
> > > > It's pretty accurate as is. :) I'm not sure how else to word it.
> > > The change only affects `llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp`, not any codegen part, so I hope this can be tested with opt. Usually this should check the produced instructions.
> > >
> > > If the resulting IR is correct but codegen somehow crashes, then it is probably a codegen bug which should be separately fixed. If the output IR is actually incorrect, then the IR verifier should be fixed instead.
> > >
> > > Anyway I think the test should be added in an appropriate place and if this uncovers other issues those other issues should be reported as well.
> > Ah, yes sorry, I was looking at the first `phi` thinking WTF; didn't notice the second `phi` until just now.
> It appears that this pass is added only during code-gen:
>
> ```
> llvm/lib/CodeGen/TargetPassConfig.cpp: addPass(createLoopStrengthReducePass());
> llvm/lib/Passes/PassBuilder.cpp:#include "llvm/Transforms/Scalar/LoopStrengthReduce.h"
> llvm/lib/Passes/PassRegistry.def:LOOP_PASS("loop-reduce", LoopStrengthReducePass())
> llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:/// (LoopStrengthReduce.cpp) and memory optimization for address mode
> llvm/lib/Target/NVPTX/NVPTXISelLowering.h: /// reduction (LoopStrengthReduce.cpp) and memory optimization for
> llvm/lib/Transforms/Scalar/CMakeLists.txt: LoopStrengthReduce.cpp
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp://===- LoopStrengthReduce.cpp - Strength Reduce IVs in Loops --------------===//
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:#include "llvm/Transforms/Scalar/LoopStrengthReduce.h"
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:class LoopStrengthReduce : public LoopPass {
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp: LoopStrengthReduce();
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:LoopStrengthReduce::LoopStrengthReduce() : LoopPass(ID) {
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp: initializeLoopStrengthReducePass(*PassRegistry::getPassRegistry());
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:void LoopStrengthReduce::getAnalysisUsage(AnalysisUsage &AU) const {
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager & /*LPM*/) {
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:PreservedAnalyses LoopStrengthReducePass::run(Loop &L, LoopAnalysisManager &AM,
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:char LoopStrengthReduce::ID = 0;
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:INITIALIZE_PASS_BEGIN(LoopStrengthReduce, "loop-reduce",
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:INITIALIZE_PASS_END(LoopStrengthReduce, "loop-reduce",
> llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:Pass *llvm::createLoopStrengthReducePass() { return new LoopStrengthReduce(); }
> llvm/lib/Transforms/Scalar/Scalar.cpp: initializeLoopStrengthReducePass(Registry);
> ```
Sorry. Fixed.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D94470/new/
https://reviews.llvm.org/D94470
More information about the llvm-commits
mailing list