[llvm] 2b37257 - [BasicAA] Don't track visited blocks for phi-phi alias query
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 22 13:12:32 PDT 2020
Author: Nikita Popov
Date: 2020-10-22T22:12:21+02:00
New Revision: 2b372570ee0be853f61de5feef7fc67b96bf1460
URL: https://github.com/llvm/llvm-project/commit/2b372570ee0be853f61de5feef7fc67b96bf1460
DIFF: https://github.com/llvm/llvm-project/commit/2b372570ee0be853f61de5feef7fc67b96bf1460.diff
LOG: [BasicAA] Don't track visited blocks for phi-phi alias query
We only need the VisitedPhiBBs to disambiguate comparisons of
values from two different loop iterations. If we're comparing
two phis from the same basic block in lock-step, the compared
values will always be on the same iteration.
While this also increases precision, this is mainly intended
to clarify the scope of VisitedPhiBBs.
Added:
Modified:
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/test/Analysis/BasicAA/phi-aa.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index 2c4a107603d8..3e1adaf84f6f 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -1535,10 +1535,6 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize,
LocationSize V2Size,
const AAMDNodes &V2AAInfo,
const Value *UnderV2, AAQueryInfo &AAQI) {
- // Track phi nodes we have visited. We use this information when we determine
- // value equivalence.
- VisitedPhiBBs.insert(PN->getParent());
-
// If the values are PHIs in the same block, we can do a more precise
// as well as efficient check: just check for aliases between the values
// on corresponding edges.
@@ -1655,6 +1651,11 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize,
if (isRecursive)
PNSize = LocationSize::unknown();
+ // In the recursive alias queries below, we may compare values from two
+ //
diff erent loop iterations. Keep track of visited phi blocks, which will
+ // be used when determining value equivalence.
+ VisitedPhiBBs.insert(PN->getParent());
+
AliasResult Alias = aliasCheck(V2, V2Size, V2AAInfo, V1Srcs[0], PNSize,
PNAAInfo, AAQI, UnderV2);
diff --git a/llvm/test/Analysis/BasicAA/phi-aa.ll b/llvm/test/Analysis/BasicAA/phi-aa.ll
index f1f98001f63d..299dc01e7e90 100644
--- a/llvm/test/Analysis/BasicAA/phi-aa.ll
+++ b/llvm/test/Analysis/BasicAA/phi-aa.ll
@@ -136,7 +136,7 @@ exit:
}
; CHECK-LABEL: phi_and_phi_cycle
-; CHECK: MayAlias: i32* %p1, i32* %p2
+; CHECK: NoAlias: i32* %p1, i32* %p2
define void @phi_and_phi_cycle(i32* noalias %x, i32* noalias %y) {
entry:
br label %loop
More information about the llvm-commits
mailing list