[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