mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 21:50:40 +00:00
Add experimental -enable-lsr-phielim option.
I'm not sure we will need it in the long run, but the option is currently useful for checking if the output of LSR is "clean". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141634 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
204494149b
commit
a02bfced06
@ -83,6 +83,12 @@ cl::opt<bool> EnableNested(
|
||||
|
||||
cl::opt<bool> EnableRetry(
|
||||
"enable-lsr-retry", cl::Hidden, cl::desc("Enable LSR retry"));
|
||||
|
||||
// Temporary flag to cleanup congruent phis after LSR phi expansion.
|
||||
// It's currently disabled until we can determine whether it's truly useful or
|
||||
// not. The flag should be removed after the v3.0 release.
|
||||
cl::opt<bool> EnablePhiElim(
|
||||
"enable-lsr-phielim", cl::Hidden, cl::desc("Enable LSR phi elimination"));
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -3816,6 +3822,14 @@ LSRInstance::LSRInstance(const TargetLowering *tli, Loop *l, Pass *P)
|
||||
|
||||
// Skip nested loops until we can model them better with formulae.
|
||||
if (!EnableNested && !L->empty()) {
|
||||
|
||||
if (EnablePhiElim) {
|
||||
// Remove any extra phis created by processing inner loops.
|
||||
SmallVector<WeakVH, 16> DeadInsts;
|
||||
SCEVExpander Rewriter(SE, "lsr");
|
||||
Changed |= Rewriter.replaceCongruentIVs(L, &DT, DeadInsts);
|
||||
Changed |= DeleteTriviallyDeadInstructions(DeadInsts);
|
||||
}
|
||||
DEBUG(dbgs() << "LSR skipping outer loop " << *L << "\n");
|
||||
return;
|
||||
}
|
||||
@ -3861,6 +3875,14 @@ LSRInstance::LSRInstance(const TargetLowering *tli, Loop *l, Pass *P)
|
||||
|
||||
// Now that we've decided what we want, make it so.
|
||||
ImplementSolution(Solution, P);
|
||||
|
||||
if (EnablePhiElim) {
|
||||
// Remove any extra phis created by processing inner loops.
|
||||
SmallVector<WeakVH, 16> DeadInsts;
|
||||
SCEVExpander Rewriter(SE, "lsr");
|
||||
Changed |= Rewriter.replaceCongruentIVs(L, &DT, DeadInsts);
|
||||
Changed |= DeleteTriviallyDeadInstructions(DeadInsts);
|
||||
}
|
||||
}
|
||||
|
||||
void LSRInstance::print_factors_and_types(raw_ostream &OS) const {
|
||||
|
Loading…
Reference in New Issue
Block a user