https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81357
--- Comment #13 from Qing Zhao <qing.zhao at oracle dot com> --- I checked the same testing case on X86, SPARC in addition to aarch64, all have the same issue: (compile with gcc -O, the default is -m64) ***x86: test1: .LFB0: .cfi_startproc leal 1(%rdi), %eax movl %eax, %edx movq %rdx, d(%rip) ret .cfi_endproc in the above, "movl %eax, %edx" is the insn that can be eliminated. ***SPARC: test1: sethi %hi(d), %g1 add %o0, 1, %o0 srl %o0, 0, %o0 jmp %o7+8 stx %o0, [%g1+%lo(d)] in the above, "srl %o0, 0, %o0" is the insn that can be eliminated. so, this seems a common issue on -m64 targets. (NOTE, this issue does NOT exist on -m32 targets).