Fix regression from r151466: an we can't replace uses of an instruction reachable from the entry block with uses of an instruction not reachable from the entry block. PR12231.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152595 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2012-03-13 01:06:07 +00:00
parent 90c14fcb7e
commit 5b8f0ddc7e
2 changed files with 26 additions and 3 deletions

View File

@ -94,9 +94,13 @@ static bool ValueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) {
return true;
// If we have a DominatorTree then do a precise test.
if (DT)
return !DT->isReachableFromEntry(P->getParent()) ||
!DT->isReachableFromEntry(I->getParent()) || DT->dominates(I, P);
if (DT) {
if (!DT->isReachableFromEntry(P->getParent()))
return true;
if (!DT->isReachableFromEntry(I->getParent()))
return false;
return DT->dominates(I, P);
}
// Otherwise, if the instruction is in the entry block, and is not an invoke,
// then it obviously dominates all phi nodes.

View File

@ -0,0 +1,19 @@
; RUN: opt -early-cse -S < %s | FileCheck %s
; PR12231
declare i32 @f()
define i32 @fn() {
entry:
br label %lbl_1215
lbl_1215:
%ins34 = phi i32 [ %ins35, %xxx ], [ undef, %entry ]
ret i32 %ins34
xxx:
%ins35 = call i32 @f()
br label %lbl_1215
}
; CHECK: define i32 @fn