[SimplifyCFG] Teach SimplifyEqualityComparisonWithOnlyPredecessor() to preserve DomTree, part 2

This commit is contained in:
Roman Lebedev 2020-12-29 20:31:37 +03:00
parent 6027e05dbf
commit fe9bdd9621
No known key found for this signature in database
GPG Key ID: 083C3EBB4A1689E0
4 changed files with 10 additions and 5 deletions

View File

@ -970,12 +970,15 @@ bool SimplifyCFGOpt::SimplifyEqualityComparisonWithOnlyPredecessor(
if (!TheRealDest) if (!TheRealDest)
TheRealDest = ThisDef; TheRealDest = ThisDef;
SmallVector<DominatorTree::UpdateType, 2> Updates;
// Remove PHI node entries for dead edges. // Remove PHI node entries for dead edges.
BasicBlock *CheckEdge = TheRealDest; BasicBlock *CheckEdge = TheRealDest;
for (BasicBlock *Succ : successors(TIBB)) for (BasicBlock *Succ : successors(TIBB))
if (Succ != CheckEdge) if (Succ != CheckEdge) {
Succ->removePredecessor(TIBB); Succ->removePredecessor(TIBB);
else Updates.push_back({DominatorTree::Delete, TIBB, Succ});
} else
CheckEdge = nullptr; CheckEdge = nullptr;
// Insert the new branch. // Insert the new branch.
@ -987,6 +990,8 @@ bool SimplifyCFGOpt::SimplifyEqualityComparisonWithOnlyPredecessor(
<< "\n"); << "\n");
EraseTerminatorAndDCECond(TI); EraseTerminatorAndDCECond(TI);
if (DTU)
DTU->applyUpdatesPermissive(Updates);
return true; return true;
} }

View File

@ -1,4 +1,4 @@
; RUN: opt < %s -simplifycfg -disable-output ; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output
; END. ; END.
target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"

View File

@ -1,4 +1,4 @@
; RUN: opt %s -S -simplifycfg | FileCheck %s ; RUN: opt %s -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
; cmp1 implies cmp2 is false ; cmp1 implies cmp2 is false
; CHECK-LABEL: @test1 ; CHECK-LABEL: @test1

View File

@ -1,4 +1,4 @@
; RUN: opt < %s -simplifycfg -S | not grep bb17 ; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | not grep bb17
; PR1786 ; PR1786
define i32 @main() { define i32 @main() {