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)

Reply via email to