Skip to content

Commit ed113e7

Browse files
authored
[DFAJumpThreading] Update domtree lazily (llvm#162240)
1 parent f0a787b commit ed113e7

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ class DFAJumpThreading {
158158
void
159159
unfoldSelectInstrs(DominatorTree *DT,
160160
const SmallVector<SelectInstToUnfold, 4> &SelectInsts) {
161-
DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager);
161+
// TODO: Have everything use a single lazy DTU
162+
DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
162163
SmallVector<SelectInstToUnfold, 4> Stack(SelectInsts);
163164

164165
while (!Stack.empty()) {
@@ -977,8 +978,6 @@ struct TransformDFA {
977978

978979
/// Transform each threading path to effectively jump thread the DFA.
979980
void createAllExitPaths() {
980-
DomTreeUpdater DTU(*DT, DomTreeUpdater::UpdateStrategy::Eager);
981-
982981
// Move the switch block to the end of the path, since it will be duplicated
983982
BasicBlock *SwitchBlock = SwitchPaths->getSwitchBlock();
984983
for (ThreadingPath &TPath : SwitchPaths->getThreadingPaths()) {
@@ -995,15 +994,18 @@ struct TransformDFA {
995994
SmallPtrSet<BasicBlock *, 16> BlocksToClean;
996995
BlocksToClean.insert_range(successors(SwitchBlock));
997996

998-
for (const ThreadingPath &TPath : SwitchPaths->getThreadingPaths()) {
999-
createExitPath(NewDefs, TPath, DuplicateMap, BlocksToClean, &DTU);
1000-
NumPaths++;
1001-
}
997+
{
998+
DomTreeUpdater DTU(*DT, DomTreeUpdater::UpdateStrategy::Lazy);
999+
for (const ThreadingPath &TPath : SwitchPaths->getThreadingPaths()) {
1000+
createExitPath(NewDefs, TPath, DuplicateMap, BlocksToClean, &DTU);
1001+
NumPaths++;
1002+
}
10021003

1003-
// After all paths are cloned, now update the last successor of the cloned
1004-
// path so it skips over the switch statement
1005-
for (const ThreadingPath &TPath : SwitchPaths->getThreadingPaths())
1006-
updateLastSuccessor(TPath, DuplicateMap, &DTU);
1004+
// After all paths are cloned, now update the last successor of the cloned
1005+
// path so it skips over the switch statement
1006+
for (const ThreadingPath &TPath : SwitchPaths->getThreadingPaths())
1007+
updateLastSuccessor(TPath, DuplicateMap, &DTU);
1008+
}
10071009

10081010
// For each instruction that was cloned and used outside, update its uses
10091011
updateSSA(NewDefs);

0 commit comments

Comments
 (0)