https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44281
--- Comment #18 from Jeffrey A. Law <law at redhat dot com> --- In reference to c#10 and c#14, we get from the trunk: 0: ff 65 08 jmpq *0x8(%rbp) 3: 66 66 66 66 2e 0f 1f data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) a: 84 00 00 00 00 00 0000000000000010 <unmodified_input_arg_is_copied>: 10: 4c 8b 55 08 mov 0x8(%rbp),%r10 14: 48 8d 6d 08 lea 0x8(%rbp),%rbp 18: 41 ff e2 jmpq *%r10 1b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0000000000000020 <unmodified_input_arg_is_copied_alt>: 20: 48 8b 45 08 mov 0x8(%rbp),%rax 24: 48 83 c5 08 add $0x8,%rbp 28: ff e0 jmpq *%rax 2a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0000000000000030 <unmodified_input_arg_is_copied_alt2>: 30: 48 8b 45 08 mov 0x8(%rbp),%rax 34: 48 83 c5 08 add $0x8,%rbp 38: ff e0 jmpq *%rax Which is better than the code reference in c#14 and c#10 in each case. This was probably Kai's code to improve our indirect jump support in the backend. We also still get the desired code for push_flag_into_local_var. The only issue left is the poor code for push_flag_into_global_reg_var.