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] Fix number_of_iterations_cond (PR tree-optimization/53550)


On Sat, Jun 2, 2012 at 9:48 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> tree-chrec.c and tree-scalar-evolutions.c uses sizetype as type of
> iv->step, but the following spot would use POINTER_TYPE, which leads
> to ICEs. ?Fixed thusly, bootstrapped/regtested onx 86_64-linux and
> i686-linux, ok for trunk/4.7?

Ok.

Thanks,
Richard.

> 2012-06-02 ?Jakub Jelinek ?<jakub@redhat.com>
>
> ? ? ? ?PR tree-optimization/53550
> ? ? ? ?* tree-ssa-loop-niter.c (number_of_iterations_cond): If type
> ? ? ? ?is POINTER_TYPE_P, use sizetype as step type instead of type.
>
> ? ? ? ?* gcc.dg/pr53550.c: New test.
>
> --- gcc/tree-ssa-loop-niter.c.jj ? ? ? ?2012-06-01 14:40:59.336398386 +0200
> +++ gcc/tree-ssa-loop-niter.c ? 2012-06-01 17:52:09.128317401 +0200
> @@ -1275,13 +1275,14 @@ number_of_iterations_cond (struct loop *
> ? ? ?practice, but it is simple enough to manage. ?*/
> ? if (!integer_zerop (iv0->step) && !integer_zerop (iv1->step))
> ? ? {
> + ? ? ?tree step_type = POINTER_TYPE_P (type) ? sizetype : type;
> ? ? ? if (code != NE_EXPR)
> ? ? ? ?return false;
>
> - ? ? ?iv0->step = fold_binary_to_constant (MINUS_EXPR, type,
> + ? ? ?iv0->step = fold_binary_to_constant (MINUS_EXPR, step_type,
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iv0->step, iv1->step);
> ? ? ? iv0->no_overflow = false;
> - ? ? ?iv1->step = build_int_cst (type, 0);
> + ? ? ?iv1->step = build_int_cst (step_type, 0);
> ? ? ? iv1->no_overflow = true;
> ? ? }
>
> --- gcc/testsuite/gcc.dg/pr53550.c.jj ? 2012-06-01 17:52:09.128317401 +0200
> +++ gcc/testsuite/gcc.dg/pr53550.c ? ? ?2012-06-02 08:53:53.345935193 +0200
> @@ -0,0 +1,12 @@
> +/* PR tree-optimization/53550 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fprefetch-loop-arrays -w" } */
> +
> +int *
> +foo (int *x)
> +{
> + ?int *a = x + 10, *b = x, *c = a;
> + ?while (b != c)
> + ? ?*--c = *b++;
> + ?return x;
> +}
>
> ? ? ? ?Jakub


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