http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51860
--- Comment #7 from Andreas Krebbel <krebbel at gcc dot gnu.org> 2012-01-16 08:23:56 UTC --- Regarding the insn address the split is supposed to happen after the call_insn 3059. But the code I've added to keep the call_arg_location note after the call insn prevents that: /* Make sure we do not split between a call and its corresponding CALL_ARG_LOCATION note. */ if (CALL_P (insn)) { rtx next = NEXT_INSN (insn); if (next && NOTE_P (next) && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) continue; } Then the split should occur just after the call_arg_location note but that code prevents that: /* We can insert the barrier only after a 'real' insn. */ if (GET_CODE (insn) != INSN && GET_CODE (insn) != CALL_INSN) continue; So the split in fact occurs after the next real insn which is the load zero. (call_insn 3059 39956 39958 (parallel [ (set (reg:SI 2 %r2) (call (mem:QI (reg/f:SI 11 %r11 [15205]) [0 identifier_global_value S1 A8]) (const_int 0 [0]))) (clobber (reg:SI 14 %r14)) ]) /build/gcc-head/gcc/c-family/c-common.c:5045 576 {*basr_r} (nil) (expr_list:REG_CFA_RESTORE (use (reg:SI 2 %r2)) (nil))) (note 39958 3059 37799 (nil) NOTE_INSN_CALL_ARG_LOCATION) (insn 37799 39958 44088 (set (reg:SI 1 %r1 [5752]) (const_int 0 [0])) /build/gcc-head/gcc/c-family/c-common.c:5045 67 {*movsi_esa} (nil)) (jump_insn 44088 37799 44089 (set (pc) (label_ref 44090)) /build/gcc-head/gcc/c-family/c-common.c:5045 561 {*jump31} (nil)