1414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm %s -o - | FileCheck %s 2414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm -x c++ %s -o - | FileCheck %s 3414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 4414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef double vector8double __attribute__((__vector_size__(64))); 5414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef float vector8float __attribute__((__vector_size__(32))); 6414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef long vector8long __attribute__((__vector_size__(64))); 7414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef short vector8short __attribute__((__vector_size__(16))); 8414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef unsigned long vector8ulong __attribute__((__vector_size__(64))); 9414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef unsigned short vector8ushort __attribute__((__vector_size__(16))); 10414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 11414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#ifdef __cplusplus 12414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#define BOOL bool 13414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#else 14414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#define BOOL _Bool 15414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#endif 16414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 17414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltypedef BOOL vector8bool __attribute__((__ext_vector_type__(8))); 18414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 19414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#ifdef __cplusplus 20414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelextern "C" { 21414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#endif 22414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 23414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8float flt_trunc(vector8double x) { 24414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8float); 25414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @flt_trunc 26414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: fptrunc <8 x double> %{{[^ ]}} to <8 x float> 27414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 28414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 29414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8double flt_ext(vector8float x) { 30414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8double); 31414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @flt_ext 32414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: fpext <8 x float> %{{[^ ]}} to <8 x double> 33414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 34414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 35414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8bool flt_tobool(vector8float x) { 36414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8bool); 37414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @flt_tobool 38414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-NOT: fptoui <8 x float> %{{[^ ]}} to <8 x i1> 39414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: fcmp une <8 x float> %{{[^ ]}}, zeroinitializer 40414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 41414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 42414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8long flt_tosi(vector8float x) { 43414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8long); 44414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @flt_tosi 45414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: fptosi <8 x float> %{{[^ ]}} to <8 x i64> 46414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 47414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 48414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8ulong flt_toui(vector8float x) { 49414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8ulong); 50414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @flt_toui 51414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: fptoui <8 x float> %{{[^ ]}} to <8 x i64> 52414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 53414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 54414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8ulong fltd_toui(vector8double x) { 55414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8ulong); 56414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @fltd_toui 57414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: fptoui <8 x double> %{{[^ ]}} to <8 x i64> 58414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 59414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 60414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8ulong int_zext(vector8ushort x) { 61414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8ulong); 62414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @int_zext 63414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: zext <8 x i16> %{{[^ ]}} to <8 x i64> 64414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 65414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 66414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8long int_sext(vector8short x) { 67414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8long); 68414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @int_sext 69414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: sext <8 x i16> %{{[^ ]}} to <8 x i64> 70414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 71414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 72414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8bool int_tobool(vector8short x) { 73414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8bool); 74414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @int_tobool 75414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-NOT: trunc <8 x i16> %{{[^ ]}} to <8 x i1> 76414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: icmp ne <8 x i16> %{{[^ ]}}, zeroinitializer 77414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 78414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 79414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8float int_tofp(vector8short x) { 80414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8float); 81414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @int_tofp 82414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: sitofp <8 x i16> %{{[^ ]}} to <8 x float> 83414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 84414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 85414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8float uint_tofp(vector8ushort x) { 86414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8float); 87414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @uint_tofp 88414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: uitofp <8 x i16> %{{[^ ]}} to <8 x float> 89414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 90414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 91414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#ifdef __cplusplus 92414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 93414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#endif 94414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 95414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 96414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#ifdef __cplusplus 97414a1bdbdaf250e0488589f12865c8961831b65dHal Finkeltemplate<typename T> 98414a1bdbdaf250e0488589f12865c8961831b65dHal FinkelT int_toT(vector8long x) { 99414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, T); 100414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 101414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 102414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelextern "C" { 103414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel vector8double int_toT_fp(vector8long x) { 104414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK-LABEL: @int_toT_fp 105414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel // CHECK: sitofp <8 x i64> %{{[^ ]}} to <8 x double> 106414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return int_toT<vector8double>(x); 107414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel } 108414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 109414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#else 110414a1bdbdaf250e0488589f12865c8961831b65dHal Finkelvector8double int_toT_fp(vector8long x) { 111414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel return __builtin_convertvector(x, vector8double); 112414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel} 113414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel#endif 114414a1bdbdaf250e0488589f12865c8961831b65dHal Finkel 115