On 09/13/2017 10:25 AM, Jackson Woodruff wrote:
> 
> 
> 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.
Ah.  Missed the indention level.  I'd cut-n-pasted the new bits to
"verify" my suspicion as well and shoved it at the end of my match.pd.
WHich of course wasn't protected.

> 
> I don't have commit privileges, could you commit this on my behalf if
> this is OK?
Will do.  If you're going to contribute regularly you might as well get
that process started though :-)  List me as your sponsor.

https://gcc.gnu.org/svnwrite.html

Reply via email to