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