Re: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite

2023-05-02 Thread Andrea Corallo via Gcc-patches
Christophe Lyon  writes:

> Hi Andrea,
>
> Minor comments below:
>
> On 4/28/23 13:29, Andrea Corallo via Gcc-patches wrote:
>> Hi all,
>> this patch fixes the vstrwq* MVE instrinsics failing to emit the
>> correct sequence of instruction due to a missing predicates. Also the
> nit: you have a typo, should be "predicate"

Ack thanks.

>> immediate range is fixed to be multiples of 2 up between [-252, 252].
>
> Out of curiosity, which tests were affected by this error in the
> immediate range?

None I'd say, so far we have no extensive tests checking for immediate
range in the testsuite.

BR

  Andrea


Re: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite

2023-05-02 Thread Andrea Corallo via Gcc-patches
Christophe Lyon  writes:

> Hi Andrea,
>
> Minor comments below:
>
> On 4/28/23 13:29, Andrea Corallo via Gcc-patches wrote:
>> Hi all,
>> this patch fixes the vstrwq* MVE instrinsics failing to emit the
>> correct sequence of instruction due to a missing predicates. Also the
> nit: you have a typo, should be "predicate"
>
>> immediate range is fixed to be multiples of 2 up between [-252, 252].
>
> Out of curiosity, which tests were affected by this error in the
> immediate range?

Hi Christophe,

no special reason, just because the test is autogenerated and we use
this same pattern for all the intrinsics (the vast majority of which do
return a non void type).  The test indeed compiles fine so no problem
there.

BR

  Andrea


Re: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite

2023-05-02 Thread Christophe Lyon via Gcc-patches

Hi Andrea,

Minor comments below:

On 4/28/23 13:29, Andrea Corallo via Gcc-patches wrote:

Hi all,

this patch fixes the vstrwq* MVE instrinsics failing to emit the
correct sequence of instruction due to a missing predicates. Also the

nit: you have a typo, should be "predicate"


immediate range is fixed to be multiples of 2 up between [-252, 252].


Out of curiosity, which tests were affected by this error in the 
immediate range?


Thanks,

Christophe



Best Regards

   Andrea

gcc/ChangeLog:

* config/arm/constraints.md (mve_vldrd_immediate): Move it to
predicates.md.
(Ri): Move constraint definition from predicates.md.
(Rl): Define new constraint.
* config/arm/mve.md (mve_vstrwq_scatter_base_wb_p_v4si): Add
missing constraint.
(mve_vstrwq_scatter_base_wb_p_fv4sf): Add missing Up constraint
for op 1, use mve_vstrw_immediate predicate and Rl constraint for
op 2. Fix asm output spacing.
(mve_vstrdq_scatter_base_wb_p_v2di): Add missing constraint.
* config/arm/predicates.md (Ri) Move constraint to constraints.md
(mve_vldrd_immediate): Move it from
constraints.md.
(mve_vstrw_immediate): New predicate.

gcc/testsuite/ChangeLog:

* gcc.target/arm/mve/intrinsics/vstrwq_f32.c: Use
check-function-bodies instead of scan-assembler checks.  Use
extern "C" for C++ testing.
* gcc.target/arm/mve/intrinsics/vstrwq_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_f32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_p_f32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_p_s32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_p_u32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_s32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_u32.c: 
Likewise.
* gcc.target/arm/mve/intrinsics/vstrwq_u32.c: Likewise.
---
  gcc/config/arm/constraints.md | 20 --
  gcc/config/arm/mve.md | 10 ++---
  gcc/config/arm/predicates.md  | 14 +++
  .../arm/mve/intrinsics/vstrwq_f32.c   | 32 ---
  .../arm/mve/intrinsics/vstrwq_p_f32.c | 40 ---
  .../arm/mve/intrinsics/vstrwq_p_s32.c | 40 ---
  .../arm/mve/intrinsics/vstrwq_p_u32.c | 40 ---
  .../arm/mve/intrinsics/vstrwq_s32.c   | 32 ---
  .../mve/intrinsics/vstrwq_scatter_base_f32.c  | 28 +++--
  .../intrinsics/vstrwq_scatter_base_p_f32.c| 36 +++--
  .../intrinsics/vstrwq_scatter_base_p_s32.c| 36 +++--
  .../intrinsics/vstrwq_scatter_base_p_u32.c| 36 +++--
  .../mve/intrinsics/vstrwq_scatter_base_s32.c  | 28 +++--
  .../mve/intrinsics/vstrwq_scatter_base_u32.c  | 28 +++--
  .../intrinsics/vstrwq_scatter_base_wb_f32.c   | 32 ---
  .../intrinsics/vstrwq_scatter_base_wb_p_f32.c | 40 ---
  .../intrinsics/vstrwq_scatter_base_wb_p_s32.c | 40 ---
  .../intrinsics/vstrwq_scatter_base_wb_p_u32.c | 40 ---
  

