This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi all, On 06/07/16 16:29, James Greenhalgh wrote:
On Wed, Jul 06, 2016 at 02:11:51PM +0100, Jiong Wang wrote:The current vmaxnm/vminnm float intrinsics are implemented using __builtin_aarch64_smax/min<mode> which are mapping to backend patterns using smin/smax rtl operators. However as documented in rtl.def "Further, if both operands are zeros, or if either operand is NaN, then it is unspecified which of the two operands is returned as the result." There is no guarantee that a number will always be returned through smin/smax operator, and further tests show gcc will optimize something like smin (1.0f, Nan) to Nan, so current the vmaxnm and vminnm intrinsics will evetually fail the new added testcases included in this patch. This patch: * Migrate vminnm/vmaxnm float intrinsics to "<fmaxmin><mode>3" pattern which guarantee fminnm/fmaxnm sematics. * Add new testcases for vminnm and vmaxnm intrinsics which were missing previously. They are marked as XFAIL on arm*-*-* as ARM hasn't implemented these intrinsics. OK for trunk?The AArch64 parts are OK. I can't remember whether the ARM port prefers to have missing intrinsics XFAIL'd or if there is another way to disable the tests that are not supported there. Kyrill/Christophe would you mind commenting on whether this patch is correct for the intrinsics testsuite? Thanks, James2016-07-06 Jiong Wang <jiong.wang@arm.com> gcc/ * config/aarch64/aarch64-simd-builtins.def (smax): Remove float variants. (smin): Likewise. (fmax): New entry. (fmin): Likewise. * config/aarch64/arm_neon.h (vmaxnm_f32): Use __builtin_aarch64_fmaxv2sf. (vmaxnmq_f32): Likewise. (vmaxnmq_f64): Likewise. (vminnm_f32): Likewise. (vminnmq_f32): Likewise. (vminnmq_f64): Likewise.
These intrinsics are supposed to be available for arm as well *except* for vminnmq_f64, vmaxnmq_f64. For the intrinsics that should be implemented but aren't can you please file a bug report.? I see your patch doesn't xfail the test on arm, just skips it (so it appears unsupported). My preferred course of action is to guard the vminmq_f64, vmaxnmq_f64 parts of the test with #ifdef __aarch64__ and xfail the whole test for arm, with something like this: { dg-xfail-if "Intrinsics not yet implemented on arm <number of bugzilla PR>" { arm*-*-* } } I do believe an XFAIL is appropriate here as the intrinsics should exist on arm, but don't currently due to a missed-implementation bug. Thanks, Kyrill
gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/binary_op_no64.inc: Support HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vrhadd.c: Define HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vhadd.c: Define HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vhsub.c: Define HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vmax.c: Define HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vmin.c: Define HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vhadd.c: Define HAS_INTEGER_VARIANT. * gcc.target/aarch64/advsimd-intrinsics/vmaxnm.c: New. * gcc.target/aarch64/advsimd-intrinsics/vminnm.c: New.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |