[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