mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
DAGCombiner: Assume invariant load cannot alias a store
The motivation is to allow GatherAllAliases / FindBetterChain to not give up on dependent loads of a pointer from constant memory. This is important for AMDGPU, because most loads are pointers derived from a load of a kernel argument from constant memory. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241948 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -13844,6 +13844,15 @@ bool DAGCombiner::isAlias(LSBaseSDNode *Op0, LSBaseSDNode *Op1) const {
|
||||
// If they are both volatile then they cannot be reordered.
|
||||
if (Op0->isVolatile() && Op1->isVolatile()) return true;
|
||||
|
||||
// If one operation reads from invariant memory, and the other may store, they
|
||||
// cannot alias. These should really be checking the equivalent of mayWrite,
|
||||
// but it only matters for memory nodes other than load /store.
|
||||
if (Op0->isInvariant() && Op1->writeMem())
|
||||
return false;
|
||||
|
||||
if (Op1->isInvariant() && Op0->writeMem())
|
||||
return false;
|
||||
|
||||
// Gather base node and offset information.
|
||||
SDValue Base1, Base2;
|
||||
int64_t Offset1, Offset2;
|
||||
|
Reference in New Issue
Block a user