https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109279
Bug ID: 109279
Summary: [13 Regression] RISC-V: complex constants synthesized
vs. fetching from constant pool
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: vineet.gupta at linux dot dev
Target Milestone: ---
This is code bloat regression since gcc 12.1, seen yet again in SPEC2017
deepsjeng. After 2e886eef7f2b5a ("RISC-V: Produce better code with complex
constants [PR95632] [PR106602]").
unsigned long long FileAttacks(unsigned long long occ, const unsigned int sq) {
unsigned int o;
unsigned int f = sq & 7;
occ = 0x0101010101010101ULL & (occ >> f);
o = ( 0x0080402010080400ULL * occ ) >> 58;
return ( aFileAttacks[o][sq>>3] ) << f;
}
cc1 -O2 -march=rv64gc_zba_zbb_zbc_zbs -mabi=lp64d # stage1 is enough
Before above commit
-------------------
lui a4,%hi(.LC0)
ld a4,%lo(.LC0)(a4)
andi a3,a1,7
srl a5,a0,a3
and a5,a5,a4
lui a4,%hi(.LC1)
ld a4,%lo(.LC1)(a4)
srliw a1,a1,3
mul a5,a5,a4
lui a4,%hi(aFileAttacks)
addi a4,a4,%lo(aFileAttacks)
srli a5,a5,58
sh3add a5,a5,a1
sh3add a5,a5,a4
ld a0,0(a5)
sll a0,a0,a3
ret
.section .srodata.cst8,"aM",@progbits,8
.align 3
.LC0:
.dword 0x0101010101010101
.align 3
.LC1:
.dword 0x0080402010080400
With commit
-----------
li a5,16842752
addi a5,a5,257
slli a5,a5,16
addi a5,a5,257
andi a3,a1,7
slli a5,a5,16
srl a4,a0,a3
addi a5,a5,257
and a4,a4,a5
slli a5,a4,9
add a5,a5,a4
slli a5,a5,9
add a5,a5,a4
slli a4,a5,27
add a5,a5,a4
srli a5,a5,45
srliw a1,a1,3
andi a5,a5,504
lui a4,%hi(aFileAttacks)
add a5,a5,a1
addi a4,a4,%lo(aFileAttacks)
sh3add a5,a5,a4
ld a0,0(a5)
sll a0,a0,a3
ret