diff --git a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp index 7a5d2be3ae95b..e0144a9d8ed2a 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.