[llvm] cc1e2bb - [BasicAA] Handle phi with itself as incoming value

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 9 07:20:08 PST 2022


Author: Nikita Popov
Date: 2022-12-09T16:17:45+01:00
New Revision: cc1e2bb4d44c6a47705faff52fc62e83917998d0

URL: https://github.com/llvm/llvm-project/commit/cc1e2bb4d44c6a47705faff52fc62e83917998d0
DIFF: https://github.com/llvm/llvm-project/commit/cc1e2bb4d44c6a47705faff52fc62e83917998d0.diff

LOG: [BasicAA] Handle phi with itself as incoming value

We can skip such incoming values. This was already done by
PhiValues if present, but we can also do this without the
additional analysis.

Added: 
    

Modified: 
    llvm/lib/Analysis/BasicAliasAnalysis.cpp
    llvm/test/Analysis/BasicAA/recphi.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index 2b552bf97406..6aad2581e06a 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -1360,6 +1360,10 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize,
     SmallPtrSet<Value *, 4> UniqueSrc;
     Value *OnePhi = nullptr;
     for (Value *PV1 : PN->incoming_values()) {
+      // Skip the phi itself being the incoming value.
+      if (PV1 == PN)
+        continue;
+
       if (isa<PHINode>(PV1)) {
         if (OnePhi && OnePhi != PV1) {
           // To control potential compile time explosion, we choose to be

diff  --git a/llvm/test/Analysis/BasicAA/recphi.ll b/llvm/test/Analysis/BasicAA/recphi.ll
index 4d2fa3997539..3bf621f07222 100644
--- a/llvm/test/Analysis/BasicAA/recphi.ll
+++ b/llvm/test/Analysis/BasicAA/recphi.ll
@@ -413,8 +413,7 @@ exit:
   ret void
 }
 
-; NO-PHI-VALUES: MayAlias: i8* %a, i8* %phi
-; PHI-VALUES: MustAlias: i8* %a, i8* %phi
+; CHECK: MustAlias: i8* %a, i8* %phi
 define void @phi_contains_self() {
 entry:
   %a = alloca i32


        


More information about the llvm-commits mailing list