[committed,PR,target/103722] Fix register_move_cost for the sh
Commit Message
As outlined in the BZ the sh is returning cost 2 for various reg->reg
moves. Cost 2 has special meaning to reload and prevents the insns from
being re-recognized. Vlad's patch bumps the cost to 7. Other values
might be better, but given this has been languishing for ~6 months and
there are no signs of an SH expert stepping in to provide a better
value, I'm going with Vlad's patch from the PR as-is.
Committed to the trunk,
Jeff
commit 42d8fb2d4569e9930e277b01170bfd3586bf94d3
Author: Vladimir Makarov <vmakarov@gcc.gnu.org>
Date: Sat May 28 12:08:38 2022 -0600
Fix ICE on sh
gcc/
PR target/103722
* config/sh/sh.c (sh_register_move_cost): Avoid cost "2" (which
is special) for various scenarios.
@@ -10762,6 +10762,12 @@ sh_register_move_cost (machine_mode mode,
&& ! REGCLASS_HAS_GENERAL_REG (dstclass))
return 2 * ((GET_MODE_SIZE (mode) + 7) / 8U);
+ if (((dstclass == FP_REGS || dstclass == DF_REGS)
+ && (srcclass == PR_REGS))
+ || ((srcclass == FP_REGS || srcclass == DF_REGS)
+ && (dstclass == PR_REGS)))
+ return 7;
+
return 2 * ((GET_MODE_SIZE (mode) + 3) / 4U);
}