https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118405
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- So what's odd is that vect_supportable_dr_alignment says misaligned vector(1) double loads are not supported. We are generally expecting targets to support this - IIRC we don't fall back to load vector(1) T as T during RTL expansion (the vector and scalar register sets might not overlap). So - riscv doesn't have movmisalign for vector(1) double it seems, or wrongly(?) gates it with non-support? There's an issue with vect_compute_data_ref_alignment because we run into if (drb->offset_alignment < vect_align_c || !step_preserves_misalignment_p /* We need to know whether the step wrt the vectorized loop is negative when computing the starting misalignment below. */ || TREE_CODE (drb->step) != INTEGER_CST) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "Unknown alignment for access: %T\n", ref); return; as the step is variable ((ssizetype) (s_19(D) * 80)). We could possibly special-case some cases in vect_dr_misalign_for_aligned_access here. That said, the idea is to only emit supported vector loads, and vector(1) double doesn't seem to be supported. So IMO the fix would be to instead view-convert the scalar load. The existing exception for VMAT_ELEMENTWISE was to fix PR85793, a similar ICE.