1 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-gnu-linux -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LIN64
2 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-windows-pc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WIN64
3 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple i386-gnu-linux -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LIN32
4 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple i386-windows-pc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WIN32
5 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple nvptx64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=NVPTX64
6 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple nvptx -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=NVPTX
7 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple sparcv9 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPARCV9
8 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple sparc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPARC
9 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple mips64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=MIPS64
10 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple mips -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=MIPS
11 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple spir64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPIR64
12 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple spir -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPIR
13 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple hexagon -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=HEX
14 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple lanai -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LANAI
15 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple r600 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=R600
16 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple arc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=ARC
17 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple xcore -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=XCORE
18 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple riscv64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=RISCV64
19 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple riscv32 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=RISCV32
20 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple wasm64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WASM
21 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple wasm32 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WASM
22 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple systemz -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SYSTEMZ
23 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple ppc64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=PPC64
24 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple ppc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=PPC32
25 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple aarch64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=AARCH64
26 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple aarch64 -target-abi darwinpcs -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=AARCH64DARWIN
27 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple arm64_32-apple-ios -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=AARCH64
28 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple arm64_32-apple-ios -target-abi darwinpcs -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=AARCH64DARWIN
29 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple arm -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=ARM
30 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple loongarch64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LA64
31 // RUN: %clang_cc1 -no-enable-noundef-analysis -triple loongarch32 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LA32
33 // Make sure 128 and 64 bit versions are passed like integers.
34 void ParamPassing(_BitInt(128) b
, _BitInt(64) c
) {}
35 // LIN64: define{{.*}} void @ParamPassing(i64 %{{.+}}, i64 %{{.+}}, i64 %{{.+}})
36 // WIN64: define dso_local void @ParamPassing(ptr %{{.+}}, i64 %{{.+}})
37 // LIN32: define{{.*}} void @ParamPassing(ptr %{{.+}}, i64 %{{.+}})
38 // WIN32: define dso_local void @ParamPassing(ptr %{{.+}}, i64 %{{.+}})
39 // NACL: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
40 // NVPTX64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
41 // NVPTX: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
42 // SPARCV9: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
43 // SPARC: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
44 // MIPS64: define{{.*}} void @ParamPassing(i128 signext %{{.+}}, i64 signext %{{.+}})
45 // MIPS: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 signext %{{.+}})
46 // SPIR64: define{{.*}} spir_func void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
47 // SPIR: define{{.*}} spir_func void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
48 // HEX: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
49 // LANAI: define{{.*}} void @ParamPassing(ptr byval(i128) align 4 %{{.+}}, i64 %{{.+}})
50 // R600: define{{.*}} void @ParamPassing(ptr addrspace(5) byval(i128) align 8 %{{.+}}, i64 %{{.+}})
51 // ARC: define{{.*}} void @ParamPassing(ptr byval(i128) align 4 %{{.+}}, i64 inreg %{{.+}})
52 // XCORE: define{{.*}} void @ParamPassing(ptr byval(i128) align 4 %{{.+}}, i64 %{{.+}})
53 // RISCV64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
54 // RISCV32: define{{.*}} void @ParamPassing(ptr %{{.+}}, i64 %{{.+}})
55 // WASM: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
56 // SYSTEMZ: define{{.*}} void @ParamPassing(ptr %{{.+}}, i64 %{{.+}})
57 // PPC64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
58 // PPC32: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
59 // AARCH64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
60 // AARCH64DARWIN: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
61 // ARM: define{{.*}} arm_aapcscc void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})
62 // LA64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})
63 // LA32: define{{.*}} void @ParamPassing(ptr %{{.+}}, i64 %{{.+}})
65 void ParamPassing2(_BitInt(127) b
, _BitInt(63) c
) {}
66 // LIN64: define{{.*}} void @ParamPassing2(i64 %{{.+}}, i64 %{{.+}}, i64 %{{.+}})
67 // WIN64: define dso_local void @ParamPassing2(ptr %{{.+}}, i63 %{{.+}})
68 // LIN32: define{{.*}} void @ParamPassing2(ptr %{{.+}}, i63 %{{.+}})
69 // WIN32: define dso_local void @ParamPassing2(ptr %{{.+}}, i63 %{{.+}})
70 // NACL: define{{.*}} void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
71 // NVPTX64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})
72 // NVPTX: define{{.*}} void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
73 // SPARCV9: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})
74 // SPARC: define{{.*}} void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
75 // MIPS64: define{{.*}} void @ParamPassing2(i127 signext %{{.+}}, i63 signext %{{.+}})
76 // MIPS: define{{.*}} void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 signext %{{.+}})
77 // SPIR64: define{{.*}} spir_func void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
78 // SPIR: define{{.*}} spir_func void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
79 // HEX: define{{.*}} void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
80 // LANAI: define{{.*}} void @ParamPassing2(ptr byval(i127) align 4 %{{.+}}, i63 %{{.+}})
81 // R600: define{{.*}} void @ParamPassing2(ptr addrspace(5) byval(i127) align 8 %{{.+}}, i63 %{{.+}})
82 // ARC: define{{.*}} void @ParamPassing2(ptr byval(i127) align 4 %{{.+}}, i63 inreg %{{.+}})
83 // XCORE: define{{.*}} void @ParamPassing2(ptr byval(i127) align 4 %{{.+}}, i63 %{{.+}})
84 // RISCV64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})
85 // RISCV32: define{{.*}} void @ParamPassing2(ptr %{{.+}}, i63 %{{.+}})
86 // WASM: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})
87 // SYSTEMZ: define{{.*}} void @ParamPassing2(ptr %{{.+}}, i63 signext %{{.+}})
88 // PPC64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})
89 // PPC32: define{{.*}} void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
90 // AARCH64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})
91 // AARCH64DARWIN: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})
92 // ARM: define{{.*}} arm_aapcscc void @ParamPassing2(ptr byval(i127) align 8 %{{.+}}, i63 %{{.+}})
93 // LA64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})
94 // LA32: define{{.*}} void @ParamPassing2(ptr %{{.+}}, i63 %{{.+}})
96 // Make sure we follow the signext rules for promotable integer types.
97 void ParamPassing3(_BitInt(15) a
, _BitInt(31) b
) {}
98 // LIN64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
99 // WIN64: define dso_local void @ParamPassing3(i15 %{{.+}}, i31 %{{.+}})
100 // LIN32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
101 // WIN32: define dso_local void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
102 // NACL: define{{.*}} void @ParamPassing3(i15 %{{.+}}, i31 %{{.+}})
103 // NVPTX64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
104 // NVPTX: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
105 // SPARCV9: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
106 // SPARC: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
107 // MIPS64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
108 // MIPS: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
109 // SPIR64: define{{.*}} spir_func void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
110 // SPIR: define{{.*}} spir_func void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
111 // HEX: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
112 // LANAI: define{{.*}} void @ParamPassing3(i15 inreg %{{.+}}, i31 inreg %{{.+}})
113 // R600: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
114 // ARC: define{{.*}} void @ParamPassing3(i15 inreg signext %{{.+}}, i31 inreg signext %{{.+}})
115 // XCORE: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
116 // RISCV64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
117 // RISCV32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
118 // WASM: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
119 // SYSTEMZ: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
120 // PPC64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
121 // PPC32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
122 // AARCH64: define{{.*}} void @ParamPassing3(i15 %{{.+}}, i31 %{{.+}})
123 // AARCH64DARWIN: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
124 // ARM: define{{.*}} arm_aapcscc void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
125 // LA64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
126 // LA32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})
128 #if __BITINT_MAXWIDTH__ > 128
129 // When supported, bit-precise types that are >128 are passed indirectly. Note,
130 // FileCheck doesn't pay attention to the preprocessor, so all of these tests
131 // are negated. This will give an error when a target does support larger
132 // _BitInt widths to alert us to enable the test.
133 void ParamPassing4(_BitInt(129) a
) {}
134 // LIN64: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
135 // WIN64: define dso_local void @ParamPassing4(ptr %{{.+}})
136 // LIN32: define{{.*}} void @ParamPassing4(ptr %{{.+}})
137 // WIN32: define dso_local void @ParamPassing4(ptr %{{.+}})
138 // NACL-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
139 // NVPTX64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
140 // NVPTX-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
141 // SPARCV9-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})
142 // SPARC-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
143 // MIPS64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
144 // MIPS-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
145 // SPIR64-NOT: define{{.*}} spir_func void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
146 // SPIR-NOT: define{{.*}} spir_func void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
147 // HEX-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
148 // LANAI-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}})
149 // R600-NOT: define{{.*}} void @ParamPassing4(ptr addrspace(5) byval(i129) align 8 %{{.+}})
150 // ARC-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}})
151 // XCORE-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}})
152 // RISCV64-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})
153 // RISCV32-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})
154 // WASM-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
155 // SYSTEMZ-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})
156 // PPC64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
157 // PPC32-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
158 // AARCH64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
159 // AARCH64DARWIN-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
160 // ARM-NOT: define{{.*}} arm_aapcscc void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})
161 // LA64-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})
162 // LA32-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})
165 _BitInt(63) ReturnPassing(void){}
166 // LIN64: define{{.*}} i64 @ReturnPassing(
167 // WIN64: define dso_local i63 @ReturnPassing(
168 // LIN32: define{{.*}} i63 @ReturnPassing(
169 // WIN32: define dso_local i63 @ReturnPassing(
170 // NACL: define{{.*}} i63 @ReturnPassing(
171 // NVPTX64: define{{.*}} i63 @ReturnPassing(
172 // NVPTX: define{{.*}} i63 @ReturnPassing(
173 // SPARCV9: define{{.*}} signext i63 @ReturnPassing(
174 // SPARC: define{{.*}} i63 @ReturnPassing(
175 // MIPS64: define{{.*}} i63 @ReturnPassing(
176 // MIPS: define{{.*}} i63 @ReturnPassing(
177 // SPIR64: define{{.*}} spir_func i63 @ReturnPassing(
178 // SPIR: define{{.*}} spir_func i63 @ReturnPassing(
179 // HEX: define{{.*}} i63 @ReturnPassing(
180 // LANAI: define{{.*}} i63 @ReturnPassing(
181 // R600: define{{.*}} i63 @ReturnPassing(
182 // ARC: define{{.*}} i63 @ReturnPassing(
183 // XCORE: define{{.*}} i63 @ReturnPassing(
184 // RISCV64: define{{.*}} signext i63 @ReturnPassing(
185 // RISCV32: define{{.*}} i63 @ReturnPassing(
186 // WASM: define{{.*}} i63 @ReturnPassing(
187 // SYSTEMZ: define{{.*}} signext i63 @ReturnPassing(
188 // PPC64: define{{.*}} signext i63 @ReturnPassing(
189 // PPC32: define{{.*}} i63 @ReturnPassing(
190 // AARCH64: define{{.*}} i63 @ReturnPassing(
191 // AARCH64DARWIN: define{{.*}} i63 @ReturnPassing(
192 // ARM: define{{.*}} arm_aapcscc i63 @ReturnPassing(
193 // LA64: define{{.*}} signext i63 @ReturnPassing(
194 // LA32: define{{.*}} i63 @ReturnPassing(
196 _BitInt(64) ReturnPassing2(void){}
197 // LIN64: define{{.*}} i64 @ReturnPassing2(
198 // WIN64: define dso_local i64 @ReturnPassing2(
199 // LIN32: define{{.*}} i64 @ReturnPassing2(
200 // WIN32: define dso_local i64 @ReturnPassing2(
201 // NACL: define{{.*}} i64 @ReturnPassing2(
202 // NVPTX64: define{{.*}} i64 @ReturnPassing2(
203 // NVPTX: define{{.*}} i64 @ReturnPassing2(
204 // SPARCV9: define{{.*}} i64 @ReturnPassing2(
205 // SPARC: define{{.*}} i64 @ReturnPassing2(
206 // MIPS64: define{{.*}} i64 @ReturnPassing2(
207 // MIPS: define{{.*}} i64 @ReturnPassing2(
208 // SPIR64: define{{.*}} spir_func i64 @ReturnPassing2(
209 // SPIR: define{{.*}} spir_func i64 @ReturnPassing2(
210 // HEX: define{{.*}} i64 @ReturnPassing2(
211 // LANAI: define{{.*}} i64 @ReturnPassing2(
212 // R600: define{{.*}} i64 @ReturnPassing2(
213 // ARC: define{{.*}} i64 @ReturnPassing2(
214 // XCORE: define{{.*}} i64 @ReturnPassing2(
215 // RISCV64: define{{.*}} i64 @ReturnPassing2(
216 // RISCV32: define{{.*}} i64 @ReturnPassing2(
217 // WASM: define{{.*}} i64 @ReturnPassing2(
218 // SYSTEMZ: define{{.*}} i64 @ReturnPassing2(
219 // PPC64: define{{.*}} i64 @ReturnPassing2(
220 // PPC32: define{{.*}} i64 @ReturnPassing2(
221 // AARCH64: define{{.*}} i64 @ReturnPassing2(
222 // AARCH64DARWIN: define{{.*}} i64 @ReturnPassing2(
223 // ARM: define{{.*}} arm_aapcscc i64 @ReturnPassing2(
224 // LA64: define{{.*}} i64 @ReturnPassing2(
225 // LA32: define{{.*}} i64 @ReturnPassing2(
227 _BitInt(127) ReturnPassing3(void){}
228 // LIN64: define{{.*}} { i64, i64 } @ReturnPassing3(
229 // WIN64: define dso_local void @ReturnPassing3(ptr noalias sret
230 // LIN32: define{{.*}} void @ReturnPassing3(ptr noalias sret
231 // WIN32: define dso_local void @ReturnPassing3(ptr noalias sret
232 // NACL: define{{.*}} void @ReturnPassing3(ptr noalias sret
233 // NVPTX/64 makes the intentional choice to put all return values direct, even
234 // large structures, so we do the same here.
235 // NVPTX64: define{{.*}} i127 @ReturnPassing3(
236 // NVPTX: define{{.*}} i127 @ReturnPassing3(
237 // SPARCV9: define{{.*}} i127 @ReturnPassing3(
238 // SPARC: define{{.*}} void @ReturnPassing3(ptr noalias sret
239 // MIPS64: define{{.*}} i127 @ReturnPassing3(
240 // MIPS: define{{.*}} void @ReturnPassing3(ptr noalias sret
241 // SPIR64: define{{.*}} spir_func void @ReturnPassing3(ptr noalias sret
242 // SPIR: define{{.*}} spir_func void @ReturnPassing3(ptr noalias sret
243 // HEX: define{{.*}} void @ReturnPassing3(ptr noalias sret
244 // LANAI: define{{.*}} void @ReturnPassing3(ptr noalias sret
245 // R600: define{{.*}} void @ReturnPassing3(ptr addrspace(5) noalias sret
246 // ARC: define{{.*}} void @ReturnPassing3(ptr noalias sret
247 // XCORE: define{{.*}} void @ReturnPassing3(ptr noalias sret
248 // RISCV64: define{{.*}} i127 @ReturnPassing3(
249 // RISCV32: define{{.*}} void @ReturnPassing3(ptr noalias sret
250 // WASM: define{{.*}} i127 @ReturnPassing3(
251 // SYSTEMZ: define{{.*}} void @ReturnPassing3(ptr noalias sret
252 // PPC64: define{{.*}} i127 @ReturnPassing3(
253 // PPC32: define{{.*}} void @ReturnPassing3(ptr noalias sret
254 // AARCH64: define{{.*}} i127 @ReturnPassing3(
255 // AARCH64DARWIN: define{{.*}} i127 @ReturnPassing3(
256 // ARM: define{{.*}} arm_aapcscc void @ReturnPassing3(ptr noalias sret
257 // LA64: define{{.*}} i127 @ReturnPassing3(
258 // LA32: define{{.*}} void @ReturnPassing3(ptr noalias sret
260 _BitInt(128) ReturnPassing4(void){}
261 // LIN64: define{{.*}} { i64, i64 } @ReturnPassing4(
262 // WIN64: define dso_local void @ReturnPassing4(ptr noalias sret
263 // LIN32: define{{.*}} void @ReturnPassing4(ptr noalias sret
264 // WIN32: define dso_local void @ReturnPassing4(ptr noalias sret
265 // NACL: define{{.*}} void @ReturnPassing4(ptr noalias sret
266 // NVPTX64: define{{.*}} i128 @ReturnPassing4(
267 // NVPTX: define{{.*}} i128 @ReturnPassing4(
268 // SPARCV9: define{{.*}} i128 @ReturnPassing4(
269 // SPARC: define{{.*}} void @ReturnPassing4(ptr noalias sret
270 // MIPS64: define{{.*}} i128 @ReturnPassing4(
271 // MIPS: define{{.*}} void @ReturnPassing4(ptr noalias sret
272 // SPIR64: define{{.*}} spir_func void @ReturnPassing4(ptr noalias sret
273 // SPIR: define{{.*}} spir_func void @ReturnPassing4(ptr noalias sret
274 // HEX: define{{.*}} void @ReturnPassing4(ptr noalias sret
275 // LANAI: define{{.*}} void @ReturnPassing4(ptr noalias sret
276 // R600: define{{.*}} void @ReturnPassing4(ptr addrspace(5) noalias sret
277 // ARC: define{{.*}} void @ReturnPassing4(ptr noalias sret
278 // XCORE: define{{.*}} void @ReturnPassing4(ptr noalias sret
279 // RISCV64: define{{.*}} i128 @ReturnPassing4(
280 // RISCV32: define{{.*}} void @ReturnPassing4(ptr noalias sret
281 // WASM: define{{.*}} i128 @ReturnPassing4(
282 // SYSTEMZ: define{{.*}} void @ReturnPassing4(ptr noalias sret
283 // PPC64: define{{.*}} i128 @ReturnPassing4(
284 // PPC32: define{{.*}} void @ReturnPassing4(ptr noalias sret
285 // AARCH64: define{{.*}} i128 @ReturnPassing4(
286 // AARCH64DARWIN: define{{.*}} i128 @ReturnPassing4(
287 // ARM: define{{.*}} arm_aapcscc void @ReturnPassing4(ptr noalias sret
288 // LA64: define{{.*}} i128 @ReturnPassing4(
289 // LA32: define{{.*}} void @ReturnPassing4(ptr noalias sret
291 #if __BITINT_MAXWIDTH__ > 128
292 _BitInt(129) ReturnPassing5(void){}
293 // LIN64: define{{.*}} void @ReturnPassing5(ptr noalias sret
294 // WIN64: define dso_local void @ReturnPassing5(ptr noalias sret
295 // LIN32: define{{.*}} void @ReturnPassing5(ptr noalias sret
296 // WIN32: define dso_local void @ReturnPassing5(ptr noalias sret
297 // NACL-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
298 // NVPTX64-NOT: define{{.*}} i129 @ReturnPassing5(
299 // NVPTX-NOT: define{{.*}} i129 @ReturnPassing5(
300 // SPARCV9-NOT: define{{.*}} i129 @ReturnPassing5(
301 // SPARC-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
302 // MIPS64-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
303 // MIPS-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
304 // SPIR64-NOT: define{{.*}} spir_func void @ReturnPassing5(ptr noalias sret
305 // SPIR-NOT: define{{.*}} spir_func void @ReturnPassing5(ptr noalias sret
306 // HEX-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
307 // LANAI-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
308 // R600-NOT: define{{.*}} void @ReturnPassing5(ptr addrspace(5) noalias sret
309 // ARC-NOT: define{{.*}} void @ReturnPassing5(ptr inreg noalias sret
310 // XCORE-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
311 // RISCV64-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
312 // RISCV32-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
313 // WASM-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
314 // SYSTEMZ-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
315 // PPC64-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
316 // PPC32-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
317 // AARCH64-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
318 // AARCH64DARWIN-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
319 // ARM-NOT: define{{.*}} arm_aapcscc void @ReturnPassing5(ptr noalias sret
320 // LA64-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
321 // LA32-NOT: define{{.*}} void @ReturnPassing5(ptr noalias sret
323 // SparcV9 is odd in that it has a return-size limit of 256, not 128 or 64
324 // like other platforms, so test to make sure this behavior will still work.
325 _BitInt(256) ReturnPassing6(void) {}
326 // SPARCV9-NOT: define{{.*}} i256 @ReturnPassing6(
327 _BitInt(257) ReturnPassing7(void) {}
328 // SPARCV9-NOT: define{{.*}} void @ReturnPassing7(ptr noalias sret