> -----Original Message----- > From: [email protected] <[email protected]> > Sent: 29 July 2026 08:06 > To: [email protected] > Cc: Tamar Christina <[email protected]>; Kyrylo Tkachov > <[email protected]> > Subject: [PATCH] testsuite/aarch64: update the fcmla counts in > pr122408_1.f90 > > From: Kyrylo Tkachov <[email protected]> > > The test hard-codes two "fcmla ..., #0", which was the number trunk > happened to emit when it was added. BB SLP now also vectorises the two > plain-multiply subroutines: r17-141-g76b8869f08a6 ("tree-optimization/ > 124222 - rewrite BB SLP costing scalar coverage") taught > vect_bb_slp_scalar_cost to attribute the statements an SLP pattern node > covers, so the subgraph for c_add_ab and c_sub_ab is no longer costed as > unprofitable. They form .COMPLEX_MUL, and cmul<mode>3 expands each to > "fcmla #0" plus "fcmla #90", taking the #0 total from two to four. > > For c_add_ab the loop body goes from a scalar pair of complex multiplies > > ldr d26, [x5, x0] > ldr d27, [x3, x0] > ldr d29, [x2, x0] > fmul d24, d30, d26 > ldr d28, [x1, x0] > fnmsub d24, d31, d27, d24 > fmul d25, d30, d27 > fmadd d25, d31, d26, d25 > fadd d24, d29, d24 > fadd d25, d25, d28 > str d24, [x2, x0] > str d25, [x1, x0] > add x0, x0, 16 > cmp x4, x0 > bne .L3 > > to the vectorised form > > ldr q29, [x2, x0] > movi v27.4s, 0 > ldr q28, [x3, x0] > fcmla v27.2d, v28.2d, v31.2d, #0 > fcmla v27.2d, v28.2d, v31.2d, #90 > fadd v27.2d, v27.2d, v29.2d > str q27, [x2, x0] > add x0, x0, 16 > cmp x0, x1 > bne .L3 > > i.e. ten instructions instead of fifteen, and the whole rotation mix > across the file changes from > > #0=2 #90=0 #180=0 #270=2 > > to > > #0=4 #90=2 #180=0 #270=2 > > The loop vectoriser is unchanged: its dumps are identical before and > after, the two conjugate subroutines still form .COMPLEX_MUL_CONJ, and > the #270 directive that actually tests PR122408 still passes. The > runtime companion pr122408_2.f90 also still runs clean. > > Update the counts, and add a #90 count and a #180 scan-assembler-not. > PR122408 was about picking the wrong rotation pair after operand > swapping, so pinning the full rotation mix guards the regression more > directly than the #0 count did. > > Ok for trunk?
OK. Thanks, Tamar > Thanks, > Kyrill > > gcc/testsuite/ChangeLog: > > * gfortran.target/aarch64/pr122408_1.f90: Update the fcmla > rotation counts. > > Signed-off-by: Kyrylo Tkachov <[email protected]> > --- > gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 > b/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 > index 8a3416231ff..c1996b74869 100644 > --- a/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 > +++ b/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 > @@ -57,5 +57,10 @@ subroutine c_sub_a_conjb(n, a, c, b) ! C -= A * > conj(B) > end do > end subroutine c_sub_a_conjb > > -! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0- > 9]+.2d, #0} 2 } } > +! The two plain multiplies form .COMPLEX_MUL (#0 + #90) and the two > conjugate > +! multiplies form .COMPLEX_MUL_CONJ (#0 + #270). PR122408 is about > detecting > +! the conjugate form, so the #270 and #180 counts are the ones that guard it. > +! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0- > 9]+.2d, #0} 4 } } > +! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0- > 9]+.2d, #90} 2 } } > ! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0- > 9]+.2d, #270} 2 } } > +! { dg-final { scan-assembler-not {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0- > 9]+.2d, #180} } } > -- > 2.50.1 (Apple Git-155)
