https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115687
palmer at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2024-06-27
Ever confirmed|0 |1
CC| |palmer at gcc dot gnu.org
Status|UNCONFIRMED |NEW
--- Comment #1 from palmer at gcc dot gnu.org ---
Looks reasonable to me. Here's a slightly smaller test case
long bar(unsigned int a, unsigned int b, unsigned int c);
long foo(void) {
unsigned int a = 0x4010; // (0x4 << 12) + 0x10
unsigned int b = 0x4020; // (0x4 << 12) + 0x20
unsigned int c = 0x3FF0; // (0x4 << 12) - 0x10
return bar(a, b, c);
}
which under -O2 produces
li a2,16384
li a1,16384
li a0,16384
addi a2,a2,-16
addi a1,a1,32
addi a0,a0,16
tail bar
Jeff had been doing a bunch of constant generation stuff, not sure if he's got
a fix for this one in the works?