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