https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91790

Kewen Lin <linkw at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |ASSIGNED

--- Comment #9 from Kewen Lin <linkw at gcc dot gnu.org> ---
This issue won't be reproduced with latest trunk but I still can reproduce with
the original reported revision. I checked the dumpings, it changes starting
from inlining, the bg() doesn't have the loop of interest now. I tried to
bisect, but it failed early on some intermediate commits with building errors
on some file in cp.

The root cause is that we have two slp nodes whose stmts are in the same group,
they share the same first_stmt DR (_30) for the realign set up work. When
transforming the node which doesn't have the first_stmt in the group, we can't
guarantee the first_stmt DR has been initialized yet even we emit stmts late
just before the last stmt in the node.

Since we only get first_stmt_info_for_drptr set during BB vectorization, we can
ensure compute_in_loop case won't have first_stmt_info_for_drptr different from
first_stmt_info, meanwhile we can ensure it is impossible to get
dr_explicit_realign_optimized during BB vectorization. Then as Richard pointed
out in PR92534, we can setup realignment later after we get the fixed
first_stmt_info_for_drptr DR when we have different first_stmt_info.

Reply via email to