[PATCH] D23021: GVN-hoist: compute DFS numbers once
Sebastian Pop via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 3 14:02:28 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL277650: GVN-hoist: compute DFS numbers once (authored by spop).
Changed prior to commit:
https://reviews.llvm.org/D23021?vs=66339&id=66710#toc
Repository:
rL LLVM
https://reviews.llvm.org/D23021
Files:
llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
Index: llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
+++ llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
@@ -72,8 +72,16 @@
//
// assert(A != B);
- unsigned ADFS = DFSNumber.lookup(A);
- unsigned BDFS = DFSNumber.lookup(B);
+ const BasicBlock *BA = A->getParent();
+ const BasicBlock *BB = B->getParent();
+ unsigned ADFS, BDFS;
+ if (BA == BB) {
+ ADFS = DFSNumber.lookup(A);
+ BDFS = DFSNumber.lookup(B);
+ } else {
+ ADFS = DFSNumber.lookup(BA);
+ BDFS = DFSNumber.lookup(BB);
+ }
assert (ADFS && BDFS);
return ADFS < BDFS;
}
@@ -195,15 +203,17 @@
bool Res = false;
MemorySSA M(F, AA, DT);
MSSA = &M;
+ // Perform DFS Numbering of instructions.
+ unsigned BBI = 0;
+ for (const BasicBlock *BB : depth_first(&F.getEntryBlock())) {
+ DFSNumber[BB] = ++BBI;
+ unsigned I = 0;
+ for (auto &Inst: *BB)
+ DFSNumber[&Inst] = ++I;
+ }
// FIXME: use lazy evaluation of VN to avoid the fix-point computation.
while (1) {
- // Perform DFS Numbering of instructions.
- unsigned I = 0;
- for (const BasicBlock *BB : depth_first(&F.getEntryBlock()))
- for (auto &Inst: *BB)
- DFSNumber.insert({&Inst, ++I});
-
auto HoistStat = hoistExpressions(F);
if (HoistStat.first + HoistStat.second == 0)
return Res;
@@ -215,9 +225,6 @@
VN.clear();
Res = true;
-
- // DFS numbers change when instructions are hoisted: clear and recompute.
- DFSNumber.clear();
}
return Res;
@@ -741,7 +748,10 @@
continue;
// Move the instruction at the end of HoistPt.
- Repl->moveBefore(HoistPt->getTerminator());
+ Instruction *Last = HoistPt->getTerminator();
+ Repl->moveBefore(Last);
+
+ DFSNumber[Repl] = DFSNumber[Last]++;
}
MemoryAccess *NewMemAcc = nullptr;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23021.66710.patch
Type: text/x-patch
Size: 2033 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160803/56b6ea7d/attachment.bin>
More information about the llvm-commits
mailing list