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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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> |
76 | T int_toT(vector8long x) { |
77 | return __builtin_convertvector(x, T); |
78 | } |
79 | |
80 | extern "C" { |
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 |
88 | vector8double int_toT_fp(vector8long x) { |
89 | return __builtin_convertvector(x, vector8double); |
90 | } |
91 | #endif |
92 | |
93 | |