diff options
author | Dan Gohman <gohman@apple.com> | 2008-04-25 18:27:55 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-04-25 18:27:55 +0000 |
commit | 23ce502cb7d9d06a1786d276a10be42e65759eca (patch) | |
tree | 482820194bec029a5af78518fd7f158d09966b95 /test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll | |
parent | 80f5404e1868ebfddea65214310c451c30b500f2 (diff) | |
download | llvm-23ce502cb7d9d06a1786d276a10be42e65759eca.tar.gz llvm-23ce502cb7d9d06a1786d276a10be42e65759eca.tar.bz2 llvm-23ce502cb7d9d06a1786d276a10be42e65759eca.tar.xz |
Remove the code from CodeGenPrepare that moved getresult instructions
to the block that defines their operands. This doesn't work in the
case that the operand is an invoke, because invoke is a terminator
and must be the last instruction in a block.
Replace it with support in SelectionDAGISel for copying struct values
into sequences of virtual registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50279 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll')
-rw-r--r-- | test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll b/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll new file mode 100644 index 0000000000..f21b645615 --- /dev/null +++ b/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll @@ -0,0 +1,18 @@ +; RUN: llvm-as < %s | llc + +declare { i64, double } @wild() + +define void @foo(i64* %p, double* %q) nounwind { + %t = invoke { i64, double } @wild() to label %normal unwind label %handler + +normal: + %mrv_gr = getresult { i64, double } %t, 0 + store i64 %mrv_gr, i64* %p + %mrv_gr12681 = getresult { i64, double } %t, 1 + store double %mrv_gr12681, double* %q + ret void + +handler: + ret void +} + |