diff options
author | Jakub Jelinek <jakub@redhat.com> | 2022-11-12 09:35:16 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2022-11-12 09:35:16 +0100 |
commit | 2d5c4a16dd833aa083f13dd3e78e3ef38afe6ebb (patch) | |
tree | 35c7d90ab5aa975e7b283f3070b02f4dca0d5c40 /gcc/fortran | |
parent | 2f7f9edd28d75a85a33599978f23811e679e443d (diff) | |
download | gcc-2d5c4a16dd833aa083f13dd3e78e3ef38afe6ebb.zip gcc-2d5c4a16dd833aa083f13dd3e78e3ef38afe6ebb.tar.gz gcc-2d5c4a16dd833aa083f13dd3e78e3ef38afe6ebb.tar.bz2 |
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 <jakub@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.
Diffstat (limited to 'gcc/fortran')
0 files changed, 0 insertions, 0 deletions