On 7/20/23 18:59, HAO CHEN GUI wrote:
Hi Jeff,
在 2023/7/21 5:27, Jeff Law 写道:
Wouldn't it make more sense to just try rotate/mask in the original mode before
trying a shift in a widened mode? I'm not sure why we need a target hook here.
There is no change to try rotate/mask with the original mode when
expensive_optimizations is set. The subst widens the shift mode.
But we can add it before the attempt in the wider mode.
if (flag_expensive_optimizations)
{
/* Pass pc_rtx so no substitutions are done, just
simplifications. */
if (i1)
{
subst_low_luid = DF_INSN_LUID (i1);
i1src = subst (i1src, pc_rtx, pc_rtx, 0, 0, 0);
}
subst_low_luid = DF_INSN_LUID (i2);
i2src = subst (i2src, pc_rtx, pc_rtx, 0, 0, 0);
}
I don't know if the wider mode is helpful to other targets, so
I added the target hook.
In this scenario we're often better off relying on rtx_costs (even with
all its warts) rather than adding yet another target hook.
I'd love to hear from Segher here to see if he's got other ideas.
jeff