[PATCH] D24517: GVN-hoist: fix store past load dependence analysis (PR30216)

Sebastian Pop via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 13 11:46:52 PDT 2016


sebpop created this revision.
sebpop added a reviewer: dberlin.
sebpop added a subscriber: llvm-commits.

To hoist stores past loads, we used to search for potential
conflicting loads on the hoisting path by following a MemorySSA
def-def link from the store to be hoisted to the previous
defining memory access, and from there we followed the def-use
chains to all the uses that occur on the hoisting path.  The
problem is that the def-def link may point to a store that does
not alias with the store to be hoisted, and so the loads that are
walked may not alias with the store to be hoisted, and even as in
the testcase of PR30216, the loads that may alias with the store
to be hoisted are not visited.

The current patch visits all loads on the path from the store to
be hoisted to the hoisting position and uses the alias analysis
to ask whether the store may alias the load.  I was not able to
use the MemorySSA functionality to ask for whether load and
store are clobbered: I'm not sure which function to call, so I
used a call to AA->isNoAlias().

Store past store is still working as before using a MemorySSA
query: I added an extra test to pr30216.ll to make sure store
past store does not regress.


https://reviews.llvm.org/D24517

Files:
  llvm/lib/Transforms/Scalar/GVNHoist.cpp
  llvm/test/Transforms/GVN/pr28626.ll
  llvm/test/Transforms/GVNHoist/pr28626.ll
  llvm/test/Transforms/GVNHoist/pr30216.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24517.71210.patch
Type: text/x-patch
Size: 8517 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160913/d3e5afe6/attachment.bin>


More information about the llvm-commits mailing list