xref: /llvm-project/clang/test/CodeGen/convertvector.c (revision a2f29fa694214e622ea21e6c5b541d406970bf4f)
1*c4d7c82cSHal Finkel // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm %s -o - | FileCheck %s
2*c4d7c82cSHal Finkel // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm -x c++ %s -o - | FileCheck %s
3*c4d7c82cSHal Finkel 
4*c4d7c82cSHal Finkel typedef double vector8double __attribute__((__vector_size__(64)));
5*c4d7c82cSHal Finkel typedef float  vector8float  __attribute__((__vector_size__(32)));
6*c4d7c82cSHal Finkel typedef long   vector8long   __attribute__((__vector_size__(64)));
7*c4d7c82cSHal Finkel typedef short  vector8short  __attribute__((__vector_size__(16)));
8*c4d7c82cSHal Finkel typedef unsigned long   vector8ulong   __attribute__((__vector_size__(64)));
9*c4d7c82cSHal Finkel typedef unsigned short  vector8ushort  __attribute__((__vector_size__(16)));
10*c4d7c82cSHal Finkel 
11*c4d7c82cSHal Finkel #ifdef __cplusplus
12*c4d7c82cSHal Finkel extern "C" {
13*c4d7c82cSHal Finkel #endif
14*c4d7c82cSHal Finkel 
flt_trunc(vector8double x)15*c4d7c82cSHal Finkel vector8float flt_trunc(vector8double x) {
16*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8float);
17*c4d7c82cSHal Finkel   // CHECK-LABEL: @flt_trunc
18*c4d7c82cSHal Finkel   // CHECK: fptrunc <8 x double> %{{[^ ]}} to <8 x float>
19*c4d7c82cSHal Finkel }
20*c4d7c82cSHal Finkel 
flt_ext(vector8float x)21*c4d7c82cSHal Finkel vector8double flt_ext(vector8float x) {
22*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8double);
23*c4d7c82cSHal Finkel   // CHECK-LABEL: @flt_ext
24*c4d7c82cSHal Finkel   // CHECK: fpext <8 x float> %{{[^ ]}} to <8 x double>
25*c4d7c82cSHal Finkel }
26*c4d7c82cSHal Finkel 
flt_tosi(vector8float x)27*c4d7c82cSHal Finkel vector8long flt_tosi(vector8float x) {
28*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8long);
29*c4d7c82cSHal Finkel   // CHECK-LABEL: @flt_tosi
30*c4d7c82cSHal Finkel   // CHECK: fptosi <8 x float> %{{[^ ]}} to <8 x i64>
31*c4d7c82cSHal Finkel }
32*c4d7c82cSHal Finkel 
flt_toui(vector8float x)33*c4d7c82cSHal Finkel vector8ulong flt_toui(vector8float x) {
34*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8ulong);
35*c4d7c82cSHal Finkel   // CHECK-LABEL: @flt_toui
36*c4d7c82cSHal Finkel   // CHECK: fptoui <8 x float> %{{[^ ]}} to <8 x i64>
37*c4d7c82cSHal Finkel }
38*c4d7c82cSHal Finkel 
fltd_toui(vector8double x)39*c4d7c82cSHal Finkel vector8ulong fltd_toui(vector8double x) {
40*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8ulong);
41*c4d7c82cSHal Finkel   // CHECK-LABEL: @fltd_toui
42*c4d7c82cSHal Finkel   // CHECK: fptoui <8 x double> %{{[^ ]}} to <8 x i64>
43*c4d7c82cSHal Finkel }
44*c4d7c82cSHal Finkel 
int_zext(vector8ushort x)45*c4d7c82cSHal Finkel vector8ulong int_zext(vector8ushort x) {
46*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8ulong);
47*c4d7c82cSHal Finkel   // CHECK-LABEL: @int_zext
48*c4d7c82cSHal Finkel   // CHECK: zext <8 x i16> %{{[^ ]}} to <8 x i64>
49*c4d7c82cSHal Finkel }
50*c4d7c82cSHal Finkel 
int_sext(vector8short x)51*c4d7c82cSHal Finkel vector8long int_sext(vector8short x) {
52*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8long);
53*c4d7c82cSHal Finkel   // CHECK-LABEL: @int_sext
54*c4d7c82cSHal Finkel   // CHECK: sext <8 x i16> %{{[^ ]}} to <8 x i64>
55*c4d7c82cSHal Finkel }
56*c4d7c82cSHal Finkel 
int_tofp(vector8short x)57*c4d7c82cSHal Finkel vector8float int_tofp(vector8short x) {
58*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8float);
59*c4d7c82cSHal Finkel   // CHECK-LABEL: @int_tofp
60*c4d7c82cSHal Finkel   // CHECK: sitofp <8 x i16> %{{[^ ]}} to <8 x float>
61*c4d7c82cSHal Finkel }
62*c4d7c82cSHal Finkel 
uint_tofp(vector8ushort x)63*c4d7c82cSHal Finkel vector8float uint_tofp(vector8ushort x) {
64*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8float);
65*c4d7c82cSHal Finkel   // CHECK-LABEL: @uint_tofp
66*c4d7c82cSHal Finkel   // CHECK: uitofp <8 x i16> %{{[^ ]}} to <8 x float>
67*c4d7c82cSHal Finkel }
68*c4d7c82cSHal Finkel 
69*c4d7c82cSHal Finkel #ifdef __cplusplus
70*c4d7c82cSHal Finkel }
71*c4d7c82cSHal Finkel #endif
72*c4d7c82cSHal Finkel 
73*c4d7c82cSHal Finkel 
74*c4d7c82cSHal Finkel #ifdef __cplusplus
75*c4d7c82cSHal Finkel template<typename T>
int_toT(vector8long x)76*c4d7c82cSHal Finkel T int_toT(vector8long x) {
77*c4d7c82cSHal Finkel   return __builtin_convertvector(x, T);
78*c4d7c82cSHal Finkel }
79*c4d7c82cSHal Finkel 
80*c4d7c82cSHal Finkel extern "C" {
int_toT_fp(vector8long x)81*c4d7c82cSHal Finkel   vector8double int_toT_fp(vector8long x) {
82*c4d7c82cSHal Finkel     // CHECK-LABEL: @int_toT_fp
83*c4d7c82cSHal Finkel     // CHECK: sitofp <8 x i64> %{{[^ ]}} to <8 x double>
84*c4d7c82cSHal Finkel     return int_toT<vector8double>(x);
85*c4d7c82cSHal Finkel   }
86*c4d7c82cSHal Finkel }
87*c4d7c82cSHal Finkel #else
int_toT_fp(vector8long x)88*c4d7c82cSHal Finkel vector8double int_toT_fp(vector8long x) {
89*c4d7c82cSHal Finkel   return __builtin_convertvector(x, vector8double);
90*c4d7c82cSHal Finkel }
91*c4d7c82cSHal Finkel #endif
92*c4d7c82cSHal Finkel 
93