[DAG] check more operands for cycles when merging stores.
authorTim Northover <tnorthover@apple.com>
Wed, 24 Oct 2018 21:36:34 +0000 (21:36 +0000)
committerTim Northover <tnorthover@apple.com>
Wed, 24 Oct 2018 21:36:34 +0000 (21:36 +0000)
commit05fe8f918b580d765891e4e9a404080e20feb2d9
treecbb0494efcb762845bbb011a7b18eff9cd13fcc1
parent76ccec07b4fa0cc68dfd07d557e7fb661804a468
[DAG] check more operands for cycles when merging stores.

Until now, we've only checked whether merging stores would cause a cycle via
the value argument, but the address and indexed offset arguments are also
capable of creating cycles in some situations.

The addresses are all base+offset with notionally the same base, but the base
SDNode may still be different (e.g. via an indexed load in one case, and an
ISD::ADD elsewhere). This allows cycles to creep in if one of these sources
depends on another.

The indexed offset is usually undef (representing a non-indexed store), but on
some architectures (e.g. 32-bit ARM-mode ARM) it can be an arbitrary value,
again allowing dependency cycles to creep in.

llvm-svn: 345200
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp