On Thu, Jun 10, 2021 at 9:45 PM Roger Sayle <ro...@nextmovesoftware.com> wrote: > > > The patch implements a missed optimization enhancement. Under usual > IEEE rules, x+0.0 can't be simplified to x when x might potentially > be an IEEE minus zero (-0.0). The current logic in the middle-end > checks whether the type of x should honor signed zeros, but with this > patch we introduce tree_expr_maybe_real_minus_zero_p that allows us > to confirm that the value can't possibly be -0.0, for example, the result > of a conversion from an integer type, or the result of fabs (or has a > type that doesn't honor signed zero). > > Whilst modifying match.pd, I also converted some additional folding > transformations from "testing the type" to "testing the value". > > The following patch has been tested on x86_64-pc-linux-gnu with > a make bootstrap and make -k check with no new failures. > > Ok for mainline?
OK. Maybe we can at some point record & propagate these FP value predicates on SSA names just similar to SSA_NAME_RANGE_INFO ... Thanks, Richard. > > 2020-06-10 Roger Sayle <ro...@nextmovesoftware.com> > > gcc/ChangeLog > PR tree-optimization/96392 > * fold-const.c (fold_real_zero_addition_p): Take both arguments > of the addition or subtraction, not just the zero. Use this > other argument in tests for signaling NaNs and signed zeros. > (tree_expr_maybe_real_minus_zero_p): New predicate. > * fold-const.h (fold_real_zero_addition_p): Update prototype. > (tree_expr_maybe_real_minus_zero_p): New function prototype. > * match.pd: Update calls to fold_real_zero_addition_p. > Replace HONOR_NANS with tree_expr_maybe_nan_p. > Replace HONOR_SIGNED_ZEROS with tree_expr_maybe_real_minus_zero_p. > Replace HONOR_SNANS with tree_expr_maybe_signaling_nan_p. > * tree-ssa-reassoc.c (eliminate_using_constants): Update > call to fold_real_zero_addition_p. > > gcc/testsuite/ChangeLog > PR tree-optimization/96392 > * gcc.dg/pr96392.c: New test. > > Roger > -- > Roger Sayle > NextMove Software > Cambridge, UK >