[SSAUpdaterBulk] Handle CFG with unreachable from entry blocks.

llvm-svn: 329660
This commit is contained in:
Michael Zolotukhin 2018-04-10 02:16:29 +00:00
parent 08df84e4f0
commit aa7868594e
2 changed files with 27 additions and 1 deletions

View File

@ -57,7 +57,7 @@ bool SSAUpdaterBulk::HasValueForBlock(unsigned Var, BasicBlock *BB) {
Value *SSAUpdaterBulk::computeValueAt(BasicBlock *BB, RewriteInfo &R,
DominatorTree *DT) {
if (!R.Defines.count(BB)) {
if (PredCache.get(BB).size()) {
if (DT->isReachableFromEntry(BB) && PredCache.get(BB).size()) {
BasicBlock *IDom = DT->getNode(BB)->getIDom()->getBlock();
R.Defines[BB] = computeValueAt(IDom, R, DT);
} else

View File

@ -0,0 +1,26 @@
; RUN: opt -S < %s -jump-threading | FileCheck %s
; CHECK-LABEL: @foo
; CHECK-NEXT: exit2:
; CHECK-NEXT: ret void
define void @foo() {
entry:
br label %bb1
entry2:
br label %bb1
bb1:
%a0 = phi i32 [ undef, %entry2 ], [ 0, %entry ]
%b = icmp ne i32 %a0, 0
br i1 %b, label %bb2, label %exit2
bb2:
br label %exit1
exit1:
%a1 = phi i32 [ %a0, %bb2 ]
ret void
exit2:
ret void
}