Skip to content

Commit cc1e2bb

Browse files
committed
[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.
1 parent fe9e442 commit cc1e2bb

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

llvm/lib/Analysis/BasicAliasAnalysis.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,10 @@ AliasResult BasicAAResult::aliasPHI(const PHINode *PN, LocationSize PNSize,
13601360
SmallPtrSet<Value *, 4> UniqueSrc;
13611361
Value *OnePhi = nullptr;
13621362
for (Value *PV1 : PN->incoming_values()) {
1363+
// Skip the phi itself being the incoming value.
1364+
if (PV1 == PN)
1365+
continue;
1366+
13631367
if (isa<PHINode>(PV1)) {
13641368
if (OnePhi && OnePhi != PV1) {
13651369
// To control potential compile time explosion, we choose to be

llvm/test/Analysis/BasicAA/recphi.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,7 @@ exit:
413413
ret void
414414
}
415415

416-
; NO-PHI-VALUES: MayAlias: i8* %a, i8* %phi
417-
; PHI-VALUES: MustAlias: i8* %a, i8* %phi
416+
; CHECK: MustAlias: i8* %a, i8* %phi
418417
define void @phi_contains_self() {
419418
entry:
420419
%a = alloca i32

0 commit comments

Comments
 (0)