diff options
| author | Dan Gohman <gohman@apple.com> | 2008-07-30 18:36:51 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2008-07-30 18:36:51 +0000 |
| commit | 2fe4352691bf4b80517ee36730cfddfb719d79fc (patch) | |
| tree | 1fd1d8848a214223b8d85c8581651cb81f2c52c7 /llvm | |
| parent | c818c015395232a3c004ee0a4f1b1dc1ed389630 (diff) | |
| download | bcm5719-llvm-2fe4352691bf4b80517ee36730cfddfb719d79fc.tar.gz bcm5719-llvm-2fe4352691bf4b80517ee36730cfddfb719d79fc.zip | |
Don't look for leaf values to store when lowering stores of
empty structs. This fixes PR2612.
llvm-svn: 54226
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Generic/empty-load-store.ll | 18 |
2 files changed, 24 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 65753e53446..6267eb9fea8 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -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(); diff --git a/llvm/test/CodeGen/Generic/empty-load-store.ll b/llvm/test/CodeGen/Generic/empty-load-store.ll new file mode 100644 index 00000000000..d7bb37194e4 --- /dev/null +++ b/llvm/test/CodeGen/Generic/empty-load-store.ll @@ -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 +} |

