Fix SCCP's handling of struct value loads and stores. SCCP doesn't

track individual leaf values in such cases, so it needs to treat
struct values as normal values in this case.

llvm-svn: 54760
This commit is contained in:
Dan Gohman 2008-08-13 21:22:48 +00:00
parent caefa24c76
commit 8ded5d5884
2 changed files with 20 additions and 2 deletions

View File

@ -1583,7 +1583,6 @@ bool SCCP::runOnFunction(Function &F) {
for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
Instruction *Inst = BI++;
if (Inst->getType() == Type::VoidTy ||
isa<StructType>(Inst->getType()) ||
isa<TerminatorInst>(Inst))
continue;
@ -1760,7 +1759,6 @@ bool IPSCCP::runOnModule(Module &M) {
for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
Instruction *Inst = BI++;
if (Inst->getType() == Type::VoidTy ||
isa<StructType>(Inst->getType()) ||
isa<TerminatorInst>(Inst))
continue;

View File

@ -0,0 +1,20 @@
; RUN: llvm-as < %s > %t.bc
; RUN: llvm-ld %t.bc -o %t.sh
; PR2612
@current_foo = internal global { } zeroinitializer
define i32 @main(...) {
entry:
%retval = alloca i32 ; <i32*> [#uses=2]
store i32 0, i32* %retval
%local_foo = alloca { } ; <{ }*> [#uses=1]
load { }* @current_foo ; <{ }>:0 [#uses=1]
store { } %0, { }* %local_foo
br label %return
return: ; preds = %entry
load i32* %retval ; <i32>:1 [#uses=1]
ret i32 %1
}