https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113734
--- Comment #6 from Tamar Christina <tnfchris at gcc dot gnu.org> --- The reason for the miscompile popping up is this change from the previous patch diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc index 109d4ce5192..df3eab2e8d5 100644 --- a/gcc/tree-vect-data-refs.cc +++ b/gcc/tree-vect-data-refs.cc @@ -725,8 +725,7 @@ vect_analyze_early_break_dependences (loop_vec_info loop_vinfo) bounded by VF so accesses are within range. We only need to check the reads since writes are moved to a safe place where if we get there we know they are safe to perform. */ - if (DR_IS_READ (dr_ref) - && !ref_within_array_bound (stmt, DR_REF (dr_ref))) + if (!ref_within_array_bound (stmt, DR_REF (dr_ref))) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, but this should have bee safe, as the stores shouldn't be done until the point we know for sure they would be safe to do. the code out of the vectorizer looks ok to me. Valgrind is saying we're reading uninitialized values. But those values I think come from a previous look which sets them to 0. Or is supposed to. So working my way up this giant function.