Don't look for leaf values to store when lowering stores of

empty structs. This fixes PR2612.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54226 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2008-07-30 18:36:51 +00:00
parent d723f722b2
commit 90d33ee746
2 changed files with 24 additions and 2 deletions

View File

@ -2928,9 +2928,7 @@ void SelectionDAGLowering::visitLoad(LoadInst &I) {
void SelectionDAGLowering::visitStore(StoreInst &I) {
Value *SrcV = I.getOperand(0);
SDValue Src = getValue(SrcV);
Value *PtrV = I.getOperand(1);
SDValue Ptr = getValue(PtrV);
SmallVector<MVT, 4> ValueVTs;
SmallVector<uint64_t, 4> Offsets;
@ -2939,6 +2937,12 @@ void SelectionDAGLowering::visitStore(StoreInst &I) {
if (NumValues == 0)
return;
// Get the lowered operands. Note that we do this after
// checking if NumResults is zero, because with zero results
// the operands won't have values in the map.
SDValue Src = getValue(SrcV);
SDValue Ptr = getValue(PtrV);
SDValue Root = getRoot();
SmallVector<SDValue, 4> Chains(NumValues);
MVT PtrVT = Ptr.getValueType();

View File

@ -0,0 +1,18 @@
; RUN: llvm-as < %s | llc
; PR2612
@current_foo = internal global { } zeroinitializer
define i32 @foo() {
entry:
%retval = alloca i32
store i32 0, i32* %retval
%local_foo = alloca { }
load { }* @current_foo
store { } %0, { }* %local_foo
br label %return
return:
load i32* %retval
ret i32 %1
}