summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-11-14 12:10:51 +0000
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-11-14 12:10:51 +0000
commitcee13a2712c3ac3134791f951157011411e798d8 (patch)
treebfdad785097e6db87808784241cb55c1a2a85e2d
parent76746929611423cc2788b6c4e8251a4e94063c08 (diff)
downloadbcm5719-llvm-cee13a2712c3ac3134791f951157011411e798d8.tar.gz
bcm5719-llvm-cee13a2712c3ac3134791f951157011411e798d8.zip
[PowerPC] Add VSX builtins for vec_div
This patch adds builtin support for xvdivdp and xvdivsp, along with a new test case. The builtins are accessed using vec_div in altivec.h. Builtins are listed (mostly) alphabetically there, so inserting these changed the line numbers for deprecation warnings tested in test/Headers/altivec-intrin.c. There is a companion patch for LLVM. llvm-svn: 221984
-rw-r--r--clang/include/clang/Basic/BuiltinsPPC.def3
-rw-r--r--clang/lib/Headers/altivec.h15
-rw-r--r--clang/test/CodeGen/builtins-ppc-vsx.c7
-rw-r--r--clang/test/Headers/altivec-intrin.c4
4 files changed, 27 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/BuiltinsPPC.def b/clang/include/clang/Basic/BuiltinsPPC.def
index 12bf58f74e5..e42af424416 100644
--- a/clang/include/clang/Basic/BuiltinsPPC.def
+++ b/clang/include/clang/Basic/BuiltinsPPC.def
@@ -220,6 +220,9 @@ BUILTIN(__builtin_vsx_xvmindp, "V2dV2dV2d", "")
BUILTIN(__builtin_vsx_xvminsp, "V4fV4fV4f", "")
BUILTIN(__builtin_vsx_xsmindp, "ddd", "")
+BUILTIN(__builtin_vsx_xvdivdp, "V2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvdivsp, "V4fV4fV4f", "")
+
// FIXME: Obviously incomplete.
#undef BUILTIN
diff --git a/clang/lib/Headers/altivec.h b/clang/lib/Headers/altivec.h
index 6e33091db2f..5e27a8327b4 100644
--- a/clang/lib/Headers/altivec.h
+++ b/clang/lib/Headers/altivec.h
@@ -1623,6 +1623,21 @@ vec_vctuxs(vector float __a, int __b)
return __builtin_altivec_vctuxs(__a, __b);
}
+/* vec_div */
+#ifdef __VSX__
+static vector float __ATTRS_o_ai
+vec_div(vector float __a, vector float __b)
+{
+ return __builtin_vsx_xvdivsp(__a, __b);
+}
+
+static vector double __ATTRS_o_ai
+vec_div(vector double __a, vector double __b)
+{
+ return __builtin_vsx_xvdivdp(__a, __b);
+}
+#endif
+
/* vec_dss */
static void __attribute__((__always_inline__))
diff --git a/clang/test/CodeGen/builtins-ppc-vsx.c b/clang/test/CodeGen/builtins-ppc-vsx.c
index 9bd0a5df6f2..a5e3e4f441c 100644
--- a/clang/test/CodeGen/builtins-ppc-vsx.c
+++ b/clang/test/CodeGen/builtins-ppc-vsx.c
@@ -20,6 +20,13 @@ double res_d;
void test1() {
// CHECK-LABEL: define void @test1
+ /* vec_div */
+ res_vf = vec_div(vf, vf);
+// CHECK: @llvm.ppc.vsx.xvdivsp
+
+ res_vd = vec_div(vd, vd);
+// CHECK: @llvm.ppc.vsx.xvdivdp
+
/* vec_max */
res_vf = vec_max(vf, vf);
// CHECK: @llvm.ppc.vsx.xvmaxsp
diff --git a/clang/test/Headers/altivec-intrin.c b/clang/test/Headers/altivec-intrin.c
index 5ec4e9d3e76..a4de7e75966 100644
--- a/clang/test/Headers/altivec-intrin.c
+++ b/clang/test/Headers/altivec-intrin.c
@@ -14,5 +14,5 @@ int main()
}
// FIXME: As noted in ms-intrin.cpp, it would be nice if we didn't have to
// hard-code the line number from altivec.h here.
-// expected-note@altivec.h:2374 {{deprecated here}}
-// expected-note@altivec.h:2509 {{deprecated here}}
+// expected-note@altivec.h:2389 {{deprecated here}}
+// expected-note@altivec.h:2524 {{deprecated here}}
OpenPOWER on IntegriCloud