[LICM] Fix PR35342

Summary: This change fix PR35342 by replacing only the current use with undef in unreachable blocks.

Reviewers: efriedma, mcrosier, igor-laevsky

Reviewed By: efriedma

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D40184

llvm-svn: 318551
This commit is contained in:
Jun Bum Lim 2017-11-17 20:38:25 +00:00
parent 51c63bb7ef
commit 0f90672ae9
2 changed files with 27 additions and 1 deletions

View File

@ -906,7 +906,7 @@ static bool sink(Instruction &I, LoopInfo *LI, DominatorTree *DT,
continue;
if (!DT->isReachableFromEntry(User->getParent())) {
User->replaceUsesOfWith(&I, UndefValue::get(I.getType()));
U = UndefValue::get(I.getType());
continue;
}

View File

@ -0,0 +1,26 @@
; RUN: opt -licm -S < %s | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
target triple = "x86_64-unknown-linux-gnu"
; CHECK-LABEL: @f1
; CHECK-LABEL: bci_524:
; CHECK: add i32 undef, undef
define void @f1(i32 %v) {
not_zero.lr.ph:
br label %not_zero
not_zero:
br i1 undef, label %bci_748 , label %bci_314
bci_314:
%0 = select i1 undef, i32 undef, i32 undef
br label %not_zero
bci_524: ; No predecessors!
%add = add i32 %0, %0
br label %bci_748
bci_748:
ret void
}