]> git.ipfire.org Git - thirdparty/gcc.git/commit
tree-optimization/115841 - reduction epilogue placement issue
authorRichard Biener <rguenther@suse.de>
Tue, 16 Jul 2024 09:53:17 +0000 (11:53 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 16 Jul 2024 14:05:11 +0000 (16:05 +0200)
commit016c947b02e79a5c0c0c2d4ad5cb71aa04db3efd
tree6d817652a52a725b48d67b1327398022a5dcab71
parentcca1229b85f2ad9422773fdb954d0924fa1cd350
tree-optimization/115841 - reduction epilogue placement issue

When emitting the compensation to the vectorized main loop for
a vector reduction value to be re-used in the vectorized epilogue
we fail to place it in the correct block when the main loop is
known to be entered (no loop_vinfo->main_loop_edge) but the
epilogue is not (a loop_vinfo->skip_this_loop_edge).  The code
currently disregards this situation.

With the recent znver4 cost fix I couldn't trigger this situation
with the testcase but I adjusted it so it could eventually trigger
on other targets.

PR tree-optimization/115841
* tree-vect-loop.cc (vect_transform_cycle_phi): Correctly
place the partial vector reduction for the accumulator
re-use when the main loop cannot be skipped but the
epilogue can.

* gcc.dg/vect/pr115841.c: New testcase.
gcc/testsuite/gcc.dg/vect/pr115841.c [new file with mode: 0644]
gcc/tree-vect-loop.cc