On Wed, Nov 11, 2020 at 09:04:28PM +0100, Philipp Tomsich wrote:
> On Wed, 11 Nov 2020 at 20:59, Jakub Jelinek <[email protected]> wrote:
> > >
> > > The simplification that distributes the shift (i.e. the one that Jakub
> > > referred
> > > to as fighting the new rule) is also run after GIMPLE has been expanded to
> > > RTX. In my understanding, this still implies that even if we have a
> > > cost-aware
> > > expansion, this existing rule will nonetheless distribute the shift.
> >
> > At the RTL level, such simplifications should not happen if it is
> > against costs (e.g. combine but various other passes too check costs and
> > punt if the new code would be more costly than the old one).
>
> I agree.
> Let me go back and investigate if the cost-model is misreading things, before
> we
> continue the discussion.
If it is on some targets, surely it should be fixed.
E.g. x86_64 certainly has different costs for constants that fit into
instruction's immediates and for constants that need to be loaded into
registers first.
I know various other targets have much more complex sequences to compute
certain constants in registers though.
sparc costs surprise me:
case CONST_INT:
if (SMALL_INT (x))
*total = 0;
else
*total = 2;
because for the else I'd have expect better analysis of the constant to see
how many instructions are needed for it (I think maximum is 6).
Jakub