http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58219

            Bug ID: 58219
           Summary: [SH] mov.l insn length is wrong on SH2A
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: olegendo at gcc dot gnu.org
            Target: sh2a*-*-*

As of rev 201282, when compiling for SH2A mov.l insn lengths are wrongly set to
4 bytes:

int test (int* x)
{
  return x[0];
}

void test (int* x, int y)
{
  x[0] = y;
}

__Z4testPi:
        mov.l    @r4,r0 ! 6     movsi_ie/6      [length = 4]
        rts/n           ! 28    *return_i       [length = 4]

__Z4testPii:
.LFB1:
        mov.l   r5,@r4  ! 7     movsi_ie/9      [length = 4]
        rts/n           ! 19    *return_i       [length = 4]


This makes it impossible for the dbr pass to put mov.l loads/stores into delay
slots (on SH only 2 byte insns can be put into delay slots).

Reply via email to