diff options
author | Jean-Michel Gorius <jean-michel.gorius@ens-rennes.fr> | 2020-04-24 22:52:31 +0200 |
---|---|---|
committer | Jean-Michel Gorius <jean-michel.gorius@ens-rennes.fr> | 2020-04-24 22:54:46 +0200 |
commit | 505685a67a77c06a72f45e62ca341d7e45dfa49c (patch) | |
tree | 7596af99df5b18be3c029ed6e9a972f1ebf1f37f /llvm/lib/CodeGen/MachineInstr.cpp | |
parent | b46b1a916d44216f0c70de55ae2123eb9de69027 (diff) | |
download | llvm-505685a67a77c06a72f45e62ca341d7e45dfa49c.zip llvm-505685a67a77c06a72f45e62ca341d7e45dfa49c.tar.gz llvm-505685a67a77c06a72f45e62ca341d7e45dfa49c.tar.bz2 |
[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
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index 8ee85c6..7afa61f 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -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; |