1*1b9a6e58SNikita Popov // RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-gnu-linux -O3 -disable-llvm-passes -I%S -emit-llvm -o - %s | FileCheck %s --check-prefixes=LIN64 2*1b9a6e58SNikita Popov // RUN: %clang_cc1 -no-enable-noundef-analysis -triple i386-gnu-linux -O3 -disable-llvm-passes -I%S -emit-llvm -o - %s | FileCheck %s --check-prefixes=LIN32 3649a5971SXiang Li 4*1b9a6e58SNikita Popov // RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-windows-pc -O3 -disable-llvm-passes -I%S -emit-llvm -o - %s | FileCheck %s --check-prefixes=WIN64 5*1b9a6e58SNikita Popov // RUN: %clang_cc1 -no-enable-noundef-analysis -triple i386-windows-pc -O3 -disable-llvm-passes -I%S -emit-llvm -o - %s | FileCheck %s --check-prefixes=WIN32 6649a5971SXiang Li 7649a5971SXiang Li // Make sure BitInt vector match builtin Int vector abi. 8649a5971SXiang Li 9649a5971SXiang Li using int8_t3 = _BitInt(8) __attribute__((ext_vector_type(3))); ManglingTestRetParam(int8_t3 Param)10649a5971SXiang Liint8_t3 ManglingTestRetParam(int8_t3 Param) { 11649a5971SXiang Li // LIN64: define{{.*}} i32 @_Z20ManglingTestRetParamDv3_DB8_(i32 % 12649a5971SXiang Li // LIN32: define{{.*}} <3 x i8> @_Z20ManglingTestRetParamDv3_DB8_(<3 x i8> % 13649a5971SXiang Li // WIN64: define dso_local <3 x i8> @"?ManglingTestRetParam@@YAT?$__vector@U?$_BitInt@$07@__clang@@$02@__clang@@T12@@Z"(<3 x i8> % 14649a5971SXiang Li // WIN32: define dso_local <3 x i8> @"?ManglingTestRetParam@@YAT?$__vector@U?$_BitInt@$07@__clang@@$02@__clang@@T12@@Z"(<3 x i8> inreg % 15649a5971SXiang Li return Param; 16649a5971SXiang Li } 17649a5971SXiang Li using int8_t3c = char __attribute__((ext_vector_type(3))); ManglingTestRetParam(int8_t3c Param)18649a5971SXiang Liint8_t3c ManglingTestRetParam(int8_t3c Param) { 19649a5971SXiang Li // LIN64: define{{.*}} i32 @_Z20ManglingTestRetParamDv3_c(i32 % 20649a5971SXiang Li // LIN32: define{{.*}} <3 x i8> @_Z20ManglingTestRetParamDv3_c(<3 x i8> % 21649a5971SXiang Li // WIN64: define dso_local <3 x i8> @"?ManglingTestRetParam@@YAT?$__vector@D$02@__clang@@T12@@Z"(<3 x i8> % 22649a5971SXiang Li // WIN32: define dso_local <3 x i8> @"?ManglingTestRetParam@@YAT?$__vector@D$02@__clang@@T12@@Z"(<3 x i8> inreg % 23649a5971SXiang Li return Param; 24649a5971SXiang Li } 25649a5971SXiang Li 26649a5971SXiang Li typedef unsigned _BitInt(16) uint16_t4 __attribute__((ext_vector_type(4))); ManglingTestRetParam(uint16_t4 Param)27649a5971SXiang Liuint16_t4 ManglingTestRetParam(uint16_t4 Param) { 28649a5971SXiang Li // LIN64: define{{.*}} double @_Z20ManglingTestRetParamDv4_DU16_(double % 29649a5971SXiang Li // LIN32: define{{.*}} <4 x i16> @_Z20ManglingTestRetParamDv4_DU16_(i64 % 30649a5971SXiang Li // WIN64: define dso_local <4 x i16> @"?ManglingTestRetParam@@YAT?$__vector@U?$_UBitInt@$0BA@@__clang@@$03@__clang@@T12@@Z"(<4 x i16> % 31649a5971SXiang Li // WIN32: define dso_local <4 x i16> @"?ManglingTestRetParam@@YAT?$__vector@U?$_UBitInt@$0BA@@__clang@@$03@__clang@@T12@@Z"(<4 x i16> inreg % 32649a5971SXiang Li return Param; 33649a5971SXiang Li } 34649a5971SXiang Li 35649a5971SXiang Li typedef unsigned short uint16_t4s __attribute__((ext_vector_type(4))); ManglingTestRetParam(uint16_t4s Param)36649a5971SXiang Liuint16_t4s ManglingTestRetParam(uint16_t4s Param) { 37649a5971SXiang Li // LIN64: define{{.*}} double @_Z20ManglingTestRetParamDv4_t(double % 38649a5971SXiang Li // LIN32: define{{.*}} <4 x i16> @_Z20ManglingTestRetParamDv4_t(i64 % 39649a5971SXiang Li // WIN64: define dso_local <4 x i16> @"?ManglingTestRetParam@@YAT?$__vector@G$03@__clang@@T12@@Z"(<4 x i16> % 40649a5971SXiang Li // WIN32: define dso_local <4 x i16> @"?ManglingTestRetParam@@YAT?$__vector@G$03@__clang@@T12@@Z"(<4 x i16> inreg % 41649a5971SXiang Li return Param; 42649a5971SXiang Li } 43649a5971SXiang Li 44649a5971SXiang Li typedef unsigned _BitInt(32) uint32_t4 __attribute__((ext_vector_type(4))); ManglingTestRetParam(uint32_t4 Param)45649a5971SXiang Liuint32_t4 ManglingTestRetParam(uint32_t4 Param) { 46649a5971SXiang Li // LIN64: define{{.*}} <4 x i32> @_Z20ManglingTestRetParamDv4_DU32_(<4 x i32> % 47649a5971SXiang Li // LIN32: define{{.*}} <4 x i32> @_Z20ManglingTestRetParamDv4_DU32_(<4 x i32> % 48649a5971SXiang Li // WIN64: define dso_local <4 x i32> @"?ManglingTestRetParam@@YAT?$__vector@U?$_UBitInt@$0CA@@__clang@@$03@__clang@@T12@@Z"(<4 x i32> % 49649a5971SXiang Li // WIN32: define dso_local <4 x i32> @"?ManglingTestRetParam@@YAT?$__vector@U?$_UBitInt@$0CA@@__clang@@$03@__clang@@T12@@Z"(<4 x i32> inreg % 50649a5971SXiang Li return Param; 51649a5971SXiang Li } 52649a5971SXiang Li 53649a5971SXiang Li typedef unsigned int uint32_t4s __attribute__((ext_vector_type(4))); ManglingTestRetParam(uint32_t4s Param)54649a5971SXiang Liuint32_t4s ManglingTestRetParam(uint32_t4s Param) { 55649a5971SXiang Li // LIN64: define{{.*}} <4 x i32> @_Z20ManglingTestRetParamDv4_j(<4 x i32> % 56649a5971SXiang Li // LIN32: define{{.*}} <4 x i32> @_Z20ManglingTestRetParamDv4_j(<4 x i32> % 57649a5971SXiang Li // WIN64: define dso_local <4 x i32> @"?ManglingTestRetParam@@YAT?$__vector@I$03@__clang@@T12@@Z"(<4 x i32> % 58649a5971SXiang Li // WIN32: define dso_local <4 x i32> @"?ManglingTestRetParam@@YAT?$__vector@I$03@__clang@@T12@@Z"(<4 x i32> inreg % 59649a5971SXiang Li return Param; 60649a5971SXiang Li } 61649a5971SXiang Li 62649a5971SXiang Li typedef unsigned _BitInt(64) uint64_t4 __attribute__((ext_vector_type(4))); ManglingTestRetParam(uint64_t4 Param)63649a5971SXiang Liuint64_t4 ManglingTestRetParam(uint64_t4 Param) { 64*1b9a6e58SNikita Popov // LIN64: define{{.*}} <4 x i64> @_Z20ManglingTestRetParamDv4_DU64_(ptr byval(<4 x i64>) align 32 % 65649a5971SXiang Li // LIN32: define{{.*}} <4 x i64> @_Z20ManglingTestRetParamDv4_DU64_(<4 x i64> % 66649a5971SXiang Li // WIN64: define dso_local <4 x i64> @"?ManglingTestRetParam@@YAT?$__vector@U?$_UBitInt@$0EA@@__clang@@$03@__clang@@T12@@Z"(<4 x i64> % 67649a5971SXiang Li // WIN32: define dso_local <4 x i64> @"?ManglingTestRetParam@@YAT?$__vector@U?$_UBitInt@$0EA@@__clang@@$03@__clang@@T12@@Z"(<4 x i64> inreg % 68649a5971SXiang Li return Param; 69649a5971SXiang Li } 70649a5971SXiang Li 71649a5971SXiang Li typedef unsigned long long uint64_t4s __attribute__((ext_vector_type(4))); ManglingTestRetParam(uint64_t4s Param)72649a5971SXiang Liuint64_t4s ManglingTestRetParam(uint64_t4s Param) { 73*1b9a6e58SNikita Popov // LIN64: define{{.*}} <4 x i64> @_Z20ManglingTestRetParamDv4_y(ptr byval(<4 x i64>) align 32 % 74649a5971SXiang Li // LIN32: define{{.*}} <4 x i64> @_Z20ManglingTestRetParamDv4_y(<4 x i64> % 75649a5971SXiang Li // WIN64: define dso_local <4 x i64> @"?ManglingTestRetParam@@YAT?$__vector@_K$03@__clang@@T12@@Z"(<4 x i64> % 76649a5971SXiang Li // WIN32: define dso_local <4 x i64> @"?ManglingTestRetParam@@YAT?$__vector@_K$03@__clang@@T12@@Z"(<4 x i64> inreg % 77649a5971SXiang Li return Param; 78649a5971SXiang Li } 79649a5971SXiang Li 80649a5971SXiang Li typedef _BitInt(32) vint32_t8 __attribute__((vector_size(32))); ManglingTestRetParam(vint32_t8 Param)81649a5971SXiang Livint32_t8 ManglingTestRetParam(vint32_t8 Param) { 82*1b9a6e58SNikita Popov // LIN64: define{{.*}} <8 x i32> @_Z20ManglingTestRetParamDv8_DB32_(ptr byval(<8 x i32>) align 32 % 83649a5971SXiang Li // LIN32: define{{.*}} <8 x i32> @_Z20ManglingTestRetParamDv8_DB32_(<8 x i32> % 84649a5971SXiang Li // WIN64: define dso_local <8 x i32> @"?ManglingTestRetParam@@YA?AT?$__vector@U?$_BitInt@$0CA@@__clang@@$07@__clang@@T12@@Z"(<8 x i32> % 85649a5971SXiang Li // WIN32: define dso_local <8 x i32> @"?ManglingTestRetParam@@YA?AT?$__vector@U?$_BitInt@$0CA@@__clang@@$07@__clang@@T12@@Z"(<8 x i32> inreg % 86649a5971SXiang Li return Param; 87649a5971SXiang Li } 88649a5971SXiang Li 89649a5971SXiang Li typedef int vint32_t8i __attribute__((vector_size(32))); ManglingTestRetParam(vint32_t8i Param)90649a5971SXiang Livint32_t8i ManglingTestRetParam(vint32_t8i Param) { 91*1b9a6e58SNikita Popov // LIN64: define{{.*}} <8 x i32> @_Z20ManglingTestRetParamDv8_i(ptr byval(<8 x i32>) align 32 % 92649a5971SXiang Li // LIN32: define{{.*}} <8 x i32> @_Z20ManglingTestRetParamDv8_i(<8 x i32> % 93649a5971SXiang Li // WIN64: define dso_local <8 x i32> @"?ManglingTestRetParam@@YA?AT?$__vector@H$07@__clang@@T12@@Z"(<8 x i32> % 94649a5971SXiang Li // WIN32: define dso_local <8 x i32> @"?ManglingTestRetParam@@YA?AT?$__vector@H$07@__clang@@T12@@Z"(<8 x i32> inreg % 95649a5971SXiang Li return Param; 96649a5971SXiang Li } 97649a5971SXiang Li 98649a5971SXiang Li typedef unsigned _BitInt(64) uvint64_t16 __attribute__((vector_size(16))); ManglingTestRetParam(uvint64_t16 Param)99649a5971SXiang Liuvint64_t16 ManglingTestRetParam(uvint64_t16 Param) { 100649a5971SXiang Li // LIN64: define{{.*}} <2 x i64> @_Z20ManglingTestRetParamDv2_DU64_(<2 x i64> % 101649a5971SXiang Li // LIN32: define{{.*}} <2 x i64> @_Z20ManglingTestRetParamDv2_DU64_(<2 x i64> % 102649a5971SXiang Li // WIN64: define dso_local <2 x i64> @"?ManglingTestRetParam@@YA?AT?$__vector@U?$_UBitInt@$0EA@@__clang@@$01@__clang@@T12@@Z"(<2 x i64> % 103649a5971SXiang Li // WIN32: define dso_local <2 x i64> @"?ManglingTestRetParam@@YA?AT?$__vector@U?$_UBitInt@$0EA@@__clang@@$01@__clang@@T12@@Z"(<2 x i64> inreg % 104649a5971SXiang Li return Param; 105649a5971SXiang Li } 106649a5971SXiang Li using uvint64_t16l = unsigned long long __attribute__((vector_size(16))); ManglingTestRetParam(uvint64_t16l Param)107649a5971SXiang Liuvint64_t16l ManglingTestRetParam(uvint64_t16l Param) { 108649a5971SXiang Li // LIN64: define{{.*}} <2 x i64> @_Z20ManglingTestRetParamDv2_y(<2 x i64> % 109649a5971SXiang Li // LIN32: define{{.*}} <2 x i64> @_Z20ManglingTestRetParamDv2_y(<2 x i64> % 110649a5971SXiang Li // WIN64: define dso_local <2 x i64> @"?ManglingTestRetParam@@YA?AT?$__vector@_K$01@__clang@@T12@@Z"(<2 x i64> % 111649a5971SXiang Li // WIN32: define dso_local <2 x i64> @"?ManglingTestRetParam@@YA?AT?$__vector@_K$01@__clang@@T12@@Z"(<2 x i64> inreg % 112649a5971SXiang Li return Param; 113649a5971SXiang Li } 114