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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54760 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2008-08-13 21:22:48 +00:00
parent 38db6ccb47
commit 2edeb63ece
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
}