Re: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite
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
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
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 --- .../intrinsics/vstrwq_scatter
RE: [PATCH 02/10] arm: Fix vstrwq* backend + testsuite
> -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 +++-- &g
[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]. 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 --- .../intrinsics/vstrwq_scatter_base_wb_s32.c | 32 --- .../intrinsics/vstrwq_scatter_base_wb_u32.c | 32 --- .../intrinsics/vstrwq_scatter_offset_f32.c| 32 --- .../intrinsics/vstrwq_scatter_offset_p_f32.c | 40 --- .../intrinsics/vstrwq_