aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/BasicAliasAnalysis.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-03-20 18:11:17 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-03-22 22:01:03 +0100
commitca28e32359c60da6216960522c545c0c20761a21 (patch)
tree8828d9f446801437088d792ef8308174811b68d6 /llvm/lib/Analysis/BasicAliasAnalysis.cpp
parentb00209ed100cf76acca2e7f8c8ae511658fe4816 (diff)
downloadllvm-ca28e32359c60da6216960522c545c0c20761a21.zip
llvm-ca28e32359c60da6216960522c545c0c20761a21.tar.gz
llvm-ca28e32359c60da6216960522c545c0c20761a21.tar.bz2
[IR] Mark assume/annotation as InaccessibleMemOnly
These intrinsics don't need to be marked as arbitrary writing, it's sufficient to write inaccessible memory (aka "side effect") to preserve control dependencies. This means less special-casing in BasicAA. This is intended as an alternative to D98925. Differential Revision: https://reviews.llvm.org/D99022
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/BasicAliasAnalysis.cpp25
1 files changed, 6 insertions, 19 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index a8c5b9c..86362f7 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -939,15 +939,9 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call,
return rv;
}
- // While the assume intrinsic is marked as arbitrarily writing so that
- // proper control dependencies will be maintained, it never aliases any
- // particular memory location.
- if (isIntrinsicCall(Call, Intrinsic::assume))
- return ModRefInfo::NoModRef;
-
- // Like assumes, guard intrinsics are also marked as arbitrarily writing so
- // that proper control dependencies are maintained but they never mods any
- // particular memory location.
+ // Guard intrinsics are marked as arbitrarily writing so that proper control
+ // dependencies are maintained but they never mods any particular memory
+ // location.
//
// *Unlike* assumes, guard intrinsics are modeled as reading memory since the
// heap state at the point the guard is issued needs to be consistent in case
@@ -991,16 +985,9 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call,
ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call1,
const CallBase *Call2,
AAQueryInfo &AAQI) {
- // While the assume intrinsic is marked as arbitrarily writing so that
- // proper control dependencies will be maintained, it never aliases any
- // particular memory location.
- if (isIntrinsicCall(Call1, Intrinsic::assume) ||
- isIntrinsicCall(Call2, Intrinsic::assume))
- return ModRefInfo::NoModRef;
-
- // Like assumes, guard intrinsics are also marked as arbitrarily writing so
- // that proper control dependencies are maintained but they never mod any
- // particular memory location.
+ // Guard intrinsics are marked as arbitrarily writing so that proper control
+ // dependencies are maintained but they never mods any particular memory
+ // location.
//
// *Unlike* assumes, guard intrinsics are modeled as reading memory since the
// heap state at the point the guard is issued needs to be consistent in case