[PATCH] Fix PR57980
Jakub Jelinek
jakub@redhat.com
Tue Aug 13 11:53:00 GMT 2013
On Tue, Aug 13, 2013 at 01:51:27PM +0200, Marek Polacek wrote:
> Sure. Ok to apply this one if it passes regtesting?
Yes, thanks.
> 2013-08-13 Marek Polacek <polacek@redhat.com>
> Jakub Jelinek <jakub@redhat.com>
>
> PR tree-optimization/57980
> * tree-tailcall.c (process_assignment): Return false
> when not dealing with integers or floats.
>
> * gcc.dg/pr57980.c: New test.
>
> --- gcc/tree-tailcall.c.mp 2013-08-13 13:42:33.969568463 +0200
> +++ gcc/tree-tailcall.c 2013-08-13 13:44:57.288121663 +0200
> @@ -328,8 +328,10 @@ process_assignment (gimple stmt, gimple_
> case NEGATE_EXPR:
> if (FLOAT_TYPE_P (TREE_TYPE (op0)))
> *m = build_real (TREE_TYPE (op0), dconstm1);
> - else
> + else if (INTEGRAL_TYPE_P (TREE_TYPE (op0)))
> *m = build_int_cst (TREE_TYPE (op0), -1);
> + else
> + return false;
>
> *ass_var = dest;
> return true;
> @@ -341,8 +343,10 @@ process_assignment (gimple stmt, gimple_
> {
> if (FLOAT_TYPE_P (TREE_TYPE (non_ass_var)))
> *m = build_real (TREE_TYPE (non_ass_var), dconstm1);
> - else
> + else if (INTEGRAL_TYPE_P (TREE_TYPE (non_ass_var)))
> *m = build_int_cst (TREE_TYPE (non_ass_var), -1);
> + else
> + return false;
>
> *a = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var);
> }
> --- gcc/testsuite/gcc.dg/pr57980.c.mp 2013-08-13 13:41:55.216418468 +0200
> +++ gcc/testsuite/gcc.dg/pr57980.c 2013-08-13 13:41:33.116333703 +0200
> @@ -0,0 +1,19 @@
> +/* PR tree-optimization/57980 */
> +/* { dg-do compile } */
> +/* { dg-options "-O -foptimize-sibling-calls -w" } */
> +
> +typedef int V __attribute__ ((vector_size (2 * sizeof (int))));
> +extern V f (void);
> +
> +V
> +bar (void)
> +{
> + return -f ();
> +}
> +
> +V
> +foo (void)
> +{
> + V v = { };
> + return v - f ();
> +}
Jakub
More information about the Gcc-patches
mailing list