Hi Andre,

On 7/31/24 11:29, Andre Vieira (lists) wrote:
Hi Christophe,

Thanks for the comments, attached new version for testcase, see below new cover letter:

Thanks for the improved cover letter, it is indeed clearer.


This patch refactors and fixes an issue where arm_mve_dlstp_check_dec_counter
was making an assumption about the form of what a candidate for a dec_insn.
This dec_insn is the instruction that decreases the loop counter inside a
decrementing loop and we expect it to have the following form:
(set (reg CONDCOUNT)
      (plus (reg CONDCOUNT)
            (const_int)))

Where CONDCOUNT is the loop counter, and const int is the negative constant
used to decrement it.

This patch also improves our search for a valid dec_insn.  Before this patch
we'd only look for a dec_insn inside the loop header if the loop latch was
empty.  We now also search the loop header if the loop latch is not empty but the last instruction is not a valid dec_insn.  This could potentially be improved
to search all instructions inside the loop latch.

gcc/ChangeLog:

     * config/arm/arm.cc (check_dec_insn): New helper function containing
     code hoisted from...
     (arm_mve_dlstp_check_dec_counter): ... here. Use check_dec_insn to
     check the validity of the candidate dec_insn.

gcc/testsuite/ChangeLog:

     * gcc.targer/arm/mve/dlstp-loop-form.c: New test.


On 30/07/2024 21:31, Christophe Lyon wrote:
I manually tried to exercise the testcase with a cross-compiler, and found the same issue as the Linaro CI should have reported (there was a temporary breakage).

You can find detailed logs from Linaro in gcc.log.1.xz under https://ci.linaro.org/job/tcwg_gcc_check--master-arm-precommit/8357/artifact/artifacts/artifacts.precommit/00-sumfiles/

Basically the testcase fails to compile with loads of
dlstp-loop-form.c:6:9: warning: 'pure' attribute on function returning 'void' [-Wattributes]
then

dlstp-loop-form.c:7:37: error: unknown type name 'float16x8_t'; did you mean 'int16x8_t'?
dlstp-loop-form.c: In function 'n':
dlstp-loop-form.c:18:8: error: subscripted value is neither array nor pointer nor vector dlstp-loop-form.c:21:13: error: passing 'e' {aka 'int'} to argument 2 of 'vfmsq_m', which expects an MVE vector type

Why would the test pass for you?

Because I tested with a toolchain configured for cortex-m85, which has mve.fp enabled by default, which means I didn't realize the testcase required arm_v8_1m_mve_fp_ok instead of arm_v8_1m_mve_ok.

Addressed that now.

Thanks, I thought you meant you ran the testsuite with -mcpu=cortex-m85 in RUNTESTFLAGS.

Regarding the patch, did you consider making the new check_dec_insn helper return an rtx (NULL or dec_set) instead of bool? I think it would save a call to single_set when computing decrementnum, but that's nitpicking.

Thanks,

Christophe

Reply via email to