[llvm] [TableGen] Ignore inaccessible memory when checking pattern flags (PR #90061)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 25 07:19:43 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Jay Foad (jayfoad)
<details>
<summary>Changes</summary>
In the AMDGPU backend we have some cases where we'd like to mark an
intrinsic as IntrInaccessibleMemOnly to model dependencies, but the
corresponding MachineInstrs use uses/defs of a special physical register
to express the same thing. In this case TableGen would complain:
Pattern doesn't match mayLoad/mayStore = 0
but the error is not useful.
---
Full diff: https://github.com/llvm/llvm-project/pull/90061.diff
1 Files Affected:
- (modified) llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp (+9-1)
``````````diff
diff --git a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp
index 7a5d2be3ae95b2..e0144a9d8ed2a7 100644
--- a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp
+++ b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp
@@ -3616,7 +3616,15 @@ class InstAnalyzer {
hasChain = true;
if (const CodeGenIntrinsic *IntInfo = N.getIntrinsicInfo(CDP)) {
- ModRefInfo MR = IntInfo->ME.getModRef();
+ // Ignore reads/writes to inaccessible memory. These should not imply
+ // mayLoad/mayStore on the instruction because they are often used to
+ // model dependencies that Machine IR expresses as uses/defs of a
+ // special physical register.
+ ModRefInfo MR = ModRefInfo::NoModRef;
+ for (MemoryEffects::Location Loc : MemoryEffects::locations()) {
+ if (Loc != MemoryEffects::Location::InaccessibleMem)
+ MR |= IntInfo->ME.getModRef();
+ }
// If this is an intrinsic, analyze it.
if (isRefSet(MR))
mayLoad = true; // These may load memory.
``````````
</details>
https://github.com/llvm/llvm-project/pull/90061
More information about the llvm-commits
mailing list