> Hmm, the function is called at transform time so this shouldn't help > avoiding the ICE. I expected we refuse to vectorize _any_ reduction > when sign dependent rounding is in effect? OTOH maybe sign-dependent > rounding is OK but only when we use a unconditional fold-left > (so a loop mask from fully masking is OK but not an original COND_ADD?).
So we currently only disable the use of partial vectors else if (reduction_type == FOLD_LEFT_REDUCTION && reduc_fn == IFN_LAST && FLOAT_TYPE_P (vectype_in) && HONOR_SIGNED_ZEROS (vectype_in) && HONOR_SIGN_DEPENDENT_ROUNDING (vectype_in)) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "can't operate on partial vectors because" " signed zeros cannot be preserved.\n"); LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false; which is inside a LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P block. For the fully masked case we continue (and then fail the assertion on aarch64 at transform time). I didn't get why that case is ok, though? We still merge the initial definition with the identity/neutral op (i.e. possibly -0.0) based on the loop mask. Is that different to partial masking? Regards Robin