[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / SystemZ / vec-args-07.ll
blob57dda578f27151add08f70d9b7d4e9d74f3ffa17
1 ; Test calling functions with multiple return values (LLVM ABI extension)
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -mattr=soft-float \
5 ; RUN:   | FileCheck %s --check-prefix=SOFT-FLOAT
7 ; Up to eight vector return values fit into VRs.
8 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double>,
9           <2 x double>, <2 x double>, <2 x double>, <2 x double> } @bar1()
11 define <2 x double> @f1() {
12 ; CHECK-LABEL: f1:
13 ; CHECK: brasl %r14, bar1
14 ; CHECK: vlr %v24, %v31
15 ; CHECK: br %r14
17 ; SOFT-FLOAT-LABEL: f1:
18 ; SOFT-FLOAT-NOT: %{{[fv]}}
19 ; SOFT-FLOAT: brasl   %r14, bar1
20 ; SOFT-FLOAT-NEXT: lg      %r3, 280(%r15)
21 ; SOFT-FLOAT-NEXT: lg      %r2, 272(%r15)
22 ; SOFT-FLOAT-NEXT: lmg     %r14, %r15, 400(%r15)
23 ; SOFT-FLOAT-NEXT: br      %r14
24   %mret = call { <2 x double>, <2 x double>,
25                  <2 x double>, <2 x double>,
26                  <2 x double>, <2 x double>,
27                  <2 x double>, <2 x double> } @bar1()
28   %ret = extractvalue { <2 x double>, <2 x double>,
29                         <2 x double>, <2 x double>,
30                         <2 x double>, <2 x double>,
31                         <2 x double>, <2 x double> } %mret, 7
32   ret <2 x double> %ret
35 ; More than eight vector return values use sret.
36 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double>,
37           <2 x double>, <2 x double>, <2 x double>, <2 x double>,
38           <2 x double> } @bar2()
40 define <2 x double> @f2() {
41 ; CHECK-LABEL: f2:
42 ; CHECK: la %r2, 160(%r15)
43 ; CHECK: brasl %r14, bar2
44 ; CHECK: vl  %v24, 288(%r15)
45 ; CHECK: br %r14
47 ; SOFT-FLOAT-LABEL: f2:
48 ; SOFT-FLOAT-NOT: %{{[fv]}}
49 ; SOFT-FLOAT: brasl   %r14, bar2
50 ; SOFT-FLOAT-NEXT: lg      %r3, 296(%r15)
51 ; SOFT-FLOAT-NEXT: lg      %r2, 288(%r15)
52 ; SOFT-FLOAT-NEXT: lmg     %r14, %r15, 416(%r15)
53 ; SOFT-FLOAT-NEXT: br      %r14
54   %mret = call { <2 x double>, <2 x double>,
55                  <2 x double>, <2 x double>,
56                  <2 x double>, <2 x double>,
57                  <2 x double>, <2 x double>,
58                  <2 x double> } @bar2()
59   %ret = extractvalue { <2 x double>, <2 x double>,
60                         <2 x double>, <2 x double>,
61                         <2 x double>, <2 x double>,
62                         <2 x double>, <2 x double>,
63                         <2 x double> } %mret, 8
64   ret <2 x double> %ret