Skip to content

Commit d998eed

Browse files
committed
[ValueTracking] Skip incoming values that are the same as the phi
1 parent e10b2ba commit d998eed

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7824,6 +7824,8 @@ static bool isGuaranteedNotToBeUndefOrPoison(
78247824
unsigned Num = PN->getNumIncomingValues();
78257825
bool IsWellDefined = true;
78267826
for (unsigned i = 0; i < Num; ++i) {
7827+
if (PN == PN->getIncomingValue(i))
7828+
continue;
78277829
auto *TI = PN->getIncomingBlock(i)->getTerminator();
78287830
if (!isGuaranteedNotToBeUndefOrPoison(PN->getIncomingValue(i), AC, TI,
78297831
DT, Depth + 1, Kind)) {

llvm/test/Analysis/ValueTracking/phi-self.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ define i64 @other_noundef() {
88
; CHECK-NEXT: [[START:.*]]:
99
; CHECK-NEXT: br label %[[LOOP:.*]]
1010
; CHECK: [[LOOP]]:
11-
; CHECK-NEXT: [[NONPOISON:%.*]] = phi i64 [ [[NONPOISON]], %[[BB0:.*]] ], [ [[NONPOISON]], %[[BB1:.*]] ], [ [[NONPOISON]], %[[BB2:.*]] ], [ [[NONPOISON]], %[[BB:.*]] ], [ [[I:%.*]], %[[BACK_TO_LOOP:.*]] ], [ 0, %[[START]] ]
11+
; CHECK-NEXT: [[R:%.*]] = phi i64 [ [[R]], %[[BB0:.*]] ], [ [[R]], %[[BB1:.*]] ], [ [[R]], %[[BB2:.*]] ], [ [[R]], %[[BB:.*]] ], [ [[I:%.*]], %[[BACK_TO_LOOP:.*]] ], [ 0, %[[START]] ]
1212
; CHECK-NEXT: [[I]] = call i64 @opaque()
1313
; CHECK-NEXT: switch i64 [[I]], label %[[EXIT0:.*]] [
1414
; CHECK-NEXT: i64 -1, label %[[EXIT1:.*]]
@@ -18,12 +18,11 @@ define i64 @other_noundef() {
1818
; CHECK: [[EXIT0]]:
1919
; CHECK-NEXT: br label %[[EXIT1]]
2020
; CHECK: [[EXIT1]]:
21-
; CHECK-NEXT: [[R:%.*]] = phi i64 [ [[NONPOISON]], %[[LOOP]] ], [ undef, %[[EXIT0]] ]
2221
; CHECK-NEXT: ret i64 [[R]]
2322
; CHECK: [[BACK_TO_LOOP]]:
2423
; CHECK-NEXT: br label %[[LOOP]]
2524
; CHECK: [[BB]]:
26-
; CHECK-NEXT: switch i64 [[NONPOISON]], label %[[LOOP]] [
25+
; CHECK-NEXT: switch i64 [[R]], label %[[LOOP]] [
2726
; CHECK-NEXT: i64 0, label %[[BB0]]
2827
; CHECK-NEXT: i64 1, label %[[BB1]]
2928
; CHECK-NEXT: i64 2, label %[[BB2]]

0 commit comments

Comments
 (0)