On Thu, Dec 20, 2012 at 5:06 PM, Paulo Matos <[email protected]> wrote:
> 2012-12-20 Paulo Matos <[email protected]>
>
> 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.