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.