> So if you think you got everything correct the patch is OK as-is,
> I just wasn't sure - maybe the neutral_element change deserves
> a comment as to how MINUS_EXPR is handled.
Heh, I never think I got everything correct ;)
Added this now:
static bool
fold_left_reduction_fn (code_helper code, internal_fn *reduc_fn)
{
+ /* We support MINUS_EXPR by negating the operand. This also preserves an
+ initial -0.0 since -0.0 - 0.0 (neutral op for MINUS_EXPR) == -0.0 +
+ (-0.0) = -0.0. */
What I still found is that aarch64 ICEs at the assertion you added
with -frounding-math. Therefore I changed it to:
- gcc_assert (!HONOR_SIGN_DEPENDENT_ROUNDING (vectype_out));
+ if (HONOR_SIGN_DEPENDENT_ROUNDING (vectype_out))
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "cannot vectorize fold-left reduction because"
+ " signed zeros cannot be preserved.\n");
+ return false;
+ }
No code changes apart from that. Will leave it until Monday and push then
barring any objections.
Thanks for the pointers.
Regards
Robin