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

            Bug ID: 120344
           Summary: code size increase with gcc 13 due to repeated loading
                    of higher address in assembly for riscv
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fanghuaqi at vip dot qq.com
  Target Milestone: ---

Created attachment 61465
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61465&action=edit
dump.c

Hi there, I am facing a code size increase issue when upgrade the compiler from
riscv gcc 10 to gcc 13, sample code dump.c as attached, compiler option
-march=rv32imafc -mabi=ilp32f -Os.

here is compiler explorer link https://godbolt.org/z/j87KW5h6W

For gcc 10:

Generated asm like this

        lw      a5,304(a2)
        sh      a5,810(a0)
        lw      a5,308(a2)
        sh      a5,812(a0)
        lw      a5,276(a2)
        sh      a5,814(a0)
        lw      a5,348(a3)
        sh      a5,816(a0)
        lw      a5,348(a4)
        sh      a5,818(a0)
        lw      a5,60(a3)
        sh      a5,820(a0)
        lw      a5,60(a4)
        sh      a5,822(a0)
        lw      a5,12(a1)
        sh      a5,824(a0)

But for gcc13, it will generate an extra li to load address, but this address
can be stored in a register just like gcc 10.

        addi    a5,a5,304
        lw      a5,0(a5)
        sh      a5,810(a0)
        li      a5,-133693440
        addi    a5,a5,308
        lw      a5,0(a5)
        sh      a5,812(a0)
        li      a5,-133693440
        addi    a5,a5,276
        lw      a5,0(a5)
        sh      a5,814(a0)
        li      a5,-133955584
        addi    a5,a5,348
        lw      a5,0(a5)
        sh      a5,816(a0)
        li      a5,-133939200
        addi    a5,a5,348
        lw      a5,0(a5)
        sh      a5,818(a0)
        li      a5,-133955584
        addi    a5,a5,60
        lw      a5,0(a5)
        sh      a5,820(a0)
        li      a5,-133939200
        addi    a5,a5,60
        lw      a5,0(a5)
        sh      a5,822(a0)
        li      a5,-131850240
        addi    a5,a5,12
        lw      a5,0(a5)
        sh      a5,824(a0)

And this issue still present in gcc trunk version.

Reply via email to