Skip to content

Commit af032f1

Browse files
committed
[LVI] Skip self loops in solveBlockValueNonLocal
1 parent 84ddda5 commit af032f1

File tree

3 files changed

+12
-14
lines changed

3 files changed

+12
-14
lines changed

llvm/lib/Analysis/LazyValueInfo.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,9 @@ LazyValueInfoImpl::solveBlockValueNonLocal(Value *Val, BasicBlock *BB) {
694694
// canonicalizing to make this true rather than relying on this happy
695695
// accident.
696696
for (BasicBlock *Pred : predecessors(BB)) {
697+
// Skip self loops.
698+
if (Pred == BB)
699+
continue;
697700
std::optional<ValueLatticeElement> EdgeResult = getEdgeValue(Val, Pred, BB);
698701
if (!EdgeResult)
699702
// Explore that input, then return here

llvm/test/Transforms/CorrelatedValuePropagation/loop.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
; RUN: opt -passes=correlated-propagation -S %s | FileCheck %s
33

44
define i64 @test_self_loop(i64 %x, i1 %cond) {
5-
; CHECK-LABEL: define range(i64 0, -9223372036854775808) i64 @test_self_loop(
5+
; CHECK-LABEL: define range(i64 0, 576460752303423488) i64 @test_self_loop(
66
; CHECK-SAME: i64 [[X:%.*]], i1 [[COND:%.*]]) {
77
; CHECK-NEXT: [[ENTRY:.*]]:
88
; CHECK-NEXT: [[COND1:%.*]] = icmp ugt i64 [[X]], 576460752303423487
@@ -13,10 +13,9 @@ define i64 @test_self_loop(i64 %x, i1 %cond) {
1313
; CHECK-NEXT: [[COND2:%.*]] = icmp eq i64 [[X]], 0
1414
; CHECK-NEXT: br i1 [[COND2]], label %[[COMMON_RET]], label %[[EXIT:.*]]
1515
; CHECK: [[EXIT]]:
16-
; CHECK-NEXT: [[SMAX:%.*]] = tail call i64 @llvm.smax.i64(i64 [[X]], i64 1)
1716
; CHECK-NEXT: br label %[[COMMON_RET]]
1817
; CHECK: [[COMMON_RET]]:
19-
; CHECK-NEXT: [[RES:%.*]] = phi i64 [ [[SMAX]], %[[EXIT]] ], [ 0, %[[INDIRECT]] ], [ 0, %[[ENTRY]] ]
18+
; CHECK-NEXT: [[RES:%.*]] = phi i64 [ [[X]], %[[EXIT]] ], [ 0, %[[INDIRECT]] ], [ 0, %[[ENTRY]] ]
2019
; CHECK-NEXT: ret i64 [[RES]]
2120
;
2221
entry:

llvm/test/Transforms/JumpThreading/ddt-crash.ll

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,16 @@ define void @spam(ptr %arg, i1 %arg2) {
131131
; CHECK: bb31:
132132
; CHECK-NEXT: [[TMP32:%.*]] = phi i8 [ [[TMP32]], [[BB31]] ], [ [[TMP32_PR]], [[BB30]] ]
133133
; CHECK-NEXT: [[TMP33:%.*]] = icmp eq i8 [[TMP32]], 0
134-
; CHECK-NEXT: br i1 [[TMP33]], label [[BB31]], label [[BB37]]
134+
; CHECK-NEXT: br i1 [[TMP33]], label [[BB31]], label [[BB41_THREAD]]
135135
; CHECK: bb37:
136-
; CHECK-NEXT: [[TMP36:%.*]] = phi i1 [ false, [[BB23]] ], [ true, [[BB31]] ]
136+
; CHECK-NEXT: [[TMP36:%.*]] = phi i1 [ false, [[BB23]] ]
137137
; CHECK-NEXT: [[TMP38:%.*]] = icmp eq ptr [[TMP15]], null
138-
; CHECK-NEXT: br i1 [[TMP38]], label [[BB39:%.*]], label [[BB41:%.*]]
139-
; CHECK: bb39:
140-
; CHECK-NEXT: [[TMP364:%.*]] = phi i1 [ [[TMP36]], [[BB37]] ]
141-
; CHECK-NEXT: [[TMP40:%.*]] = load ptr, ptr @global, align 8
142-
; CHECK-NEXT: br i1 [[TMP364]], label [[BB41_THREAD]], label [[BB41_THREAD]]
138+
; CHECK-NEXT: br i1 [[TMP38]], label [[BB41:%.*]], label [[BB41_THREAD]]
143139
; CHECK: bb41:
144-
; CHECK-NEXT: [[TMP363:%.*]] = phi i1 [ [[TMP36]], [[BB37]] ]
145-
; CHECK-NEXT: br i1 [[TMP363]], label [[BB41_THREAD]], label [[BB41_THREAD]]
146-
; CHECK: bb41.thread:
147-
; CHECK-NEXT: [[TMP0:%.*]] = phi ptr [ undef, [[BB41]] ], [ undef, [[BB39]] ], [ undef, [[BB39]] ], [ undef, [[BB41]] ], [ undef, [[BB27]] ], [ undef, [[BB25]] ]
140+
; CHECK-NEXT: [[TMP40:%.*]] = load ptr, ptr @global, align 8
141+
; CHECK-NEXT: br label [[BB41_THREAD]]
142+
; CHECK: bb41.thread11:
143+
; CHECK-NEXT: [[TMP0:%.*]] = phi ptr [ undef, [[BB41]] ], [ undef, [[BB25]] ], [ undef, [[BB31]] ], [ undef, [[BB27]] ], [ undef, [[BB37]] ]
148144
; CHECK-NEXT: ret void
149145
;
150146
bb:

0 commit comments

Comments
 (0)