On 05/08/2025 09:06, Kyrylo Tkachov wrote:
> 
> 
> > On 5 Aug 2025, at 11:00, Alex Coplan <alex.cop...@arm.com> wrote:
> > 
> > Hi Kyrill,
> > 
> > Sorry for the slow reply, I was away on holiday until yesterday.
> > 
> > On 15/07/2025 13:08, Kyrylo Tkachov wrote:
> >> Hi Alex,
> >> 
> >>> On 15 Jul 2025, at 14:59, Alex Coplan <alex.cop...@arm.com> wrote:
> >>> 
> >>> Hi,
> >>> 
> >>> The predication of the SVE2 FP8 dot product insns was relying on the
> >>> architectural dependency:
> >>> 
> >>> FEAT_FP8DOT2 => FEAT_FP8DOT4
> >>> 
> >>> which was relaxed in GCC as of
> >>> r15-7480-g299a8e2dc667e795991bc439d2cad5ea5bd379e2, thus leading to
> >>> unrecognisable insn ICEs when compiling a two-way FDOT with just
> >>> +fp8dot2.  This patch fixes the predication of the insns to test for
> >>> the correct feature bit depending on the value of the mode iterator.
> >>> 
> >>> Bootstrapped/regtested on aarch64-linux-gnu, OK for trunk and backport
> >>> to GCC 15?
> >>> 
> >>> Thanks,
> >>> Alex
> >>> 
> >>> gcc/ChangeLog:
> >>> 
> >>> PR target/120986
> >>> * config/aarch64/aarch64-sve2.md (@aarch64_sve_dot<mode>):
> >>> Adjust insn predicate to use new mode attribute which checks
> >>> for the correct feature bit depending on the mode.
> >>> (@aarch64_sve_dot_lane<mode>): Likewise.
> >>> * config/aarch64/iterators.md (HAVE_FP8_DOT_INSN): New.
> >>> 
> >>> gcc/testsuite/ChangeLog:
> >>> 
> >>> PR target/120986
> >>> * gcc.target/aarch64/torture/pr120986-1.c: New test.
> >>> ---
> >>> gcc/config/aarch64/aarch64-sve2.md                    |  4 ++--
> >>> gcc/config/aarch64/iterators.md                       |  4 ++++
> >>> gcc/testsuite/gcc.target/aarch64/torture/pr120986-1.c | 10 ++++++++++
> >>> 3 files changed, 16 insertions(+), 2 deletions(-)
> >>> create mode 100644 gcc/testsuite/gcc.target/aarch64/torture/pr120986-1.c
> >>> 
> >>> <0001-aarch64-Fix-predication-of-FP8-FDOT-insns-PR120986.patch>
> >> 
> >> +(define_mode_attr HAVE_FP8_DOT_INSN [(VNx4SF "TARGET_SSVE_FP8DOT4")
> >> +      (VNx8HF "TARGET_SSVE_FP8DOT2")])
> >> +
> >> +
> >> 
> >> I think a more natural way would be to have a new mode iterator with the 
> >> same contents as SVE_FULL_HSF, say SVE_FULL_HSF_FP8 but have the TARGET_* 
> >> conditions guarding those modes.
> >> For example:
> >> (define_mode_iterator SVE_FULL_HSF_FP8 [(VNx4SF "TARGET_SSVE_FP8DOT4") 
> >> (VNx8HF “TARGET_SSVE_FP8DOT2")])
> > 
> > Thanks for the suggestion.  I agree this way seems more natural, for some 
> > reason
> > it hadn't occurred to me at the time to restrict the availability of the 
> > modes
> > themselves.
> > 
> > Re: naming, would you be OK with SVE_FULL_HSF_FP8_FDOT for this
> > iterator?  Normally it's a good idea to keep iterator names as general
> > as possible, but the conditions on the modes make this iterator quite
> > specific to the FP8 FDOT instructions.  Just wanted to check before pushing.
> > 
> 
> Yes that’s fine, I don’t feel strongly about it.

Ack, I've now pushed these two after re-testing as:
80b0e4ad2f6 aarch64: Relax fpm_t assert to allow const_ints [PR120986]
75eabf69d80 aarch64: Fix predication of FP8 FDOT insns [PR120986]

Thanks,
Alex

> Thanks,
> Kyrill
> 
> > Thanks,
> > Alex
> > 
> >> 
> >> diff --git a/gcc/testsuite/gcc.target/aarch64/torture/pr120986-1.c 
> >> b/gcc/testsuite/gcc.target/aarch64/torture/pr120986-1.c
> >> new file mode 100644
> >> index 00000000000..8777f1b7711
> >> --- /dev/null
> >> +++ b/gcc/testsuite/gcc.target/aarch64/torture/pr120986-1.c
> >> @@ -0,0 +1,10 @@
> >> +/* { dg-do compile } */
> >> +/* { dg-options "-march=armv8.2-a+sve2+fp8dot2" } */
> >> 
> >> Very minor but this bug is about arch gating rather than something that’s 
> >> hit with optimization, I don’t think there’s value in putting it in the 
> >> torture directory. I’d put it under normal gcc.target/aarch64.
> >> 
> >> Ok with these changes if you agree.
> >> Thanks,
> >> Kyrill
> 
> 

Reply via email to