> 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. 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