diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2191d62..a6124ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-10-05 Laurent Thévenoux + + * tree-complex.c (some_nonzerop): Adjust the way of testing real + constants. Allows existing simplifications of complex expansions + to be well done. + * tree-complex.c (expand_complex_addition): Bug fixing for complex + addition expansion simplification. + 2017-10-02 Bill Schmidt Backport from mainline diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c index e0dd3d9..413b601 100644 --- a/gcc/tree-complex.c +++ b/gcc/tree-complex.c @@ -110,8 +110,11 @@ some_nonzerop (tree t) /* Operations with real or imaginary part of a complex number zero cannot be treated the same as operations with a real or imaginary operand if we care about the signs of zeros in the result. */ - if (TREE_CODE (t) == REAL_CST && !flag_signed_zeros) - zerop = real_identical (&TREE_REAL_CST (t), &dconst0); + if (TREE_CODE (t) == REAL_CST) + { + if (real_identical (&TREE_REAL_CST (t), &dconst0)) + zerop = !real_isneg (&TREE_REAL_CST (t)); + } else if (TREE_CODE (t) == FIXED_CST) zerop = fixed_zerop (t); else if (TREE_CODE (t) == INTEGER_CST) @@ -937,7 +940,7 @@ expand_complex_addition (gimple_stmt_iterator *gsi, tree inner_type, case PAIR (VARYING, ONLY_REAL): rr = gimplify_build2 (gsi, code, inner_type, ar, br); - ri = ai; + ri = bi; break; case PAIR (VARYING, ONLY_IMAG):