[Issue 6401] infinite loop with -inline in gflow.c:accumaecpx

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Oct 10 22:05:52 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=6401

Iain Buclaw <ibuclaw at gdcproject.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ibuclaw at gdcproject.org

--- Comment #4 from Iain Buclaw <ibuclaw at gdcproject.org> ---
Some notes for Walter.

The bottleneck is the `static this()` in gtk.d starting line 36.

This function itself is over 3800 lines long.

Notable problematic functions.

1. dmd/backend/gflow.d: initDNunambigVectors()

This function is a massive bottleneck, as you're effectively doing:
---
// In initDNunambigVectors()
foreach (uint i; 0 .. go.deftop)
{
   // In fillInDNunambig()
   foreach (uint i; 0 .. go.deftop)
   {
      // ...
   }
}
---

In the unreduced test, go.deftop = 25144.  You are also calling this function
twice in dmd/backend/go.d:optfunc.  The main entrypoint being constprop().


2. dmd/backend/gother.d: accumda()

Suffers from a similar problem.  It is recursively called 25144 times in the
OTbinary path.


3. dmd/backend/gflow.d: accumaecpx():

Likewise, it is recursively called

- 56572 times in the first iteration (before accumda).
- 28286 times in a second iteration (after accumda).


4. dmd/backend/gdag.d: aewalk():

Likewise, it is recursively called 50287 times.

--


More information about the Digitalmars-d-bugs mailing list