https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101934
Bug ID: 101934 Summary: [11 Regression] aarch64 memset code creates unaligned stores for -mstrict-align Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: rsandifo at gcc dot gnu.org Target Milestone: --- For: struct s { char x[95]; }; void foo (struct s *); void bar (void) { struct s s1 = {}; foo (&s1); } compiled with -Os -mstrict-align, GCC produces: bar: movi v0.4s, 0 stp x29, x30, [sp, -112]! mov x29, sp add x0, sp, 16 str q0, [sp, 80] stp q0, q0, [sp, 16] stp q0, q0, [sp, 48] str q0, [sp, 95] // <-------- unaligned bl foo ldp x29, x30, [sp], 112 ret The *_RATIO macros are already set up to handle STRICT_ALIGNMENT differently, so presumably we should just make aarch64_expand_setmem punt in that case.