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