Skip to content

Commit ad48367

Browse files
committed
[JumpThreading] Let SimplifyPartiallyRedundantLoad look into freeze
This patch allows SimplifyPartiallyRedundantLoad work when the branch condition was frozen. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D84944
1 parent 1cc2103 commit ad48367

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

llvm/lib/Transforms/Scalar/JumpThreading.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,6 +1168,11 @@ bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) {
11681168
// we see one, check to see if it's partially redundant. If so, insert a PHI
11691169
// which can then be used to thread the values.
11701170
Value *SimplifyValue = CondInst;
1171+
1172+
if (auto *FI = dyn_cast<FreezeInst>(SimplifyValue))
1173+
// Look into freeze's operand
1174+
SimplifyValue = FI->getOperand(0);
1175+
11711176
if (CmpInst *CondCmp = dyn_cast<CmpInst>(SimplifyValue))
11721177
if (isa<Constant>(CondCmp->getOperand(1)))
11731178
SimplifyValue = CondCmp->getOperand(0);

llvm/test/Transforms/JumpThreading/pre-load.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,19 @@ NO:
4646

4747
define i32 @pre_freeze(i1 %cond, i32 %n) {
4848
; CHECK-LABEL: @pre_freeze(
49-
; CHECK-NEXT: br i1 [[COND:%.*]], label [[A:%.*]], label [[C:%.*]]
50-
; CHECK: A:
49+
; CHECK-NEXT: br i1 [[COND:%.*]], label [[C_THREAD:%.*]], label [[C:%.*]]
50+
; CHECK: C.thread:
5151
; CHECK-NEXT: store i32 0, i32* @x, align 4
52-
; CHECK-NEXT: br label [[C]]
52+
; CHECK-NEXT: br label [[YES:%.*]]
5353
; CHECK: C:
54-
; CHECK-NEXT: [[PTR:%.*]] = phi i32* [ @x, [[A]] ], [ @y, [[TMP0:%.*]] ]
55-
; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[PTR]], align 4
56-
; CHECK-NEXT: [[COND2:%.*]] = icmp eq i32 [[A]], 0
54+
; CHECK-NEXT: [[A_PR:%.*]] = load i32, i32* @y, align 4
55+
; CHECK-NEXT: [[COND2:%.*]] = icmp eq i32 [[A_PR]], 0
5756
; CHECK-NEXT: [[COND2_FR:%.*]] = freeze i1 [[COND2]]
58-
; CHECK-NEXT: br i1 [[COND2_FR]], label [[YES:%.*]], label [[NO:%.*]]
57+
; CHECK-NEXT: br i1 [[COND2_FR]], label [[YES]], label [[NO:%.*]]
5958
; CHECK: YES:
59+
; CHECK-NEXT: [[A5:%.*]] = phi i32 [ 0, [[C_THREAD]] ], [ [[A_PR]], [[C]] ]
6060
; CHECK-NEXT: call void @f()
61-
; CHECK-NEXT: ret i32 [[A]]
61+
; CHECK-NEXT: ret i32 [[A5]]
6262
; CHECK: NO:
6363
; CHECK-NEXT: call void @g()
6464
; CHECK-NEXT: ret i32 1

0 commit comments

Comments
 (0)