[PATCH] D18336: Prevent construction of cycle in DAG store merge
James Y Knight via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 24 12:03:04 PDT 2016
jyknight added inline comments.
================
Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:11136
@@ +11135,3 @@
+
+static void markDependence(SDNode* N) {
+ if (!N)
----------------
I'm not sure if it's valid to use setNodeId here. But that's irrelevant, because this function shouldn't exist, since the code should be using hasPredecessor.
================
Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:11182
@@ +11181,3 @@
+
+ //Check if merging store candidate would cause a loop.
+ if (UseAA){
----------------
There are formatting/spacing issues throughout this. Please clang-format.
================
Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:11192
@@ +11191,3 @@
+ Worklist.push_back(StoreNodes[i].MemNode);
+ (DAG.getEntryNode().getNode())->
+ hasPredecessorHelper(StoreNodes[0].MemNode, Visited, Worklist);
----------------
This is obfuscated; please refactor the hasPredecessor family to have a static function which requires the worklist to be pre-populated, instead of passing in a dummy node here.
================
Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:11205
@@ +11204,3 @@
+ Node.setNodeId(Unmarked);
+ markDependence(LatestOp);
+ for (unsigned i=0; i < NumStores; ++i) {
----------------
Should use hasPredecessor.
================
Comment at: test/CodeGen/AArch64/vector_merge_dep_check.ll:10
@@ +9,3 @@
+; Function Attrs: noinline norecurse nounwind ssp uwtable
+define void @_ZN5Eigen8internal13gemm_pack_rhsINSt3__17complexIfEElLi2ELi0ELb0ELb1EEclEPS4_PKS4_lllll() #0 align 2 {
+entry:
----------------
This test can almost certainly be simplified. It would be nice to spend a bit of time to remove irrelevant stuff from it so it's easier to see what's actually going on is just:
%l1 = load
store half of %l1 -> offset 0
%l2 = load
store half of %l2 -> offset -1
store half of %l2 -> offset 1
And then, merging the store to offsets -1 and 0 into a single store, which results in the %l2 load chain-depending on it, but yet the merged-store requires that load as a value.
(I think)
http://reviews.llvm.org/D18336
More information about the llvm-commits
mailing list