http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60192
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Well, then SRA didn't work. The aggregate copy should have been elided and the local 'l' should have been removed: Released 11 names, 183.33%, removed 11 holes foo (struct S * p) { int l$i; int _3; <bb 2>: l$i_4 = MEM[(struct S *)p_2(D)]; _3 = l$i_4 + 1; MEM[(struct S *)p_2(D)] = _3; return; } (from x86_64) Maybe some cost oddity on arm prevents this?