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