[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2023-01-16 Thread stammark at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

Stam Markianos-Wright  changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|ASSIGNED|RESOLVED

--- Comment #9 from Stam Markianos-Wright  ---
This should now be resolved on all active branches (11, 12, 13)

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2023-01-10 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

--- Comment #8 from CVS Commits  ---
The releases/gcc-12 branch has been updated by Stam Markianos-Wright
:

https://gcc.gnu.org/g:25edc76f2afba0b4eaf22174d42de042a6969dbe

commit r12-9038-g25edc76f2afba0b4eaf22174d42de042a6969dbe
Author: Stam Markianos-Wright 
Date:   Fri Dec 30 11:25:22 2022 +

Fix memory constraint on MVE v[ld/st][2/4] instructions [PR107714]

In the M-Class Arm-ARM:

https://developer.arm.com/documentation/ddi0553/bu/?lang=en

these MVE instructions only have '!' writeback variant and at:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

we found that the Um constraint would also allow through a
register offset writeback, resulting in an assembler error.

Here I have added a new constraint and predicate for these
instructions, which (uniquely, AFAICT), only support a `!` writeback
increment by the data size (inside the compiler this is a POST_INC).

No regressions in arm-none-eabi with MVE and MVE.FP.

gcc/ChangeLog:
PR target/107714
* config/arm/arm-protos.h (mve_struct_mem_operand): New protoype.
* config/arm/arm.cc (mve_struct_mem_operand): New function.
* config/arm/constraints.md (Ug): New constraint.
* config/arm/mve.md (mve_vst4q): Change constraint.
(mve_vst2q): Likewise.
(mve_vld4q): Likewise.
(mve_vld2q): Likewise.
* config/arm/predicates.md (mve_struct_operand): New predicate.

gcc/testsuite/ChangeLog:
PR target/107714
* gcc.target/arm/mve/intrinsics/vldst24q_reg_offset.c: New test.

(cherry picked from commit 4269a6567eb991e6838f40bda5be9e3a7972530c)

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2023-01-10 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

--- Comment #7 from CVS Commits  ---
The releases/gcc-11 branch has been updated by Stam Markianos-Wright
:

https://gcc.gnu.org/g:08842ad274f5e2630994f7c6e70b2d31768107ea

commit r11-10461-g08842ad274f5e2630994f7c6e70b2d31768107ea
Author: Stam Markianos-Wright 
Date:   Fri Dec 30 11:25:22 2022 +

Fix memory constraint on MVE v[ld/st][2/4] instructions [PR107714]

In the M-Class Arm-ARM:

https://developer.arm.com/documentation/ddi0553/bu/?lang=en

these MVE instructions only have '!' writeback variant and at:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

we found that the Um constraint would also allow through a
register offset writeback, resulting in an assembler error.

Here I have added a new constraint and predicate for these
instructions, which (uniquely, AFAICT), only support a `!` writeback
increment by the data size (inside the compiler this is a POST_INC).

No regressions in arm-none-eabi with MVE and MVE.FP.

gcc/ChangeLog:
PR target/107714
* config/arm/arm-protos.h (mve_struct_mem_operand): New protoype.
* config/arm/arm.c (mve_struct_mem_operand): New function.
* config/arm/constraints.md (Ug): New constraint.
* config/arm/mve.md (mve_vst4q): Change constraint.
(mve_vst2q): Likewise.
(mve_vld4q): Likewise.
(mve_vld2q): Likewise.
* config/arm/predicates.md (mve_struct_operand): New predicate.

gcc/testsuite/ChangeLog:
PR target/107714
* gcc.target/arm/mve/intrinsics/vldst24q_reg_offset.c: New test.

(cherry picked from commit 4269a6567eb991e6838f40bda5be9e3a7972530c)

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-12-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

--- Comment #6 from CVS Commits  ---
The master branch has been updated by Stam Markianos-Wright
:

https://gcc.gnu.org/g:4269a6567eb991e6838f40bda5be9e3a7972530c

commit r13-4935-g4269a6567eb991e6838f40bda5be9e3a7972530c
Author: Stam Markianos-Wright 
Date:   Fri Dec 30 11:25:22 2022 +

Fix memory constraint on MVE v[ld/st][2/4] instructions [PR107714]

In the M-Class Arm-ARM:

https://developer.arm.com/documentation/ddi0553/bu/?lang=en

these MVE instructions only have '!' writeback variant and at:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

we found that the Um constraint would also allow through a
register offset writeback, resulting in an assembler error.

Here I have added a new constraint and predicate for these
instructions, which (uniquely, AFAICT), only support a `!` writeback
increment by the data size (inside the compiler this is a POST_INC).

No regressions in arm-none-eabi with MVE and MVE.FP.

gcc/ChangeLog:
PR target/107714
* config/arm/arm-protos.h (mve_struct_mem_operand): New protoype.
* config/arm/arm.cc (mve_struct_mem_operand): New function.
* config/arm/constraints.md (Ug): New constraint.
* config/arm/mve.md (mve_vst4q): Change constraint.
(mve_vst2q): Likewise.
(mve_vld4q): Likewise.
(mve_vld2q): Likewise.
* config/arm/predicates.md (mve_struct_operand): New predicate.

gcc/testsuite/ChangeLog:
PR target/107714
* gcc.target/arm/mve/intrinsics/vldst24q_reg_offset.c: New test.

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-12-09 Thread stammark at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

Stam Markianos-Wright  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
Version|12.2.0  |13.0
  Known to fail||11.3.1, 12.2.1
 Ever confirmed|0   |1
   Last reconfirmed|2022-11-17 00:00:00 |2022-12-09

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-11-21 Thread kevin.bracey at alifsemi dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

--- Comment #5 from Kevin Bracey  ---
I had a look at the GCC source. The vld2/vst2/vld4/vst4 instructions in mve.md
have reused the "Um" constraint used for vld/vst in Neon, which permits
both "!" and register offset.

This needs to be tightened up - can't see an existing equivalent constraint.
Perhaps "Um" can be given variant MVE/Neon behaviour, like "Uj".

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-11-21 Thread kevin.bracey at alifsemi dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

--- Comment #4 from Kevin Bracey  ---
The assembler's rejection of the vld2 is valid - the only permitted
post-indexed form is to use "!" for increment by 32 (the amount read).

Experimenting by changing "inStep" you can see the compiler backend knows that
32 is the only valid constant offset - it generates the "!" form for that
correctly - but it apparently hasn't been told not to use register offsets.

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-11-17 Thread stammark at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

Stam Markianos-Wright  changed:

   What|Removed |Added

   Last reconfirmed||2022-11-17

--- Comment #3 from Stam Markianos-Wright  ---
Thanks for finding this! Confirmed the `vld2` bug on latest trunk -- my guess
would be either a GCC backend or a gas bug (I'm not familiar with these
instructions).

For the `vmulq` issue I'll reply under the other thread, but I believe that
very soon we'll be able to put that down as "already fixed", so we can keep
this thread for `vld2` only.

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-11-16 Thread kevin.bracey at alifsemi dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

Kevin Bracey  changed:

   What|Removed |Added

 CC||stammark at gcc dot gnu.org

--- Comment #2 from Kevin Bracey  ---
Ah, the vmulq is falling foul of some sort of generic selection problem.
Substituting with vmulq_n_u8() gets me the actual 6.

Something in the same area as my bug 107515, perhaps - I've been making liberal
use of the generic functions.

[Bug target/107714] MVE: Invalid addressing mode generated for VLD2

2022-11-16 Thread kevin.bracey at alifsemi dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

--- Comment #1 from Kevin Bracey  ---
Looking at that assembly output from Compiler Explorer, I'm also at a loss as
to what happened to the "6" for the VMUL. Maybe something else to look at?