https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116374

            Bug ID: 116374
           Summary: [LRA] [M68K] Wrong %argptr elimination
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sch...@linux-m68k.org
            Blocks: 113939
  Target Milestone: ---

$ cat argptr.c
void
bar (void *p, int size)
{
  __builtin_strncpy (p, "good", size);
}

With LRA and -fpic -O we generate:

bar:
        move.l %a5,-(%sp)
        lea (%pc, _GLOBAL_OFFSET_TABLE_@GOTPC), %a5
        move.l 12(%sp),-(%sp)
        move.l .LC0@GOT.w(%a5),-(%sp)
        move.l 8(%sp),-(%sp)
        bsr.l strncpy@PLTPC
        lea (12,%sp),%sp
        move.l (%sp)+,%a5
        rts

where 8(%sp) should be 16(%sp).

This is

(insn 10 9 11 2 (set (mem/f:SI (pre_dec:SI (reg/f:SI 15 %sp)) [1  S4 A16])
        (mem/f/c:SI (plus:SI (reg/f:SI 24 %argptr)
                (const_int 8 [0x8])) [1 p+0 S4 A32])) "argptr.c":4:3 55
{*movsi_m68k2}
     (expr_list:REG_ARGS_SIZE (const_int 12 [0xc])
        (nil)))

before reload.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113939
[Bug 113939] Switch m68k to LRA

Reply via email to