http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42240
--- Comment #15 from Anitha Boyapati <anitha.boyapati at atmel dot com> 2010-11-09 10:26:04 UTC --- (In reply to comment #13) > Implement TARGET_CANNOT_MODIFY_JUMPS_P and respect epilogue_completed and > cfun->machine->is_naked. This will stop BB reorder and similar post-epilogue > passes from moving the non-code-producing return-insn up. Yes, BB reordering pass is shifting jump blocks. Attached patch solves the issue. The output is: .brsh .L11 | brlo .L5 > ldi r24, lo8(0) > ldi r25, hi8(0) > rjmp .L6 > L5: .L11: < ldi r24, lo8(0) < ldi r25, hi8(0) < rjmp .L6 <