From: Bill Schmidt Date: Fri, 14 Nov 2014 12:10:51 +0000 (+0000) Subject: [PowerPC] Add VSX builtins for vec_div X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d298a5721c7161553d7a6c14650cc466376aa5be;p=clang [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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221984 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/BuiltinsPPC.def b/include/clang/Basic/BuiltinsPPC.def index 12bf58f74e..e42af42441 100644 --- a/include/clang/Basic/BuiltinsPPC.def +++ b/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/lib/Headers/altivec.h b/lib/Headers/altivec.h index 6e33091db2..5e27a8327b 100644 --- a/lib/Headers/altivec.h +++ b/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/test/CodeGen/builtins-ppc-vsx.c b/test/CodeGen/builtins-ppc-vsx.c index 9bd0a5df6f..a5e3e4f441 100644 --- a/test/CodeGen/builtins-ppc-vsx.c +++ b/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/test/Headers/altivec-intrin.c b/test/Headers/altivec-intrin.c index 5ec4e9d3e7..a4de7e7596 100644 --- a/test/Headers/altivec-intrin.c +++ b/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}}