// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu %s -emit-llvm -o - | FileCheck %s template void CheckIntScalarTypes() { // T will be substituted with 'int' and 'enum' types. typedef T __attribute__((mode(QI))) T1; typedef T __attribute__((mode(HI))) T2; typedef T __attribute__((mode(SI))) T3; typedef T __attribute__((mode(DI))) T4; T1 a1; T2 a2; T3 a3; T4 a4; } template void CheckIntVectorTypes() { // T will be substituted with 'int'. typedef int __attribute__((mode(QI))) __attribute__((vector_size(8))) VT_11; typedef T __attribute__((mode(V8QI))) VT_12; typedef int __attribute__((mode(SI))) __attribute__((vector_size(16))) VT_21; typedef T __attribute__((mode(V4SI))) VT_22; typedef int __attribute__((mode(DI))) __attribute__((vector_size(64))) VT_31; typedef T __attribute__((mode(V8DI))) VT_32; VT_11 v11; VT_12 v12; VT_21 v21; VT_22 v22; VT_31 v31; VT_32 v32; } template void CheckFloatVectorTypes() { // T will be substituted with 'float'. typedef float __attribute__((mode(SF))) __attribute__((vector_size(128))) VT_41; typedef T __attribute__((mode(V32SF))) VT_42; typedef float __attribute__((mode(DF))) __attribute__((vector_size(256))) VT_51; typedef T __attribute__((mode(V32DF))) VT_52; VT_41 v41; VT_42 v42; VT_51 v51; VT_52 v52; } template void CheckInstantiationWithModedType() { T x1; } typedef enum { A1, B1 } EnumTy; typedef int __attribute__((mode(DI))) Int64Ty1; typedef enum __attribute__((mode(DI))) { A2 } Int64Ty2; typedef int __attribute__((mode(V8HI))) IntVecTy1; void test() { // CHECK: define {{.*}} void @_Z19CheckIntScalarTypesIiEvv() // CHECK: %{{.+}} = alloca i8 // CHECK: %{{.+}} = alloca i16 // CHECK: %{{.+}} = alloca i32 // CHECK: %{{.+}} = alloca i64 CheckIntScalarTypes(); // CHECK: define {{.*}} void @_Z19CheckIntScalarTypesI6EnumTyEvv() // CHECK: %{{.+}} = alloca i8 // CHECK: %{{.+}} = alloca i16 // CHECK: %{{.+}} = alloca i32 // CHECK: %{{.+}} = alloca i64 CheckIntScalarTypes(); // CHECK: define {{.*}} void @_Z19CheckIntVectorTypesIiEvv() // CHECK: %{{.+}} = alloca <8 x i8> // CHECK: %{{.+}} = alloca <8 x i8> // CHECK: %{{.+}} = alloca <4 x i32> // CHECK: %{{.+}} = alloca <4 x i32> // CHECK: %{{.+}} = alloca <8 x i64> // CHECK: %{{.+}} = alloca <8 x i64> CheckIntVectorTypes(); // CHECK: define {{.*}} void @_Z21CheckFloatVectorTypesIfEvv() // CHECK: %{{.+}} = alloca <32 x float> // CHECK: %{{.+}} = alloca <32 x float> // CHECK: %{{.+}} = alloca <32 x double> // CHECK: %{{.+}} = alloca <32 x double> CheckFloatVectorTypes(); // CHECK: define {{.*}} void @_Z31CheckInstantiationWithModedTypeIlEvv() // CHECK: [[X1:%.+]] = alloca i64 CheckInstantiationWithModedType(); // CHECK: define {{.*}} void @_Z31CheckInstantiationWithModedTypeI8Int64Ty2Evv() // CHECK: [[X1]] = alloca i64 CheckInstantiationWithModedType(); // CHECK: define {{.*}} void @_Z31CheckInstantiationWithModedTypeIDv8_sEvv() // CHECK: [[X1]] = alloca <8 x i16> CheckInstantiationWithModedType(); }