[BasicAA] Handle phi with itself as incoming value
authorNikita Popov <npopov@redhat.com>
Fri, 9 Dec 2022 15:17:45 +0000 (16:17 +0100)
committerNikita Popov <npopov@redhat.com>
Fri, 9 Dec 2022 15:17:45 +0000 (16:17 +0100)
We can skip such incoming values. This was already done by
PhiValues if present, but we can also do this without the
additional analysis.

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

index 2b552bf..6aad258 100644 (file)
@@ -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
index 4d2fa39..3bf621f 100644 (file)
@@ -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