fix a bug exposed by moving SRoA earlier which caused a crash building kc++

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85786 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-11-02 04:37:17 +00:00
parent ec2d49e79f
commit 794c15dc71
2 changed files with 26 additions and 4 deletions

View File

@ -749,7 +749,12 @@ void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI,
}
// Otherwise, we *can* safely rewrite this load.
LI->replaceAllUsesWith(OnlyStore->getOperand(0));
Value *ReplVal = OnlyStore->getOperand(0);
// If the replacement value is the load, this must occur in unreachable
// code.
if (ReplVal == LI)
ReplVal = UndefValue::get(LI->getType());
LI->replaceAllUsesWith(ReplVal);
if (AST && isa<PointerType>(LI->getType()))
AST->deleteValue(LI);
LI->eraseFromParent();

View File

@ -1,12 +1,12 @@
; RUN: opt < %s -mem2reg -S
; PR5023
declare i32 @bar()
declare i32 @test1f()
define i32 @foo() {
define i32 @test1() {
entry:
%whichFlag = alloca i32
%A = invoke i32 @bar()
%A = invoke i32 @test1f()
to label %invcont2 unwind label %lpad86
invcont2:
@ -22,3 +22,20 @@ lpad86:
}
define i32 @test2() {
entry:
%whichFlag = alloca i32
br label %bb15
bb15:
%B = load i32* %whichFlag
ret i32 %B
invcont2:
%C = load i32* %whichFlag
store i32 %C, i32* %whichFlag
br label %bb15
}