Richard Henderson <email@example.com> writes:
> On Fri, Sep 03, 2004 at 08:11:47AM +0100, Richard Sandiford wrote:
>> But the point as I understand it is that the generic optimisers
>> (e.g. simplify-rtx.c) can't tell the difference between an ASHIFT
>> that came from an (ashift ...) in the instruction stream or from
>> something that was generated artificially by expand_compound_operation.
> That would be a bug in expand_compound_operation, I would think.
> The alternative is to not add your new hook and do what you can
> with the existing SHIFT_COUNT_TRUNCATED macro. Which I recommend
> that you do; I don't think you really want to have the shift bits
> dependent on a cleanup / infrastructure change of this scale.
FWIW, that's what my original patch did:
The patch I posted this week was in response to the request for
wider-ranging target support:
But because it depended on S_C_T, the original patch produced much
worse code for ARM than the new one does.
Is the new target hook really that invasive? It doesn't affect any
other code as such.
The only change not directly related to the optabs expansion was the
simplify-rtx.c thing, and like I said in my covering message, I think
that code's bogus anyway:
This seems pretty dubious anyway. What if a define_expand in the backend
uses shifts to implement a complex named pattern? I'd have thought the
backend would be free to use target-specific knowledge about what that
shift does with out-of-range values. And if we are later able to
constant-fold the result, the code above might not do what the
target machine would do.
To be honest, I'd still like to apply that hunk even if we go back to S_C_T.