forked from OSchip/llvm-project
[PowerPC] Add more missing overloads to altivec.h
We are missing more predicate forms for 'vector double' and some tests. This adds the missing overloads and completes the set of test cases for them.
This commit is contained in:
parent
f3b07f9c5d
commit
b5fae4b9b2
|
@ -16364,10 +16364,18 @@ static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,
|
|||
|
||||
/* vec_any_nan */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
vec_any_nan(vector float __a) {
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {
|
||||
#ifdef __VSX__
|
||||
return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);
|
||||
#else
|
||||
return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
|
||||
#endif
|
||||
}
|
||||
#ifdef __VSX__
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {
|
||||
return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* vec_any_ne */
|
||||
|
||||
|
@ -16571,39 +16579,92 @@ static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,
|
|||
|
||||
/* vec_any_nge */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
vec_any_nge(vector float __a, vector float __b) {
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,
|
||||
vector float __b) {
|
||||
#ifdef __VSX__
|
||||
return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);
|
||||
#else
|
||||
return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,
|
||||
vector double __b) {
|
||||
return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* vec_any_ngt */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
vec_any_ngt(vector float __a, vector float __b) {
|
||||
static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,
|
||||
vector float __b) {
|
||||
#ifdef __VSX__
|
||||
return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);
|
||||
#else
|
||||
return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,
|
||||
vector double __b) {
|
||||
return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* vec_any_nle */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
vec_any_nle(vector float __a, vector float __b) {
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,
|
||||
vector float __b) {
|
||||
#ifdef __VSX__
|
||||
return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);
|
||||
#else
|
||||
return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,
|
||||
vector double __b) {
|
||||
return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* vec_any_nlt */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
vec_any_nlt(vector float __a, vector float __b) {
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,
|
||||
vector float __b) {
|
||||
#ifdef __VSX__
|
||||
return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);
|
||||
#else
|
||||
return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,
|
||||
vector double __b) {
|
||||
return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* vec_any_numeric */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
vec_any_numeric(vector float __a) {
|
||||
static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {
|
||||
#ifdef __VSX__
|
||||
return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);
|
||||
#else
|
||||
return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {
|
||||
return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* vec_any_out */
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__))
|
||||
|
|
|
@ -93,6 +93,74 @@ void test1() {
|
|||
// CHECK: fadd <2 x double>
|
||||
// CHECK-LE: fadd <2 x double>
|
||||
|
||||
res_i = vec_any_ne(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
|
||||
res_i = vec_any_ne(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
|
||||
res_i = vec_any_nle(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
|
||||
res_i = vec_any_nle(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgedp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p
|
||||
|
||||
res_i = vec_any_nlt(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgtsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtsp.p
|
||||
|
||||
res_i = vec_any_nlt(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
|
||||
res_i = vec_any_nge(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
|
||||
res_i = vec_any_nge(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgedp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p
|
||||
|
||||
res_i = vec_any_ngt(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgtsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtsp.p
|
||||
|
||||
res_i = vec_any_ngt(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
|
||||
res_i = vec_any_nan(vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
|
||||
res_i = vec_any_nan(vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
|
||||
res_i = vec_any_numeric(vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
|
||||
res_i = vec_any_numeric(vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
|
||||
dummy();
|
||||
// CHECK: call void @dummy()
|
||||
// CHECK-LE: call void @dummy()
|
||||
|
||||
res_i = vec_all_ne(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
|
||||
res_i = vec_all_ne(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
|
||||
res_i = vec_all_nle(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
|
@ -109,6 +177,30 @@ void test1() {
|
|||
// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
|
||||
res_i = vec_all_nge(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p
|
||||
|
||||
res_i = vec_all_nge(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgedp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p
|
||||
|
||||
res_i = vec_all_ngt(vf, vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgtsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtsp.p
|
||||
|
||||
res_i = vec_all_ngt(vd, vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p
|
||||
|
||||
res_i = vec_all_nan(vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
|
||||
res_i = vec_all_nan(vd);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p
|
||||
|
||||
res_i = vec_all_numeric(vf);
|
||||
// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p
|
||||
|
|
Loading…
Reference in New Issue