MLton space pig

Stephen Weeks MLton@sourcelight.com
Mon, 28 May 2001 13:51:02 -0700


> Something  is  funny  space-wise  in the 2001-03-21 version of MLton.  If you
> grab the URL
>     http://sourcelight.com/Z/bloat.tgz
> you will see a SML program.  The whole thing is only 483 lines worth  of  SML
> code,  nothing  fancy,  no  functors,  and  yet it requires 512 meg of RAM to
> compile.  I ran it with -v3 and turning on gc-messages.  The max live is just
> under 150 megabytes.  Other than all the gc messages, and the various listing
> of /tmp files, the message just before the blowup is
>     outputAssembly starting
> and the message just after is
>     translateChunk totals 0.03 + 0.0 (0.0% GC)

I observed the same problem as you.  The outputAssembly message means that the
X86 code generator is starting.  Since the amount of time it takes (on my
machine) to reach that point is about two seconds and the amount of space is not
that much, I bet there is a problem in the X86 codegen.  There haven't been any
changes to the codegen since 2001-03-21, so the bug has probably been around for
a while.  Matthew is starting here tomorrow (Tuesday), so hopefully he can take
a look.

> The compile also took 73 CPU seconds, which seems a bit much given  how  much
> smaller  it  is  than the self compile, but I'm not really concerned by that.
> My concern is  this  real  blow-up  in  space  used,  which  means  even  for
> relatively small programs you need a rather large machine.  To be specific, I
> can't compile this program on my laptop (which only has 128K), which is  both
> surprising and a pain.
> 
> Just  in  case, I tried doing the compile with -no-polyvariance.  This had no
> effect on either max bytes live or CPU time.

Yeah, both the intermediate CPS size (from -keep cps) and the final executable
size are small, so the problem is likely data structure bloat in the codegen.

For now, you can compile with -native false, which only takes 6 seconds and uses
42M on my machine.

We'll let you know more tomorrow, I hope.