https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78355
--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- (In reply to Richard Biener from comment #2) > if (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg)) > || (MEM_ALIGN (reg) < GET_MODE_ALIGNMENT (innermode) > && SLOW_UNALIGNED_ACCESS (innermode, MEM_ALIGN (reg))) > || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)) > return true; > > looks good to me given > > gcc/defaults.h:#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) STRICT_ALIGNMENT > > doesn't do that check itself (maybe it and all ports should be fixed > instead...) The documentation for SLOW_UNALIGNED_ACCESS implicitly says that it's for unaligned accesses only: -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) Define this macro to be the value 1 if memory accesses described by the MODE and ALIGNMENT parameters have a cost many times greater than aligned accesses, for example if they are emulated in a trap handler. and all other uses of SLOW_UNALIGNED_ACCESS in the compiler do it correctly, so it's an isolated bug in lra-constraints.c. That being said, I can make the wording in the documentation stronger.