Skip to content
Snippets Groups Projects
Commit 4e849162 authored by Chris Lattner's avatar Chris Lattner
Browse files

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

llvm-svn: 85786
parent 923cf49e
No related branches found
No related tags found
No related merge requests found
...@@ -749,7 +749,12 @@ void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI, ...@@ -749,7 +749,12 @@ void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI,
} }
// Otherwise, we *can* safely rewrite this load. // 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())) if (AST && isa<PointerType>(LI->getType()))
AST->deleteValue(LI); AST->deleteValue(LI);
LI->eraseFromParent(); LI->eraseFromParent();
......
; RUN: opt < %s -mem2reg -S ; RUN: opt < %s -mem2reg -S
; PR5023 ; PR5023
declare i32 @bar() declare i32 @test1f()
define i32 @foo() { define i32 @test1() {
entry: entry:
%whichFlag = alloca i32 %whichFlag = alloca i32
%A = invoke i32 @bar() %A = invoke i32 @test1f()
to label %invcont2 unwind label %lpad86 to label %invcont2 unwind label %lpad86
invcont2: invcont2:
...@@ -22,3 +22,20 @@ lpad86: ...@@ -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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment