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  <pola...@redhat.com>
>           Jakub Jelinek  <ja...@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

Reply via email to