This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PR 40049, prevent garbage collect errors on machines with vector/vector shift


On Fri, May 8, 2009 at 2:09 PM, Michael Meissner
<meissner@linux.vnet.ibm.com> wrote:
> This patch fixes PR 40049, so that the correct tree/types are used when the
> compiler is converting a vector << scalar shift into a vector << vector shift
> for the machines that only have vector << vector shift (powerpc, spu -- the
> x86_64 sse5 instruction set also has vector << vector shifts, but since they
> also have vector << scalar shifts, they won't run into the situation as much).
>
> Ultimately, this is due to vect_get_vec_def_for_operand creating the vector
> from the scalar, and the type is incorrect in the shift case. ?In particular,
> shifts and rotates are unusual, in that they are binary operators, but the
> types of the left and right sides are not identical (the right side is int).
> Originally, I fixed it in vect_get_vec_df_for_operand, but it was suggested
> that it was better to fix it in a more targetted approach. ?I rewrote the
> patch originally to just convert the type of operand, but in some cases, it
> fails the simple_use test if the operand is loop invariant, but not a
> constant. ?So my third patch creates the constructor directly for that case.

Hm.  I do not think this is correct.  Why is vect_is_simple_use
failing for you?  I guess this is because op1 is then something
like (short) i_1?  With that you would end up generating invalid
gimple.

The vectorizer would need to insert a conversion stmt for this
(or does it end up doing that - that is, does it re-gimplify the
vectorized stmts?).

Thanks,
Richard.

> I did bootstrap/make check on both x86_64 and powerpc64-linux. ?On the x86_64
> there are no regressions or improvements in the tests. ?On the powerpc side,
> testcase gcc.dg/vect/ggc-pr37574.c which had regressed is now passing. ?Since
> this testcase shows up the bug, I did not write up a new test case for the
> compiler.
>
> Is this patch ok to apply?
>
> --
> Michael Meissner, IBM
> 4 Technology Place Drive, MS 2203A, Westford, MA, 01886, USA
> meissner@linux.vnet.ibm.com
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]