[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
This commit is contained in:
parent
7674692961
commit
cee13a2712
|
@ -220,6 +220,9 @@ BUILTIN(__builtin_vsx_xvmindp, "V2dV2dV2d", "")
|
||||||
BUILTIN(__builtin_vsx_xvminsp, "V4fV4fV4f", "")
|
BUILTIN(__builtin_vsx_xvminsp, "V4fV4fV4f", "")
|
||||||
BUILTIN(__builtin_vsx_xsmindp, "ddd", "")
|
BUILTIN(__builtin_vsx_xsmindp, "ddd", "")
|
||||||
|
|
||||||
|
BUILTIN(__builtin_vsx_xvdivdp, "V2dV2dV2d", "")
|
||||||
|
BUILTIN(__builtin_vsx_xvdivsp, "V4fV4fV4f", "")
|
||||||
|
|
||||||
// FIXME: Obviously incomplete.
|
// FIXME: Obviously incomplete.
|
||||||
|
|
||||||
#undef BUILTIN
|
#undef BUILTIN
|
||||||
|
|
|
@ -1623,6 +1623,21 @@ vec_vctuxs(vector float __a, int __b)
|
||||||
return __builtin_altivec_vctuxs(__a, __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 */
|
/* vec_dss */
|
||||||
|
|
||||||
static void __attribute__((__always_inline__))
|
static void __attribute__((__always_inline__))
|
||||||
|
|
|
@ -20,6 +20,13 @@ double res_d;
|
||||||
void test1() {
|
void test1() {
|
||||||
// CHECK-LABEL: define 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 */
|
/* vec_max */
|
||||||
res_vf = vec_max(vf, vf);
|
res_vf = vec_max(vf, vf);
|
||||||
// CHECK: @llvm.ppc.vsx.xvmaxsp
|
// CHECK: @llvm.ppc.vsx.xvmaxsp
|
||||||
|
|
|
@ -14,5 +14,5 @@ int main()
|
||||||
}
|
}
|
||||||
// FIXME: As noted in ms-intrin.cpp, it would be nice if we didn't have to
|
// 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.
|
// hard-code the line number from altivec.h here.
|
||||||
// expected-note@altivec.h:2374 {{deprecated here}}
|
// expected-note@altivec.h:2389 {{deprecated here}}
|
||||||
// expected-note@altivec.h:2509 {{deprecated here}}
|
// expected-note@altivec.h:2524 {{deprecated here}}
|
||||||
|
|
Loading…
Reference in New Issue