summaryrefslogtreecommitdiffstats
path: root/test/CodeGen/convertvector.c
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2013-12-22 00:07:40 +0000
committerdim <dim@FreeBSD.org>2013-12-22 00:07:40 +0000
commit952eddef9aff85b1e92626e89baaf7a360e2ac85 (patch)
treedf8df0b0067b381eab470a3b8f28d14a552a6340 /test/CodeGen/convertvector.c
parentea266cad53e3d49771fa38103913d3ec7a166694 (diff)
downloadFreeBSD-src-952eddef9aff85b1e92626e89baaf7a360e2ac85.zip
FreeBSD-src-952eddef9aff85b1e92626e89baaf7a360e2ac85.tar.gz
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
https://llvm.org/svn/llvm-project/cfe/branches/release_34@197841
Diffstat (limited to 'test/CodeGen/convertvector.c')
-rw-r--r--test/CodeGen/convertvector.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/test/CodeGen/convertvector.c b/test/CodeGen/convertvector.c
new file mode 100644
index 0000000..2b23dd9
--- /dev/null
+++ b/test/CodeGen/convertvector.c
@@ -0,0 +1,114 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm -x c++ %s -o - | FileCheck %s
+
+typedef double vector8double __attribute__((__vector_size__(64)));
+typedef float vector8float __attribute__((__vector_size__(32)));
+typedef long vector8long __attribute__((__vector_size__(64)));
+typedef short vector8short __attribute__((__vector_size__(16)));
+typedef unsigned long vector8ulong __attribute__((__vector_size__(64)));
+typedef unsigned short vector8ushort __attribute__((__vector_size__(16)));
+
+#ifdef __cplusplus
+#define BOOL bool
+#else
+#define BOOL _Bool
+#endif
+
+typedef BOOL vector8bool __attribute__((__ext_vector_type__(8)));
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+vector8float flt_trunc(vector8double x) {
+ return __builtin_convertvector(x, vector8float);
+ // CHECK-LABEL: @flt_trunc
+ // CHECK: fptrunc <8 x double> %{{[^ ]}} to <8 x float>
+}
+
+vector8double flt_ext(vector8float x) {
+ return __builtin_convertvector(x, vector8double);
+ // CHECK-LABEL: @flt_ext
+ // CHECK: fpext <8 x float> %{{[^ ]}} to <8 x double>
+}
+
+vector8bool flt_tobool(vector8float x) {
+ return __builtin_convertvector(x, vector8bool);
+ // CHECK-LABEL: @flt_tobool
+ // CHECK-NOT: fptoui <8 x float> %{{[^ ]}} to <8 x i1>
+ // CHECK: fcmp une <8 x float> %{{[^ ]}}, zeroinitializer
+}
+
+vector8long flt_tosi(vector8float x) {
+ return __builtin_convertvector(x, vector8long);
+ // CHECK-LABEL: @flt_tosi
+ // CHECK: fptosi <8 x float> %{{[^ ]}} to <8 x i64>
+}
+
+vector8ulong flt_toui(vector8float x) {
+ return __builtin_convertvector(x, vector8ulong);
+ // CHECK-LABEL: @flt_toui
+ // CHECK: fptoui <8 x float> %{{[^ ]}} to <8 x i64>
+}
+
+vector8ulong fltd_toui(vector8double x) {
+ return __builtin_convertvector(x, vector8ulong);
+ // CHECK-LABEL: @fltd_toui
+ // CHECK: fptoui <8 x double> %{{[^ ]}} to <8 x i64>
+}
+
+vector8ulong int_zext(vector8ushort x) {
+ return __builtin_convertvector(x, vector8ulong);
+ // CHECK-LABEL: @int_zext
+ // CHECK: zext <8 x i16> %{{[^ ]}} to <8 x i64>
+}
+
+vector8long int_sext(vector8short x) {
+ return __builtin_convertvector(x, vector8long);
+ // CHECK-LABEL: @int_sext
+ // CHECK: sext <8 x i16> %{{[^ ]}} to <8 x i64>
+}
+
+vector8bool int_tobool(vector8short x) {
+ return __builtin_convertvector(x, vector8bool);
+ // CHECK-LABEL: @int_tobool
+ // CHECK-NOT: trunc <8 x i16> %{{[^ ]}} to <8 x i1>
+ // CHECK: icmp ne <8 x i16> %{{[^ ]}}, zeroinitializer
+}
+
+vector8float int_tofp(vector8short x) {
+ return __builtin_convertvector(x, vector8float);
+ // CHECK-LABEL: @int_tofp
+ // CHECK: sitofp <8 x i16> %{{[^ ]}} to <8 x float>
+}
+
+vector8float uint_tofp(vector8ushort x) {
+ return __builtin_convertvector(x, vector8float);
+ // CHECK-LABEL: @uint_tofp
+ // CHECK: uitofp <8 x i16> %{{[^ ]}} to <8 x float>
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#ifdef __cplusplus
+template<typename T>
+T int_toT(vector8long x) {
+ return __builtin_convertvector(x, T);
+}
+
+extern "C" {
+ vector8double int_toT_fp(vector8long x) {
+ // CHECK-LABEL: @int_toT_fp
+ // CHECK: sitofp <8 x i64> %{{[^ ]}} to <8 x double>
+ return int_toT<vector8double>(x);
+ }
+}
+#else
+vector8double int_toT_fp(vector8long x) {
+ return __builtin_convertvector(x, vector8double);
+}
+#endif
+
OpenPOWER on IntegriCloud