On Fri, Oct 30, 2015 at 09:32:07AM +0000, Bilyan Borisov wrote:
> Implementing vmulx_* and vmulx_lane* NEON intrinsics
> 
> Hi all,
> 
> This series of patches focuses on the different vmulx_ and vmulx_lane NEON
> intrinsics variants. All of the existing inlined assembly block 
> implementations
> are replaced with newly defined __builtin functions, and the missing 
> intrinsics
> are implemented with __builtins as well.
> 
> The rationale for the change from assembly to __builtin is that the compiler
> would be able to do more optimisations like instruction scheduling. A new 
> named
> md pattern was added for the new fmulx __builtin.
> 
> Most vmulx_lane variants have been implemented as a combination of a vdup
> followed by a vmulx_, rather than as separate __builtins.  The remaining
> vmulx_lane intrinsics (vmulx(s|d)_lane*) were implemented using
> __aarch64_vget_lane_any () and an appropriate vmulx. Four new nameless md
> patterns were added to replace all the different types of RTL generated from 
> the
> combination of these intrinsics during the combine pass.
> 
> The rationale for this change is that in this way we would be able to optimise
> away all uses of a dup followed by a fmulx to the appropriate fmulx lane 
> variant
> instruction.
> 
> New test cases were added for all the implemented intrinsics. Also new tests
> were added for the proper error reporting of out-of-bounds accesses to _lane
> intrinsics.
> 
> Tested on targets aarch64-none-elf and aarch64_be-none-elf.
> 

> diff --git 
> a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulx_lane_f32_indices_1.c
>  
> b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulx_lane_f32_indices_1.c
> new file mode 100644
> index 
> 0000000000000000000000000000000000000000..5681d5d21bc62e54e308c0a7c171f6f1b8969b71
> --- /dev/null
> +++ 
> b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmulx_lane_f32_indices_1.c
> @@ -0,0 +1,16 @@
> +#include <arm_neon.h>
> +
> +/* { dg-do compile } */
> +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
> +/* { dg-skip-if "" { arm*-*-* } } */
> +
> +float32x2_t
> +f_vmulx_lane_f32 (float32x2_t v1, float32x2_t v2)
> +{
> +  float32x2_t res;
> +  /* { dg-error "lane -1 out of range 0 - 1" "" { xfail arm*-*-* } 0 } */
> +  res = vmulx_lane_f32 (v1, v2, -1);
> +  /* { dg-error "lane 2 out of range 0 - 1" "" { xfail arm*-*-* } 0 } */

Given the dg-skip-if directive, do we really need the cfail directive for
arm*-*-*, surely the whole test is skipped regardless?

Could you respin this patch without the xfails?

Thanks,
James

Reply via email to