https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107569

--- Comment #37 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:2d5c4a16dd833aa083f13dd3e78e3ef38afe6ebb

commit r13-3924-g2d5c4a16dd833aa083f13dd3e78e3ef38afe6ebb
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Sat Nov 12 09:35:16 2022 +0100

    range-op: Implement floating point division fold_range [PR107569]

    Here is the floating point division fold_range implementation,
    as I wrote in the last mail, we could outline some of the common parts
    into static methods with descriptive names and share them between
    foperator_div and foperator_mult.

    Regressions are
    +FAIL: gcc.dg/pr95115.c execution test
    +FAIL: libphobos.phobos/std/math/hardware.d execution test
    +FAIL: libphobos.phobos_shared/std/math/hardware.d execution test
    The first test is we have:
      # RANGE [frange] double [] +-NAN
      _3 =  Inf /  Inf;
      if (_3 ord _3)
        goto <bb 3>; [INV]
      else
        goto <bb 4>; [INV]

      <bb 3> :
      abort ();

      <bb 4> :
    before evrp, the range is correct, Inf / Inf is known NAN of unknown
    sign.  evrp correctly folds _3 ord _3 into false and the
      _3 =  Inf /  Inf;
    remains in the IL, but then comes dse1 and removes it as dead
    statement.  So, I think yet another example of the PR107608 problems
    where DCE? removes dead statements which raise floating point exceptions.
    And -fno-delete-dead-exceptions doesn't help.

    2022-11-12  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/107569
            * range-op-float.cc (foperator_div): New class.
            (floating_op_table::floating_op_table): Use foperator_div
            for RDIV_EXPR.

Reply via email to