[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-08 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

--- Comment #1 from Thomas Koenig  ---
Created attachment 54617
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54617&action=edit
rnflow.f90

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-08 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

--- Comment #2 from Thomas Koenig  ---
Created attachment 54618
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54618&action=edit
Header file needed for compilation

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-08 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

--- Comment #3 from Thomas Koenig  ---
Created attachment 54619
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54619&action=edit
Compressed input file

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-08 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Thomas Koenig  changed:

   What|Removed |Added

   Keywords||needs-bisection
   Target Milestone|--- |13.0

--- Comment #4 from Thomas Koenig  ---
As also confirmed by Paul Thomas, the program works fine at -O2.

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

--- Comment #5 from Thomas Koenig  ---
Might be invalid code, see

https://gcc.gnu.org/pipermail/fortran/2023-March/059062.html

That appears to be a problem with widely used old-style linear congruential
random number generators, which expect overflow to just silently
truncate.

Looking at the test case with nagfor -C=all shows the problem:

  0: 0: 0.000 -> Read sequence
  0: 0: 0.150 -> extract extrema
  0: 0: 0.159 -> Generate raw transitions counts
  0: 0: 0.183 -> Compute Markov matrix
  0: 0: 0.184 -> Calculate theoretical rainflow
  0: 0:43.286 -> Simulate random markov sequences
Runtime Error: rnflow.f90, line 902: INTEGER(int32) overflow for 843314861 *
1993

The issue with the patch is that it is also illegal Fortran, because the
assignment outside the value range of a default integer is also illegal.
Again, nagfor catches this:

  0: 0: 0.000 -> Read sequence
  0: 0: 0.140 -> extract extrema
  0: 0: 0.150 -> Generate raw transitions counts
  0: 0: 0.175 -> Compute Markov matrix
  0: 0: 0.175 -> Calculate theoretical rainflow
  0: 0:44.032 -> Simulate random markov sequences
Runtime Error: rnflow.f90, line 905: Overflow converting 1681180334666 to
INTEGER(int32)

So, what to do?  I think we need to mention this in the release notes,
and also a workaround which gives the same result.

If there is a flag which suppresses whatever this does, we could also
set this with -std=legacy (and also mention this in the relase notes).

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #6 from Jakub Jelinek  ---
jmul is used just once, so I wonder if the easiest solution wouldn't be to make
jmul
PARAMETER kind=8.
Anyway, does -fwrapv work around it too?

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Thomas Koenig  changed:

   What|Removed |Added

  Known to work||12.2.0

--- Comment #7 from Thomas Koenig  ---
I've just checked 12.2.0, and the code does not hang there.

(In reply to Jakub Jelinek from comment #6)
> jmul is used just once, so I wonder if the easiest solution wouldn't be to
> make jmul
> PARAMETER kind=8.

We can change the benchmark source, but we cannot change the
existing code base using the same idiom out there :-|

> Anyway, does -fwrapv work around it too?

Yes, -frwapv works.

We could just include that in -std=legacy (it really is used for
legacy code) and mention it in the release notes, then.

How does that sound?

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Jakub Jelinek  changed:

   What|Removed |Added

   Keywords|needs-bisection |

--- Comment #8 from Jakub Jelinek  ---
BTW, rnflow without the tweaks started to hang with
r13-5103-g7c9f20fcfdc2d8453df8

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Richard Biener  changed:

   What|Removed |Added

 Resolution|--- |DUPLICATE
 Status|UNCONFIRMED |RESOLVED

--- Comment #9 from Richard Biener  ---
duplicate

*** This bug has been marked as a duplicate of bug 71231 ***

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread pault at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Paul Thomas  changed:

   What|Removed |Added

 Resolution|DUPLICATE   |INVALID
 CC||pault at gcc dot gnu.org
  Known to work|12.2.0  |
   Keywords||needs-bisection

--- Comment #10 from Paul Thomas  ---
See comment at rnflow.f90:899 - As Richard Biener suggested to the list
-fdefault-integer-8 fixes the problem but breaks tfft2 of the polyhedron suite.

Better is:
  integer(8), parameter   :: jmul =  843314861  ! multiplicateur
  integer(8), parameter   :: jadd =  453816693  ! constante additive

Cheers

Paul

[Bug tree-optimization/109075] [13 Regression] rnflow hangs at -O3

2023-03-09 Thread pault at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

Paul Thomas  changed:

   What|Removed |Added

   Keywords||needs-bisection

--- Comment #11 from Paul Thomas  ---
As a final remark from me, rnflow is not hanging but, rather, execution time
becomes quadratic in ndonm (in rnprfm.h) and is already tiresomely long at a
value of 40, compared with the default 101.

Cheers

Paul