Enforce correct COND_EXPR order for EXTRACT_LAST_REDUCTION
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 19 Sep 2019 13:33:55 +0000 (13:33 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 19 Sep 2019 13:33:55 +0000 (13:33 +0000)
commitc449d3ae28ff4e133114fb67dbf7dcc7a95ca5d5
tree12ab56e51ea7fe069d7e8ffa1c0b6e41ea5252ba
parent37bc3aa0474f21b7a678b09951634de3205d014e
Enforce correct COND_EXPR order for EXTRACT_LAST_REDUCTION

For conditional reductions, the "then" value needs to be the candidate
value calculated by this iteration while the "else" value needs to be
the result carried over from previous iterations.  If the COND_EXPR
is the other way around, we need to swap it.

2019-09-19  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vectorizer.h (vectorizable_condition): Take an int
reduction index instead of a boolean flag.
* tree-vect-stmts.c (vectorizable_condition): Likewise.
Swap the "then" and "else" values for EXTRACT_LAST_REDUCTION
reductions if the reduction accumulator is the "then" rather
than the "else" value.
(vect_analyze_stmt): Update call accordingly.
(vect_transform_stmt): Likewise.
* tree-vect-loop.c (vectorizable_reduction): Likewise,
asserting that the index is > 0.

From-SVN: r275962
gcc/ChangeLog
gcc/tree-vect-loop.c
gcc/tree-vect-stmts.c
gcc/tree-vectorizer.h