On Thu, Dec 20, 2012 at 5:06 PM, Paulo Matos <pma...@broadcom.com> wrote:
> 2012-12-20 Paulo Matos <pma...@broadcom.com>
>
>         PR tree-optimization/55761
>         * tree-tailcall.c (process_assignment): Use build_int_cst only for 
> integral types,
>         for every other type that managed to pass all conditions use 
> fold_build1.

     case NEGATE_EXPR:
       if (FLOAT_TYPE_P (TREE_TYPE (op0)))
         *m = build_real (TREE_TYPE (op0), dconstm1);
+      else if (INTEGRAL_TYPE_P (TREE_TYPE (non_ass_var)))
+        *m = build_int_cst (TREE_TYPE (non_ass_var), -1);
       else
-        *m = build_int_cst (TREE_TYPE (op0), -1);
+        *m = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var);

looks bogus (op0 vs. non_ass_var).  I'd rather use fold_unary here as I'm not
sure if callers handle a NEGATE_EXPR in *m.  And I'd use that unconditionally,
this last case looks like it will have very weak testing coverage.  Thus,

   *m = fold_unary (NEGATE_EXPR, TREE_TYPE (op0), op0);

and also in the MINUS_EXPR case.

Richard.

Reply via email to