diff options
author | Nikita Popov <npopov@redhat.com> | 2025-06-25 09:29:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-25 09:29:37 +0200 |
commit | 7c38ee26d44124c93dc1553cde36837928c96d41 (patch) | |
tree | d5240572bb727910eee6fa63eacb37621db83231 /llvm/lib/Analysis/BasicAliasAnalysis.cpp | |
parent | 5238f06f723482d1c058d800fb438c507e41b5d9 (diff) | |
download | llvm-7c38ee26d44124c93dc1553cde36837928c96d41.zip llvm-7c38ee26d44124c93dc1553cde36837928c96d41.tar.gz llvm-7c38ee26d44124c93dc1553cde36837928c96d41.tar.bz2 |
[FunctionAttrs][IR] Fix memory attr inference for volatile mem intrinsics (#122926)
Per LangRef volatile operations can read and write inaccessible memory:
> any volatile operation can read and/or modify state which is not
> accessible via a regular load or store in this module
Model this by adding inaccessible memory effects in getMemoryEffects()
if the operation is volatile.
In the future, we should model volatile using operand bundles instead.
Fixes https://github.com/llvm/llvm-project/issues/120932.
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index 31611df..86a2edb 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -839,6 +839,10 @@ MemoryEffects BasicAAResult::getMemoryEffects(const CallBase *Call, FuncME |= MemoryEffects::readOnly(); if (Call->hasClobberingOperandBundles()) FuncME |= MemoryEffects::writeOnly(); + if (Call->isVolatile()) { + // Volatile operations also access inaccessible memory. + FuncME |= MemoryEffects::inaccessibleMemOnly(); + } Min &= FuncME; } |