321 lines · c
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=LIN642// RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-windows-pc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WIN643// RUN: %clang_cc1 -no-enable-noundef-analysis -triple i386-gnu-linux -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LIN324// RUN: %clang_cc1 -no-enable-noundef-analysis -triple i386-windows-pc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WIN325// RUN: %clang_cc1 -no-enable-noundef-analysis -triple nvptx64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=NVPTX646// RUN: %clang_cc1 -no-enable-noundef-analysis -triple nvptx -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=NVPTX7// RUN: %clang_cc1 -no-enable-noundef-analysis -triple sparcv9 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPARCV98// RUN: %clang_cc1 -no-enable-noundef-analysis -triple sparc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPARC9// RUN: %clang_cc1 -no-enable-noundef-analysis -triple mips64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=MIPS6410// RUN: %clang_cc1 -no-enable-noundef-analysis -triple mips -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=MIPS11// RUN: %clang_cc1 -no-enable-noundef-analysis -triple spir64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPIR6412// RUN: %clang_cc1 -no-enable-noundef-analysis -triple spir -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SPIR13// RUN: %clang_cc1 -no-enable-noundef-analysis -triple hexagon -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=HEX14// RUN: %clang_cc1 -no-enable-noundef-analysis -triple lanai -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=LANAI15// RUN: %clang_cc1 -no-enable-noundef-analysis -triple r600 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=R60016// RUN: %clang_cc1 -no-enable-noundef-analysis -triple arc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=ARC17// RUN: %clang_cc1 -no-enable-noundef-analysis -triple xcore -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=XCORE18// RUN: %clang_cc1 -no-enable-noundef-analysis -triple riscv64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=RISCV6419// RUN: %clang_cc1 -no-enable-noundef-analysis -triple riscv32 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=RISCV3220// RUN: %clang_cc1 -no-enable-noundef-analysis -triple wasm64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WASM21// RUN: %clang_cc1 -no-enable-noundef-analysis -triple wasm32 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=WASM22// RUN: %clang_cc1 -no-enable-noundef-analysis -triple systemz -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=SYSTEMZ23// RUN: %clang_cc1 -no-enable-noundef-analysis -triple ppc64 -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=PPC6424// RUN: %clang_cc1 -no-enable-noundef-analysis -triple ppc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=PPC3225// 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=AARCH6426// RUN: %clang_cc1 -no-enable-noundef-analysis -triple aarch64 -target-abi darwinpcs -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=AARCH64DARWIN27// 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=AARCH6428// 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=AARCH64DARWIN29// RUN: %clang_cc1 -no-enable-noundef-analysis -triple arm -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=ARM30// RUN: %clang_cc1 -no-enable-noundef-analysis -triple loongarch64 -O3 -disable-llvm-passes -fexperimental-max-bitint-width=1024 -emit-llvm -o - %s | FileCheck %s --check-prefixes=LA6431// RUN: %clang_cc1 -no-enable-noundef-analysis -triple loongarch32 -O3 -disable-llvm-passes -fexperimental-max-bitint-width=1024 -emit-llvm -o - %s | FileCheck %s --check-prefixes=LA3232 33// Make sure 128 and 64 bit versions are passed like integers.34void ParamPassing(_BitInt(128) b, _BitInt(64) c) {}35// LIN64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})36// WIN64: define dso_local void @ParamPassing(ptr dead_on_return %{{.+}}, i64 %{{.+}})37// LIN32: define{{.*}} void @ParamPassing(ptr dead_on_return %{{.+}}, i64 %{{.+}})38// WIN32: define dso_local void @ParamPassing(ptr dead_on_return %{{.+}}, i64 %{{.+}})39// NVPTX64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})40// NVPTX: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})41// SPARCV9: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})42// SPARC: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})43// MIPS64: define{{.*}} void @ParamPassing(i128 signext %{{.+}}, i64 signext %{{.+}})44// MIPS: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 signext %{{.+}})45// SPIR64: define{{.*}} spir_func void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})46// SPIR: define{{.*}} spir_func void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})47// HEX: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})48// LANAI: define{{.*}} void @ParamPassing(ptr byval(i128) align 4 %{{.+}}, i64 %{{.+}})49// R600: define{{.*}} void @ParamPassing(ptr addrspace(5) byval(i128) align 8 %{{.+}}, i64 %{{.+}})50// ARC: define{{.*}} void @ParamPassing(ptr byval(i128) align 4 %{{.+}}, i64 inreg %{{.+}})51// XCORE: define{{.*}} void @ParamPassing(ptr byval(i128) align 4 %{{.+}}, i64 %{{.+}})52// RISCV64: define{{.*}} void @ParamPassing(i128 signext %{{.+}}, i64 signext %{{.+}})53// RISCV32: define{{.*}} void @ParamPassing(ptr dead_on_return %{{.+}}, i64 signext %{{.+}})54// WASM: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})55// SYSTEMZ: define{{.*}} void @ParamPassing(ptr dead_on_return %{{.+}}, i64 %{{.+}})56// PPC64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})57// PPC32: define{{.*}} void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})58// AARCH64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})59// AARCH64DARWIN: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})60// ARM: define{{.*}} arm_aapcscc void @ParamPassing(ptr byval(i128) align 8 %{{.+}}, i64 %{{.+}})61// LA64: define{{.*}} void @ParamPassing(i128 %{{.+}}, i64 %{{.+}})62// LA32: define{{.*}} void @ParamPassing(ptr dead_on_return %{{.+}}, i64 %{{.+}})63 64void ParamPassing2(_BitInt(127) b, _BitInt(63) c) {}65// LIN64: define{{.*}} void @ParamPassing2(i64 %{{.+}}, i64 %{{.+}}, i64 %{{.+}})66// WIN64: define dso_local void @ParamPassing2(ptr dead_on_return %{{.+}}, i63 %{{.+}})67// LIN32: define{{.*}} void @ParamPassing2(ptr dead_on_return %{{.+}}, i63 %{{.+}})68// WIN32: define dso_local void @ParamPassing2(ptr dead_on_return %{{.+}}, i63 %{{.+}})69// NVPTX64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})70// NVPTX: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})71// SPARCV9: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})72// SPARC: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})73// MIPS64: define{{.*}} void @ParamPassing2(i127 signext %{{.+}}, i63 signext %{{.+}})74// MIPS: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 signext %{{.+}})75// SPIR64: define{{.*}} spir_func void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})76// SPIR: define{{.*}} spir_func void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})77// HEX: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})78// LANAI: define{{.*}} void @ParamPassing2(ptr byval(i128) align 4 %{{.+}}, i63 %{{.+}})79// R600: define{{.*}} void @ParamPassing2(ptr addrspace(5) byval(i128) align 8 %{{.+}}, i63 %{{.+}})80// ARC: define{{.*}} void @ParamPassing2(ptr byval(i128) align 4 %{{.+}}, i63 inreg %{{.+}})81// XCORE: define{{.*}} void @ParamPassing2(ptr byval(i128) align 4 %{{.+}}, i63 %{{.+}})82// RISCV64: define{{.*}} void @ParamPassing2(i127 signext %{{.+}}, i63 signext %{{.+}})83// RISCV32: define{{.*}} void @ParamPassing2(ptr dead_on_return %{{.+}}, i63 signext %{{.+}})84// WASM: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})85// SYSTEMZ: define{{.*}} void @ParamPassing2(ptr dead_on_return %{{.+}}, i63 signext %{{.+}})86// PPC64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})87// PPC32: define{{.*}} void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})88// AARCH64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})89// AARCH64DARWIN: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 %{{.+}})90// ARM: define{{.*}} arm_aapcscc void @ParamPassing2(ptr byval(i128) align 8 %{{.+}}, i63 %{{.+}})91// LA64: define{{.*}} void @ParamPassing2(i127 %{{.+}}, i63 signext %{{.+}})92// LA32: define{{.*}} void @ParamPassing2(ptr dead_on_return %{{.+}}, i63 %{{.+}})93 94// Make sure we follow the signext rules for promotable integer types.95void ParamPassing3(_BitInt(15) a, _BitInt(31) b) {}96// LIN64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})97// WIN64: define dso_local void @ParamPassing3(i15 %{{.+}}, i31 %{{.+}})98// LIN32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})99// WIN32: define dso_local void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})100// NVPTX64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})101// NVPTX: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})102// SPARCV9: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})103// SPARC: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})104// MIPS64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})105// MIPS: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})106// SPIR64: define{{.*}} spir_func void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})107// SPIR: define{{.*}} spir_func void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})108// HEX: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})109// LANAI: define{{.*}} void @ParamPassing3(i15 inreg %{{.+}}, i31 inreg %{{.+}})110// R600: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})111// ARC: define{{.*}} void @ParamPassing3(i15 inreg signext %{{.+}}, i31 inreg signext %{{.+}})112// XCORE: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})113// RISCV64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})114// RISCV32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})115// WASM: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})116// SYSTEMZ: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})117// PPC64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})118// PPC32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})119// AARCH64: define{{.*}} void @ParamPassing3(i15 %{{.+}}, i31 %{{.+}})120// AARCH64DARWIN: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})121// ARM: define{{.*}} arm_aapcscc void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})122// LA64: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})123// LA32: define{{.*}} void @ParamPassing3(i15 signext %{{.+}}, i31 signext %{{.+}})124 125#if __BITINT_MAXWIDTH__ > 128126// When supported, bit-precise types that are >128 are passed indirectly. Note,127// FileCheck doesn't pay attention to the preprocessor, so all of these tests128// are negated. This will give an error when a target does support larger129// _BitInt widths to alert us to enable the test.130void ParamPassing4(_BitInt(129) a) {}131// LIN64: define{{.*}} void @ParamPassing4(ptr byval([24 x i8]) align 8 %{{.+}})132// WIN64: define dso_local void @ParamPassing4(ptr dead_on_return %{{.+}})133// LIN32: define{{.*}} void @ParamPassing4(ptr dead_on_return %{{.+}})134// WIN32: define dso_local void @ParamPassing4(ptr dead_on_return %{{.+}})135// AARCH64: define{{.*}} void @ParamPassing4(ptr dead_on_return %{{.+}})136// NVPTX64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})137// NVPTX-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})138// SPARCV9-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})139// SPARC-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})140// MIPS64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})141// MIPS-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})142// SPIR64-NOT: define{{.*}} spir_func void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})143// SPIR-NOT: define{{.*}} spir_func void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})144// HEX-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})145// LANAI-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}})146// R600-NOT: define{{.*}} void @ParamPassing4(ptr addrspace(5) byval(i129) align 8 %{{.+}})147// ARC-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}})148// XCORE-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 4 %{{.+}})149// RISCV64-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})150// RISCV32-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})151// WASM-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})152// SYSTEMZ-NOT: define{{.*}} void @ParamPassing4(ptr %{{.+}})153// PPC64-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})154// PPC32-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})155// AARCH64DARWIN-NOT: define{{.*}} void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})156// ARM-NOT: define{{.*}} arm_aapcscc void @ParamPassing4(ptr byval(i129) align 8 %{{.+}})157// LA64: define{{.*}} void @ParamPassing4(ptr dead_on_return %{{.+}})158// LA32: define{{.*}} void @ParamPassing4(ptr dead_on_return %{{.+}})159#endif160 161_BitInt(63) ReturnPassing(void) { return 0; }162// LIN64: define{{.*}} i64 @ReturnPassing(163// WIN64: define dso_local i63 @ReturnPassing(164// LIN32: define{{.*}} i63 @ReturnPassing(165// WIN32: define dso_local i63 @ReturnPassing(166// NVPTX64: define{{.*}} i63 @ReturnPassing(167// NVPTX: define{{.*}} i63 @ReturnPassing(168// SPARCV9: define{{.*}} signext i63 @ReturnPassing(169// SPARC: define{{.*}} i63 @ReturnPassing(170// MIPS64: define{{.*}} i63 @ReturnPassing(171// MIPS: define{{.*}} i63 @ReturnPassing(172// SPIR64: define{{.*}} spir_func i63 @ReturnPassing(173// SPIR: define{{.*}} spir_func i63 @ReturnPassing(174// HEX: define{{.*}} i63 @ReturnPassing(175// LANAI: define{{.*}} i63 @ReturnPassing(176// R600: define{{.*}} i63 @ReturnPassing(177// ARC: define{{.*}} i63 @ReturnPassing(178// XCORE: define{{.*}} i63 @ReturnPassing(179// RISCV64: define{{.*}} signext i63 @ReturnPassing(180// RISCV32: define{{.*}} i63 @ReturnPassing(181// WASM: define{{.*}} i63 @ReturnPassing(182// SYSTEMZ: define{{.*}} signext i63 @ReturnPassing(183// PPC64: define{{.*}} signext i63 @ReturnPassing(184// PPC32: define{{.*}} i63 @ReturnPassing(185// AARCH64: define{{.*}} i63 @ReturnPassing(186// AARCH64DARWIN: define{{.*}} i63 @ReturnPassing(187// ARM: define{{.*}} arm_aapcscc i63 @ReturnPassing(188// LA64: define{{.*}} signext i63 @ReturnPassing(189// LA32: define{{.*}} i63 @ReturnPassing(190 191_BitInt(64) ReturnPassing2(void) { return 0; }192// LIN64: define{{.*}} i64 @ReturnPassing2(193// WIN64: define dso_local i64 @ReturnPassing2(194// LIN32: define{{.*}} i64 @ReturnPassing2(195// WIN32: define dso_local i64 @ReturnPassing2(196// NVPTX64: define{{.*}} i64 @ReturnPassing2(197// NVPTX: define{{.*}} i64 @ReturnPassing2(198// SPARCV9: define{{.*}} i64 @ReturnPassing2(199// SPARC: define{{.*}} i64 @ReturnPassing2(200// MIPS64: define{{.*}} i64 @ReturnPassing2(201// MIPS: define{{.*}} i64 @ReturnPassing2(202// SPIR64: define{{.*}} spir_func i64 @ReturnPassing2(203// SPIR: define{{.*}} spir_func i64 @ReturnPassing2(204// HEX: define{{.*}} i64 @ReturnPassing2(205// LANAI: define{{.*}} i64 @ReturnPassing2(206// R600: define{{.*}} i64 @ReturnPassing2(207// ARC: define{{.*}} i64 @ReturnPassing2(208// XCORE: define{{.*}} i64 @ReturnPassing2(209// RISCV64: define{{.*}} i64 @ReturnPassing2(210// RISCV32: define{{.*}} i64 @ReturnPassing2(211// WASM: define{{.*}} i64 @ReturnPassing2(212// SYSTEMZ: define{{.*}} i64 @ReturnPassing2(213// PPC64: define{{.*}} i64 @ReturnPassing2(214// PPC32: define{{.*}} i64 @ReturnPassing2(215// AARCH64: define{{.*}} i64 @ReturnPassing2(216// AARCH64DARWIN: define{{.*}} i64 @ReturnPassing2(217// ARM: define{{.*}} arm_aapcscc i64 @ReturnPassing2(218// LA64: define{{.*}} i64 @ReturnPassing2(219// LA32: define{{.*}} i64 @ReturnPassing2(220 221_BitInt(127) ReturnPassing3(void) { return 0; }222// LIN64: define{{.*}} { i64, i64 } @ReturnPassing3(223// WIN64: define dso_local void @ReturnPassing3(ptr dead_on_unwind noalias writable sret224// LIN32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret225// WIN32: define dso_local void @ReturnPassing3(ptr dead_on_unwind noalias writable sret226// NVPTX/64 makes the intentional choice to put all return values direct, even227// large structures, so we do the same here.228// NVPTX64: define{{.*}} i127 @ReturnPassing3(229// NVPTX: define{{.*}} i127 @ReturnPassing3(230// SPARCV9: define{{.*}} i127 @ReturnPassing3(231// SPARC: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret232// MIPS64: define{{.*}} i127 @ReturnPassing3(233// MIPS: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret234// SPIR64: define{{.*}} spir_func void @ReturnPassing3(ptr dead_on_unwind noalias writable sret235// SPIR: define{{.*}} spir_func void @ReturnPassing3(ptr dead_on_unwind noalias writable sret236// HEX: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret237// LANAI: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret238// R600: define{{.*}} void @ReturnPassing3(ptr addrspace(5) dead_on_unwind noalias writable sret239// ARC: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret240// XCORE: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret241// RISCV64: define{{.*}} i127 @ReturnPassing3(242// RISCV32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret243// WASM: define{{.*}} i127 @ReturnPassing3(244// SYSTEMZ: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret245// PPC64: define{{.*}} i127 @ReturnPassing3(246// PPC32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret247// AARCH64: define{{.*}} i127 @ReturnPassing3(248// AARCH64DARWIN: define{{.*}} i127 @ReturnPassing3(249// ARM: define{{.*}} arm_aapcscc void @ReturnPassing3(ptr dead_on_unwind noalias writable sret250// LA64: define{{.*}} i127 @ReturnPassing3(251// LA32: define{{.*}} void @ReturnPassing3(ptr dead_on_unwind noalias writable sret252 253_BitInt(128) ReturnPassing4(void) { return 0; }254// LIN64: define{{.*}} i128 @ReturnPassing4(255// WIN64: define dso_local void @ReturnPassing4(ptr dead_on_unwind noalias writable sret256// LIN32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret257// WIN32: define dso_local void @ReturnPassing4(ptr dead_on_unwind noalias writable sret258// NVPTX64: define{{.*}} i128 @ReturnPassing4(259// NVPTX: define{{.*}} i128 @ReturnPassing4(260// SPARCV9: define{{.*}} i128 @ReturnPassing4(261// SPARC: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret262// MIPS64: define{{.*}} i128 @ReturnPassing4(263// MIPS: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret264// SPIR64: define{{.*}} spir_func void @ReturnPassing4(ptr dead_on_unwind noalias writable sret265// SPIR: define{{.*}} spir_func void @ReturnPassing4(ptr dead_on_unwind noalias writable sret266// HEX: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret267// LANAI: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret268// R600: define{{.*}} void @ReturnPassing4(ptr addrspace(5) dead_on_unwind noalias writable sret269// ARC: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret270// XCORE: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret271// RISCV64: define{{.*}} i128 @ReturnPassing4(272// RISCV32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret273// WASM: define{{.*}} i128 @ReturnPassing4(274// SYSTEMZ: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret275// PPC64: define{{.*}} i128 @ReturnPassing4(276// PPC32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret277// AARCH64: define{{.*}} i128 @ReturnPassing4(278// AARCH64DARWIN: define{{.*}} i128 @ReturnPassing4(279// ARM: define{{.*}} arm_aapcscc void @ReturnPassing4(ptr dead_on_unwind noalias writable sret280// LA64: define{{.*}} i128 @ReturnPassing4(281// LA32: define{{.*}} void @ReturnPassing4(ptr dead_on_unwind noalias writable sret282 283#if __BITINT_MAXWIDTH__ > 128284_BitInt(129) ReturnPassing5(void) { return 0; }285// LIN64: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret286// WIN64: define dso_local void @ReturnPassing5(ptr dead_on_unwind noalias writable sret287// LIN32: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret288// WIN32: define dso_local void @ReturnPassing5(ptr dead_on_unwind noalias writable sret289// AARCH64: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret290// NVPTX64-NOT: define{{.*}} i129 @ReturnPassing5(291// NVPTX-NOT: define{{.*}} i129 @ReturnPassing5(292// SPARCV9-NOT: define{{.*}} i129 @ReturnPassing5(293// SPARC-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret294// MIPS64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret295// MIPS-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret296// SPIR64-NOT: define{{.*}} spir_func void @ReturnPassing5(ptr dead_on_unwind noalias writable sret297// SPIR-NOT: define{{.*}} spir_func void @ReturnPassing5(ptr dead_on_unwind noalias writable sret298// HEX-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret299// LANAI-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret300// R600-NOT: define{{.*}} void @ReturnPassing5(ptr addrspace(5) noalias sret301// ARC-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind inreg noalias writable sret302// XCORE-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret303// RISCV64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret304// RISCV32-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret305// WASM-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret306// SYSTEMZ-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret307// PPC64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret308// PPC32-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret309// AARCH64DARWIN-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret310// ARM-NOT: define{{.*}} arm_aapcscc void @ReturnPassing5(ptr dead_on_unwind noalias writable sret311// LA64: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret312// LA32: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret313 314// SparcV9 is odd in that it has a return-size limit of 256, not 128 or 64315// like other platforms, so test to make sure this behavior will still work.316_BitInt(256) ReturnPassing6(void) { return 0; }317// SPARCV9-NOT: define{{.*}} i256 @ReturnPassing6(318_BitInt(257) ReturnPassing7(void) { return 0; }319// SPARCV9-NOT: define{{.*}} void @ReturnPassing7(ptr dead_on_unwind noalias writable sret320#endif321