https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119016
--- Comment #6 from Tamar Christina <tnfchris at gcc dot gnu.org> --- At the start of the second iteration len = 2, so start becomes misaligned at 0x7fffffffe2f2 but the peeling iteration code checks (0x7fffffffe2f2 / 8) & 1 which is 0, so it doesn't peel to align it. Indeed the dump says: oel.c:6:14: note: created buf_15(D) oel.c:6:14: note: niters for prolog loop: (size_t) ((unsigned long) buf_15(D) >> 3) & 1 Because of the scalar code doing DI mode loads, and the misalignment being HImode, I don't think the alignment can be reached by peeling. i.e. I don't think you can reach target alignment, and unless I'm missing something, get_misalign_in_elems does not have a failure mode for when target alignment can't be reached?