On 09/13/2017 04:45 PM, Jeff Law wrote:
On 09/06/2017 03:54 AM, Jackson Woodruff wrote:
Hi all,

This patch is split from part (1/2). It includes the patterns that have
been moved out of fold-const.c


It also removes an (almost entirely) redundant pattern:

     (A / C1) +- (A / C2) -> A * (1 / C1 +- 1 / C2)

which was only used in special cases, either with combinations
of flags like -fno-reciprocal-math -funsafe-math-optimizations
and cases where C was sNaN, or small enough to result in infinity.

This pattern is covered by:

    (A / C1) +- (A / C2) -> (with O1 and reciprocal math)
    A * (1 / C1) +- A * (1 / C2) ->
    A * (1 / C1 +- 1 / C2)

The previous pattern required funsafe-math-optimizations.

To adjust for this case, the testcase has been updated to require O1 so
that the optimization is still performed.


This pattern is moved verbatim into match.pd:

     (A / C) +- (B / C) -> (A +- B) / C.

OK for trunk?

Jackson

gcc/

2017-08-30  Jackson Woodruff  <jackson.woodr...@arm.com>

     PR 71026/tree-optimization
     * match.pd: Move RDIV patterns from fold-const.c
     * fold-const.c (distribute_real_division): Removed.
     (fold_binary_loc): Remove calls to distribute_real_divison.

gcc/testsuite/

2017-08-30  Jackson Woodruff  <jackson.woodr...@arm.com>

     PR 71026/tree-optimization
     * gcc/testsuire/gcc.dg/fold-div-1.c: Use O1.
Sorry.  Just one more question here.  Does the new match.pd pattern need
to be conditional on flag_unsafe_math_optimizations?  ISTM as written
it's going to do those transformations independent of that flag.

For more context

(if (flag_unsafe_math_optimizations)
 /* Simplify sqrt(x) * sqrt(x) -> x.  */
 (simplify
  (mult (SQRT@1 @0) @1) <- End mult
  (if (!HONOR_SNANS (type))
   @0
  ) <- End if !HONOR_SNANS
 ) <- End simplify

(for op (plus minus)
  /* Simplify (A / C) +- (B / C) -> (A +- B) / C.  */
  (simplify
   (op (rdiv @0 @1)
       (rdiv @2 @1)
   )  <- End op
   (rdiv (op @0 @2) @1) <- End rdiv
   ) <- End simplify
  ) <- End for

... (more patterns) ...

The if (flag_unsafe_math_optimizations) covers a whole sequence of transformations here which mine is a part of. I've annotated the close parens so it is clearer.

I don't have commit privileges, could you commit this on my behalf if this is OK?

Jackson.


If this has already been discussed, don't hesitate to just point me at
the discussion :-)

Jeff

Reply via email to