mlyacc bug

Stephen Weeks MLton@sourcelight.com
Fri, 13 Oct 2000 16:58:18 -0700 (PDT)


> It doesn't diverge.  It just takes a really long time.  On my 733 MhZ machine,
> it took 1410 seconds.  This is extremely bizarre, since the change to
> backend.fun was for stuff after register allocation, and so should not have
> affected register allocation at all.  And the previous version took about 100s,
> IIRC.  I am investigating.

We confused ourselves.  The change to backend did not make a difference.
Register allocation was already slow in 20001004.  It was fast (94s), however,
in 20000906.  Looking at the size of the CPS outputs I see that there were 8374
primexps in the 20000906 version and 51065 in the 20001004 version.  In
20001004, the inlining pass blew up the size by a factor of 7.5, while in
20000906, it blew up the size < 2x.

The only reasonable conclusion that I can see is that the new pass that I added
on 2000-10-2 to remove useless constructors, globals, and functions exposed some 
information to subsequent passes that caused the inliner to blow up.  I'm still
looking into it.