llvm/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll
Dan Gohman 23ce502cb7 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
2008-04-25 18:27:55 +00:00

19 lines
425 B
LLVM

; 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
}