https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119785
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2025-04-14
CC| |jakub at gcc dot gnu.org
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Guess this is caused by r6-2055, before that change set_src_cost wasn't passed
mode argument at all.
The problem is while for speed == 0 we pass always QImode, for speed == 1 it is
some random mode after the last vector mode. In x86 case it is V2HFmode, so it
happens to work somehow, but in the sparc64 case that mode is MAX_MACHINE_MODE
and so doesn't work at all.
2025-04-14 Jakub Jelinek <[email protected]>
PR rtl-optimization/119785
* expmed.cc (init_expmed): Always pass QImode rather than mode to
set_src_cost passed to set_zero_cost.
--- gcc/expmed.cc.jj 2025-04-08 14:08:51.234282102 +0200
+++ gcc/expmed.cc 2025-04-14 12:17:48.334123928 +0200
@@ -285,7 +285,7 @@ init_expmed (void)
for (speed = 0; speed < 2; speed++)
{
crtl->maybe_hot_insn_p = speed;
- set_zero_cost (speed, set_src_cost (const0_rtx, mode, speed));
+ set_zero_cost (speed, set_src_cost (const0_rtx, QImode, speed));
for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT;
mode = (machine_mode)(mode + 1))