> 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