vect: Fix check_reduction_path [PR112374]
As mentioned in the PR, the intent of the r14-5076 changes was that it doesn't count one of the uses on the use_stmt, but what actually got implemented is that it does this processing on any op_use_stmt, even if it is not the use_stmt statement, which means that it can increase count even on debug stmts (-fcompare-debug failures), or if there would be some other use stmt with 2+ uses it could count that as a single use. Though, because it fails whenever cnt != 1 and I believe use_stmt must be one of the uses, it would probably fail in the latter case anyway. The following patch fixes that by doing this extra processing only when op_use_stmt is use_stmt, and using the normal processing otherwise (so ignore debug stmts, and increase on any uses on the stmt). 2023-11-17 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/112374 * tree-vect-loop.cc (check_reduction_path): Perform the cond_fn_p special case only if op_use_stmt == use_stmt, use as_a rather than dyn_cast in that case. * gcc.dg/pr112374-1.c: New test. * gcc.dg/pr112374-2.c: New test. * g++.dg/opt/pr112374.C: New test.
Showing
- gcc/testsuite/g++.dg/opt/pr112374.C 24 additions, 0 deletionsgcc/testsuite/g++.dg/opt/pr112374.C
- gcc/testsuite/gcc.dg/pr112374-1.c 20 additions, 0 deletionsgcc/testsuite/gcc.dg/pr112374-1.c
- gcc/testsuite/gcc.dg/pr112374-2.c 33 additions, 0 deletionsgcc/testsuite/gcc.dg/pr112374-2.c
- gcc/tree-vect-loop.cc 2 additions, 2 deletionsgcc/tree-vect-loop.cc
Loading
Please register or sign in to comment