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.