DAGCombiner: Don't stop finding better chain on 2 aliases
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 13 Oct 2015 00:49:00 +0000 (00:49 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 13 Oct 2015 00:49:00 +0000 (00:49 +0000)
commit1349eb7659348cdb921bb3885baab14f412b8948
tree2c32bbc7781fdfa858033d51e9a0c8fd28563dc4
parenta4b41272897aebd7360d431179703403c832c8d3
DAGCombiner: Don't stop finding better chain on 2 aliases

The comment says this was stopped because it was unlikely to be
profitable. This is not true if you want to combine vector loads
with multiple components.

For a simple case that looks like

t0 = load t0 ...
t1 = load t0 ...
t2 = load t0 ...
t3 = load t0 ...

t4 = store t0:1, t0:1
  t5 = store t4, t1:0
    t6 = store t5, t2:0
  t7 = store t6, t3:0

We want to get all of these stores onto a chain
that is a TokenFactor of these N loads. This mostly
solves the AMDGPU merge-stores.ll regressions
with -combiner-alias-analysis for merging vector
stores of vector loads.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250138 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/AMDGPU/merge-stores.ll