Skip to content

Commit 1a8c9cd

Browse files
committed
Fix PR45442: Bail out when MemorySSA information is not available
Reviewers: sebpop, uabelho, fhahn Reviewed by: fhahn Differential Revision: https://reviews.llvm.org/D85881
1 parent 3944d3d commit 1a8c9cd

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

llvm/lib/Transforms/Scalar/GVNHoist.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -521,10 +521,6 @@ class GVNHoist {
521521
if (NewPt == OldPt)
522522
return true;
523523

524-
// MemoryUseDef information is not available, bail out.
525-
if (!U)
526-
return false;
527-
528524
const BasicBlock *NewBB = NewPt->getParent();
529525
const BasicBlock *OldBB = OldPt->getParent();
530526
const BasicBlock *UBB = U->getBlock();
@@ -609,9 +605,10 @@ class GVNHoist {
609605
if (safeToHoistScalar(BB, Insn->getParent(), NumBBsOnAllPaths))
610606
Safe.push_back(CHI);
611607
} else {
612-
MemoryUseOrDef *UD = MSSA->getMemoryAccess(Insn);
613-
if (safeToHoistLdSt(BB->getTerminator(), Insn, UD, K, NumBBsOnAllPaths))
614-
Safe.push_back(CHI);
608+
auto *T = BB->getTerminator();
609+
if (MemoryUseOrDef *UD = MSSA->getMemoryAccess(Insn))
610+
if (safeToHoistLdSt(T, Insn, UD, K, NumBBsOnAllPaths))
611+
Safe.push_back(CHI);
615612
}
616613
}
617614
}
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
; RUN: opt < %s -gvn-hoist -S | FileCheck %s
22

33
; gvn-hoist shouldn't crash in this case.
4-
; CHECK-LABEL: @func()
4+
; CHECK-LABEL: @func(i1 %b)
55
; CHECK: entry:
66
; CHECK-NEXT: br i1
77
; CHECK: bb1:
8-
; CHECK-NEXT: unreachable
8+
; CHECK-NEXT: ret void
99
; CHECK: bb2:
1010
; CHECK-NEXT: call
1111
; CHECK-NEXT: call
12-
; CHECK-NEXT: unreachable
12+
; CHECK-NEXT: ret void
1313

1414
define void @v_1_0() #0 {
1515
entry:
1616
ret void
1717
}
1818

19-
define void @func() {
19+
define void @func(i1 %b) {
2020
entry:
21-
br i1 undef, label %bb1, label %bb2
21+
br i1 %b, label %bb1, label %bb2
2222

2323
bb1:
24-
unreachable
24+
ret void
2525

2626
bb2:
2727
call void @v_1_0()
2828
call void @v_1_0()
29-
unreachable
29+
ret void
3030
}
3131

3232
attributes #0 = { nounwind readonly }

0 commit comments

Comments
 (0)