[PATCH] D55050: [LoopSimplifyCFG] Update MemorySSA in terminator folding. PR39783
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 30 02:09:14 PST 2018
This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rL347979: [LoopSimplifyCFG] Update MemorySSA in terminator folding. PR39783 (authored by mkazantsev, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D55050?vs=176056&id=176061#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55050/new/
https://reviews.llvm.org/D55050
Files:
llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
llvm/trunk/test/Transforms/LoopSimplifyCFG/pr39783.ll
Index: llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
+++ llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
@@ -42,7 +42,7 @@
#define DEBUG_TYPE "loop-simplifycfg"
static cl::opt<bool> EnableTermFolding("enable-loop-simplifycfg-term-folding",
- cl::init(false));
+ cl::init(true));
STATISTIC(NumTerminatorsFolded,
"Number of terminators folded to unconditional branches");
@@ -83,6 +83,7 @@
Loop &L;
LoopInfo &LI;
DominatorTree &DT;
+ MemorySSAUpdater *MSSAU;
// Whether or not the current loop will still exist after terminator constant
// folding will be done. In theory, there are two ways how it can happen:
@@ -257,6 +258,8 @@
// the one-input Phi because it is a LCSSA Phi.
bool PreserveLCSSAPhi = !L.contains(Succ);
Succ->removePredecessor(BB, PreserveLCSSAPhi);
+ if (MSSAU)
+ MSSAU->removeEdge(BB, Succ);
} else
++TheOnlySuccDuplicates;
@@ -267,6 +270,8 @@
bool PreserveLCSSAPhi = !L.contains(TheOnlySucc);
for (unsigned Dup = 1; Dup < TheOnlySuccDuplicates; ++Dup)
TheOnlySucc->removePredecessor(BB, PreserveLCSSAPhi);
+ if (MSSAU && TheOnlySuccDuplicates > 1)
+ MSSAU->removeDuplicatePhiEdgesBetween(BB, TheOnlySucc);
IRBuilder<> Builder(BB->getContext());
Instruction *Term = BB->getTerminator();
@@ -282,8 +287,9 @@
}
public:
- ConstantTerminatorFoldingImpl(Loop &L, LoopInfo &LI, DominatorTree &DT)
- : L(L), LI(LI), DT(DT) {}
+ ConstantTerminatorFoldingImpl(Loop &L, LoopInfo &LI, DominatorTree &DT,
+ MemorySSAUpdater *MSSAU)
+ : L(L), LI(LI), DT(DT), MSSAU(MSSAU) {}
bool run() {
assert(L.getLoopLatch() && "Should be single latch!");
@@ -364,7 +370,8 @@
/// Turn branches and switches with known constant conditions into unconditional
/// branches.
-static bool constantFoldTerminators(Loop &L, DominatorTree &DT, LoopInfo &LI) {
+static bool constantFoldTerminators(Loop &L, DominatorTree &DT, LoopInfo &LI,
+ MemorySSAUpdater *MSSAU) {
if (!EnableTermFolding)
return false;
@@ -373,7 +380,7 @@
if (!L.getLoopLatch())
return false;
- ConstantTerminatorFoldingImpl BranchFolder(L, LI, DT);
+ ConstantTerminatorFoldingImpl BranchFolder(L, LI, DT, MSSAU);
return BranchFolder.run();
}
@@ -410,7 +417,7 @@
bool Changed = false;
// Constant-fold terminators with known constant conditions.
- Changed |= constantFoldTerminators(L, DT, LI);
+ Changed |= constantFoldTerminators(L, DT, LI, MSSAU);
// Eliminate unconditional branches by merging blocks into their predecessors.
Changed |= mergeBlocksIntoPredecessors(L, DT, LI, MSSAU);
Index: llvm/trunk/test/Transforms/LoopSimplifyCFG/pr39783.ll
===================================================================
--- llvm/trunk/test/Transforms/LoopSimplifyCFG/pr39783.ll
+++ llvm/trunk/test/Transforms/LoopSimplifyCFG/pr39783.ll
@@ -1,4 +1,3 @@
-; XFAIL: *
; REQUIRES: asserts
; RUN: opt -march=z13 -S -loop-simplifycfg -enable-mssa-loop-dependency -enable-loop-simplifycfg-term-folding 2>&1 < %s | FileCheck %s
target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55050.176061.patch
Type: text/x-patch
Size: 3474 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181130/1cf0efe9/attachment.bin>
More information about the llvm-commits
mailing list