forked from OSchip/llvm-project
[llvm][CodeGen] Check for memory instructions when querying for alias status
Summary: Add a check to make sure that MachineInstr::mayAlias returns prematurely if at least one of its instruction parameters does not access memory. This prevents calls to TargetInstrInfo::areMemAccessesTriviallyDisjoint with incompatible instructions. A side effect of this change is to render the mayAlias helper in the AArch64 load/store optimizer obsolete. We can now directly call the MachineInstr::mayAlias member function. Reviewers: hfinkel, t.p.northover, mcrosier, eli.friedman, efriedma Reviewed By: efriedma Subscribers: efriedma, kristof.beyls, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D78823
This commit is contained in:
parent
b46b1a916d
commit
505685a67a
llvm/lib
|
@ -1220,6 +1220,10 @@ bool MachineInstr::mayAlias(AAResults *AA, const MachineInstr &Other,
|
|||
if (!mayStore() && !Other.mayStore())
|
||||
return false;
|
||||
|
||||
// Both instructions must be memory operations to be able to alias.
|
||||
if (!mayLoadOrStore() || !Other.mayLoadOrStore())
|
||||
return false;
|
||||
|
||||
// Let the target decide if memory accesses cannot possibly overlap.
|
||||
if (TII->areMemAccessesTriviallyDisjoint(*this, Other))
|
||||
return false;
|
||||
|
|
|
@ -1144,24 +1144,11 @@ static int alignTo(int Num, int PowOf2) {
|
|||
return (Num + PowOf2 - 1) & ~(PowOf2 - 1);
|
||||
}
|
||||
|
||||
static bool mayAlias(MachineInstr &MIa, MachineInstr &MIb,
|
||||
AliasAnalysis *AA) {
|
||||
// One of the instructions must modify memory.
|
||||
if (!MIa.mayStore() && !MIb.mayStore())
|
||||
return false;
|
||||
|
||||
// Both instructions must be memory operations.
|
||||
if (!MIa.mayLoadOrStore() && !MIb.mayLoadOrStore())
|
||||
return false;
|
||||
|
||||
return MIa.mayAlias(AA, MIb, /*UseTBAA*/false);
|
||||
}
|
||||
|
||||
static bool mayAlias(MachineInstr &MIa,
|
||||
SmallVectorImpl<MachineInstr *> &MemInsns,
|
||||
AliasAnalysis *AA) {
|
||||
for (MachineInstr *MIb : MemInsns)
|
||||
if (mayAlias(MIa, *MIb, AA))
|
||||
if (MIa.mayAlias(AA, *MIb, /*UseTBAA*/ false))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -1219,7 +1206,7 @@ bool AArch64LoadStoreOpt::findMatchingStore(
|
|||
return false;
|
||||
|
||||
// If we encounter a store aliased with the load, return early.
|
||||
if (MI.mayStore() && mayAlias(LoadMI, MI, AA))
|
||||
if (MI.mayStore() && LoadMI.mayAlias(AA, MI, /*UseTBAA*/ false))
|
||||
return false;
|
||||
} while (MBBI != B && Count < Limit);
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue