https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121509
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2025-08-12
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
Broken:
> ./xgcc -B. t.c -O2 -march=znver3 -w -fno-tree-slp-vectorize -fopt-info-vec
runData/keep/in.23654.c:402:26: optimized: loop vectorized using 16 byte
vectors and unroll factor 2
runData/keep/in.23654.c:661:40: optimized: loop vectorized using 32 byte
vectors and unroll factor 32
> ./a.out
checksum = C6D41636
OK (revision reverted):
> ./xgcc -B. t.c -O2 -march=znver3 -w -fno-tree-slp-vectorize -fopt-info-vec
runData/keep/in.23654.c:661:40: optimized: loop vectorized using 32 byte
vectors and unroll factor 32
> ./a.out
checksum = DFCC84BC
The revision can cause a loop to be vectorized when it was previously detected
to miss some required scalar stmts covered by SLP.
runData/keep/in.23654.c:402:26: note: Analyze phi: l_2131_631 = PHI <1(229),
-511973466(61)>
runData/keep/in.23654.c:402:26: missed: intermediate value used outside loop.
runData/keep/in.23654.c:402:26: missed: Unknown def-use cycle pattern.
...
runData/keep/in.23654.c:402:26: note: === vect_detect_hybrid_slp ===
runData/keep/in.23654.c:402:26: note: Processing hybrid candidate :
l_2131_631 = PHI <1(229), -511973466(61)>
runData/keep/in.23654.c:402:26: note: Found loop_vect sink: l_2131_631 = PHI
<1(229), -511973466(61)>
runData/keep/in.23654.c:402:26: note: Loop contains SLP and non-SLP stmts
runData/keep/in.23654.c:402:26: missed: needs non-SLP handling
<bb 61> [local count: 1204977]:
# prephitmp_1189 = PHI <_440(47), prephitmp_1187(60)>
<bb 62> [local count: 10644573]:
# g_87.167_632 = PHI <_544(229), 0(61)>
# l_2131_631 = PHI <1(229), -511973466(61)>
# ivtmp_717 = PHI <ivtmp_716(229), 2(61)>
_536 = (int) g_87.167_632;
g_73[_536] = 0;
g_87.166_542 = (unsigned char) g_87.167_632;
_543 = g_87.166_542 + 1;
_544 = (signed char) _543;
ivtmp_716 = ivtmp_717 - 1;
if (ivtmp_716 != 0)
goto <bb 229>; [94.50%]
else
goto <bb 63>; [5.50%]
<bb 229> [local count: 10059121]:
goto <bb 62>; [100.00%]
<bb 63> [local count: 1204977]: