This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Don't ICE on long long shifts in vectorizable_shift
On Fri, 28 Oct 2011, Jakub Jelinek wrote:
> On Fri, Oct 28, 2011 at 10:22:15AM +0200, Richard Guenther wrote:
> > Hm, but you are testing vector modes in the path that is supposed to
> > handle shifts by a scalar. That looks odd. Also it should be easy
>
> No, I'm testing it in the path that is supposed to handle shifts by a
> vector. That block starts with:
> /* Vector shifted by vector. */
> if (!scalar_shift_arg)
> {
Oh, I looked close and thought you are touching the else { part ...
> Which means I'd have to duplicate there big parts of
> vectorizable_type_promotion and vectorizable_type_demotion
> and handle all these widening resp. narrowing cases.
Yeah, agreed (though it should be always possible to just
truncate/extend the shift count).
> I know you don't like tree-vect-pattern.c too much, but IMHO just
> changing the shifts in there to have rhs2 type matching rhs1 type
> would be far easier and more maintainable. Especially when it can handle
> additionally what one of the testcases does - long long shift
> with long long shift count, which should be naturally vectorized without
> any promotion/demotion, but the FEs insert there a cast to (int) which would
> result in the promotion/demotion.
... but we could as well forward-prop this (also for scalar code)
(well, truncations only for SHIFT_COUNT_TRUNCATED targets).
The patch is ok meanwhile.
Thanks,
Richard.