RE: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite

2023-04-28 Thread Kyrylo Tkachov via Gcc-patches



> -Original Message-
> From: Andrea Corallo 
> Sent: Friday, April 28, 2023 12:30 PM
> To: gcc-patches@gcc.gnu.org
> Cc: Kyrylo Tkachov ; Richard Earnshaw
> ; Andrea Corallo 
> Subject: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite
> 
> Hi all,
> 
> this patch fixes the vstrwq* MVE instrinsics failing to emit the
> correct sequence of instruction due to a missing predicates. Also the
> immediate range is fixed to be multiples of 2 up between [-252, 252].
> 

Ok.
Thanks,
Kyrill

> Best Regards
> 
>   Andrea
> 
> gcc/ChangeLog:
> 
>   * config/arm/constraints.md (mve_vldrd_immediate): Move it to
>   predicates.md.
>   (Ri): Move constraint definition from predicates.md.
>   (Rl): Define new constraint.
>   * config/arm/mve.md (mve_vstrwq_scatter_base_wb_p_v4si):
> Add
>   missing constraint.
>   (mve_vstrwq_scatter_base_wb_p_fv4sf): Add missing Up constraint
>   for op 1, use mve_vstrw_immediate predicate and Rl constraint for
>   op 2. Fix asm output spacing.
>   (mve_vstrdq_scatter_base_wb_p_v2di): Add missing
> constraint.
>   * config/arm/predicates.md (Ri) Move constraint to constraints.md
>   (mve_vldrd_immediate): Move it from
>   constraints.md.
>   (mve_vstrw_immediate): New predicate.
> 
> gcc/testsuite/ChangeLog:
> 
>   * gcc.target/arm/mve/intrinsics/vstrwq_f32.c: Use
>   check-function-bodies instead of scan-assembler checks.  Use
>   extern "C" for C++ testing.
>   * gcc.target/arm/mve/intrinsics/vstrwq_p_f32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_p_s32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_p_u32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_s32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_f32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_p_f32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_p_s32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_p_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_s32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_u32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_f32.c: Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_p_f32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_p_s32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_p_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_s32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_offset_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_f32.c:
> Likewise.
>   *
> gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_p_f32.c:
> Likewise.
>   *
> gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_p_s32.c:
> Likewise.
>   *
> gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_p_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_s32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_scatter_shifted_offset_u32.c:
> Likewise.
>   * gcc.target/arm/mve/intrinsics/vstrwq_u32.c: Likewise.
> ---
>  gcc/config/arm/constraints.md | 20 --
>  gcc/config/arm/mve.md | 10 ++---
>  gcc/config/arm/predicates.md  | 14 +++
>  .../arm/mve/intrinsics/vstrwq_f32.c   | 32 ---
>  .../arm/mve/intrinsics/vstrwq_p_f32.c | 40 ---
>  .../arm/mve/intrinsics/vstrwq_p_s32.c | 40 ---
>  .../arm/mve/intrinsics/vstrwq_p_u32.c | 40 ---
>  .../arm/mve/intrinsics/vstrwq_s32.c   | 32 ---
>  .../mve/intrinsics/vstrwq_scatter_base_f32.c  | 28 +++--
>  .../intrinsics/vstrwq_scatter_base_p_f32.c| 36 +++--
>  .../intrinsics/vstrwq_scatter_base_p_s32.c| 36 +++--
>  .../intrinsics/vstrwq_scatter_base_p_u32.c| 36 +++--
>  .../mve/intrinsics/vstrwq_scatter_base_s32.c  | 28 +++--
>  .../mve/intrinsics/vstrwq_scatter_base_u32.c  | 28 +++--
>  .../intrinsics/vstrwq_scatter_base_wb_f32.c   | 32 ---
>  .../intrinsics/vstrwq_scatter_base_wb_p_f32.c | 40 ---
>  .../intrinsics/vstrwq_scatter_base_wb_p_s32.c | 40