From cee13a2712c3ac3134791f951157011411e798d8 Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Fri, 14 Nov 2014 12:10:51 +0000 Subject: [PATCH] [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 --- clang/include/clang/Basic/BuiltinsPPC.def | 3 +++ clang/lib/Headers/altivec.h | 15 +++++++++++++++ clang/test/CodeGen/builtins-ppc-vsx.c | 7 +++++++ clang/test/Headers/altivec-intrin.c | 4 ++-- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/BuiltinsPPC.def b/clang/include/clang/Basic/BuiltinsPPC.def index 12bf58f..e42af42 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 6e33091..5e27a83 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 9bd0a5d..a5e3e4f 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 5ec4e9d..a4de7e75 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}} -- 2.7.4