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 -fexperimental-max-bitint-width=1024 -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 -fexperimental-max-bitint-width=1024 -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 32 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 %{{.+}}) 64 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(i128) align 8 %{{.+}}, i63 %{{.+}}) 71 // NVPTX64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}}) 72 // NVPTX: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}}) 73 // SPARCV9: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}}) 74 // SPARC: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}}) 75 // MIPS64: define{{.*}} void @ParamPassing2(i127 signext %{{.+}}, i63 signext %{{.+}}) 76 // MIPS: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 signext %{{.+}}) 77 // SPIR64: define{{.*}} spir_func void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}}) 78 // SPIR: define{{.*}} spir_func void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}}) 79 // HEX: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}}) 80 // LANAI: define{{.*}} void @ParamPassing2(ptr byval(i128) align 4 %{{.+}}, i63 %{{.+}}) 81 // R600: define{{.*}} void @ParamPassing2(ptr addrspace(5) byval(i128) align 8 %{{.+}}, i63 %{{.+}}) 82 // ARC: define{{.*}} void @ParamPassing2(ptr byval(i128) align 4 %{{.+}}, i63 inreg %{{.+}}) 83 // XCORE: define{{.*}} void @ParamPassing2(ptr byval(i128) 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(i128) 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(i128) align 8 %{{.+}}, i63 %{{.+}}) 93 // LA64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}}) 94 // LA32: define{{.*}} void @ParamPassing2(ptr %{{.+}}, i63 %{{.+}}) 95 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 %{{.+}}) 127 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([24 x i8]) 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 // AARCH64: define{{.*}} void @ParamPassing4(ptr %{{.+}}) 139 // NACL-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 140 // NVPTX64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 141 // NVPTX-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 142 // SPARCV9-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}}) 143 // SPARC-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 144 // MIPS64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 145 // MIPS-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 146 // SPIR64-NOT: define{{.*}} spir_func void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 147 // SPIR-NOT: define{{.*}} spir_func void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 148 // HEX-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 149 // LANAI-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}}) 150 // R600-NOT: define{{.*}} void @ParamPassing4(ptr addrspace(5) byval(i129) align 8 %{{.+}}) 151 // ARC-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}}) 152 // XCORE-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}}) 153 // RISCV64-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}}) 154 // RISCV32-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}}) 155 // WASM-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 156 // SYSTEMZ-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}}) 157 // PPC64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}}) 158 // PPC32-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 %{{.+}}) 163 #endif 164 165 _BitInt(63) ReturnPassing(void) { return 0; } 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( 195 196 _BitInt(64) ReturnPassing2(void) { return 0; } 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( 226 227 _BitInt(127) ReturnPassing3(void) { return 0; } 228 // LIN64: define{{.*}} { i64, i64 } @ReturnPassing3( 229 // WIN64: define dso_local void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 230 // LIN32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 231 // WIN32: define dso_local void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 232 // NACL: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable 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 dead_on_unwind noalias writable sret 239 // MIPS64: define{{.*}} i127 @ReturnPassing3( 240 // MIPS: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 241 // SPIR64: define{{.*}} spir_func void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 242 // SPIR: define{{.*}} spir_func void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 243 // HEX: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 244 // LANAI: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 245 // R600: define{{.*}} void @ReturnPassing3(ptr addrspace(5) dead_on_unwind noalias writable sret 246 // ARC: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 247 // XCORE: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 248 // RISCV64: define{{.*}} i127 @ReturnPassing3( 249 // RISCV32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 250 // WASM: define{{.*}} i127 @ReturnPassing3( 251 // SYSTEMZ: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 252 // PPC64: define{{.*}} i127 @ReturnPassing3( 253 // PPC32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 254 // AARCH64: define{{.*}} i127 @ReturnPassing3( 255 // AARCH64DARWIN: define{{.*}} i127 @ReturnPassing3( 256 // ARM: define{{.*}} arm_aapcscc void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 257 // LA64: define{{.*}} i127 @ReturnPassing3( 258 // LA32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret 259 260 _BitInt(128) ReturnPassing4(void) { return 0; } 261 // LIN64: define{{.*}} { i64, i64 } @ReturnPassing4( 262 // WIN64: define dso_local void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 263 // LIN32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 264 // WIN32: define dso_local void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 265 // NACL: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 266 // NVPTX64: define{{.*}} i128 @ReturnPassing4( 267 // NVPTX: define{{.*}} i128 @ReturnPassing4( 268 // SPARCV9: define{{.*}} i128 @ReturnPassing4( 269 // SPARC: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 270 // MIPS64: define{{.*}} i128 @ReturnPassing4( 271 // MIPS: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 272 // SPIR64: define{{.*}} spir_func void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 273 // SPIR: define{{.*}} spir_func void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 274 // HEX: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 275 // LANAI: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 276 // R600: define{{.*}} void @ReturnPassing4(ptr addrspace(5) dead_on_unwind noalias writable sret 277 // ARC: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 278 // XCORE: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 279 // RISCV64: define{{.*}} i128 @ReturnPassing4( 280 // RISCV32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 281 // WASM: define{{.*}} i128 @ReturnPassing4( 282 // SYSTEMZ: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 283 // PPC64: define{{.*}} i128 @ReturnPassing4( 284 // PPC32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 285 // AARCH64: define{{.*}} i128 @ReturnPassing4( 286 // AARCH64DARWIN: define{{.*}} i128 @ReturnPassing4( 287 // ARM: define{{.*}} arm_aapcscc void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 288 // LA64: define{{.*}} i128 @ReturnPassing4( 289 // LA32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret 290 291 #if __BITINT_MAXWIDTH__ > 128 292 _BitInt(129) ReturnPassing5(void) { return 0; } 293 // LIN64: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 294 // WIN64: define dso_local void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 295 // LIN32: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 296 // WIN32: define dso_local void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 297 // AARCH64: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 298 // NACL-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 299 // NVPTX64-NOT: define{{.*}} i129 @ReturnPassing5( 300 // NVPTX-NOT: define{{.*}} i129 @ReturnPassing5( 301 // SPARCV9-NOT: define{{.*}} i129 @ReturnPassing5( 302 // SPARC-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 303 // MIPS64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 304 // MIPS-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 305 // SPIR64-NOT: define{{.*}} spir_func void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 306 // SPIR-NOT: define{{.*}} spir_func void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 307 // HEX-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 308 // LANAI-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 309 // R600-NOT: define{{.*}} void @ReturnPassing5(ptr addrspace(5) noalias sret 310 // ARC-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind inreg noalias writable sret 311 // XCORE-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 312 // RISCV64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 313 // RISCV32-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 314 // WASM-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 315 // SYSTEMZ-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 316 // PPC64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 317 // PPC32-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 318 // AARCH64DARWIN-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 319 // ARM-NOT: define{{.*}} arm_aapcscc void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 320 // LA64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 321 // LA32-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret 322 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) { return 0; } 326 // SPARCV9-NOT: define{{.*}} i256 @ReturnPassing6( 327 _BitInt(257) ReturnPassing7(void) { return 0; } 328 // SPARCV9-NOT: define{{.*}} void @ReturnPassing7(ptr dead_on_unwind noalias writable sret 329 #endif 330