forked from OSchip/llvm-project
[CGP] Reset DT when optimizing select instructions
Summary: A recent fix (r355751) caused a compile time regression because setting the ModifiedDT flag in optimizeSelectInst means that each time a select instruction is optimized the function walk in runOnFunction stops and restarts again (which was needed to build a new DT before we started building it lazily in r356937). Now that the DT is built lazily, a simple fix is to just reset the DT at this point, rather than restarting the whole function walk. In the future other places that set ModifiedDT may want to switch to just resetting the DT directly. But that will require an evaluation to ensure that they don't otherwise need to restart the function walk. Reviewers: spatel Subscribers: jdoerfert, llvm-commits, xur Tags: #llvm Differential Revision: https://reviews.llvm.org/D59889 llvm-svn: 357111
This commit is contained in:
parent
eaf4df4782
commit
b7e213808c
|
@ -362,7 +362,7 @@ class TypePromotionTransaction;
|
|||
bool optimizeExt(Instruction *&I);
|
||||
bool optimizeExtUses(Instruction *I);
|
||||
bool optimizeLoadExt(LoadInst *Load);
|
||||
bool optimizeSelectInst(SelectInst *SI, bool &ModifiedDT);
|
||||
bool optimizeSelectInst(SelectInst *SI);
|
||||
bool optimizeShuffleVectorInst(ShuffleVectorInst *SVI);
|
||||
bool optimizeSwitchInst(SwitchInst *SI);
|
||||
bool optimizeExtractElementInst(Instruction *Inst);
|
||||
|
@ -5921,7 +5921,7 @@ static Value *getTrueOrFalseValue(
|
|||
|
||||
/// If we have a SelectInst that will likely profit from branch prediction,
|
||||
/// turn it into a branch.
|
||||
bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI, bool &ModifiedDT) {
|
||||
bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI) {
|
||||
// If branch conversion isn't desirable, exit early.
|
||||
if (DisableSelectToBranch || OptSize || !TLI)
|
||||
return false;
|
||||
|
@ -5962,7 +5962,11 @@ bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI, bool &ModifiedDT) {
|
|||
!isFormingBranchFromSelectProfitable(TTI, TLI, SI))
|
||||
return false;
|
||||
|
||||
ModifiedDT = true;
|
||||
// The DominatorTree needs to be rebuilt by any consumers after this
|
||||
// transformation. We simply reset here rather than setting the ModifiedDT
|
||||
// flag to avoid restarting the function walk in runOnFunction for each
|
||||
// select optimized.
|
||||
DT.reset();
|
||||
|
||||
// Transform a sequence like this:
|
||||
// start:
|
||||
|
@ -7016,7 +7020,7 @@ bool CodeGenPrepare::optimizeInst(Instruction *I, bool &ModifiedDT) {
|
|||
case Instruction::Call:
|
||||
return optimizeCallInst(cast<CallInst>(I), ModifiedDT);
|
||||
case Instruction::Select:
|
||||
return optimizeSelectInst(cast<SelectInst>(I), ModifiedDT);
|
||||
return optimizeSelectInst(cast<SelectInst>(I));
|
||||
case Instruction::ShuffleVector:
|
||||
return optimizeShuffleVectorInst(cast<ShuffleVectorInst>(I));
|
||||
case Instruction::Switch:
|
||||
|
|
Loading…
Reference in New Issue