[MLton-commit] r4699

Stephen Weeks sweeks at mlton.org
Mon Sep 11 11:55:29 PDT 2006


Added talk.

----------------------------------------------------------------------

A   talks/whole-program-compilation/tags/
A   talks/whole-program-compilation/trunk/
A   talks/whole-program-compilation/trunk/Makefile
A   talks/whole-program-compilation/trunk/dates.sml
A   talks/whole-program-compilation/trunk/fib.gif
A   talks/whole-program-compilation/trunk/fib.ps
A   talks/whole-program-compilation/trunk/fib.sml
A   talks/whole-program-compilation/trunk/fib.ssa
A   talks/whole-program-compilation/trunk/loop.gif
A   talks/whole-program-compilation/trunk/loop.ps
A   talks/whole-program-compilation/trunk/loop.sml
A   talks/whole-program-compilation/trunk/loop.ssa
A   talks/whole-program-compilation/trunk/mlton.odp
A   talks/whole-program-compilation/trunk/mlton.pdf
A   talks/whole-program-compilation/trunk/notes

----------------------------------------------------------------------

Added: talks/whole-program-compilation/trunk/Makefile
===================================================================
--- talks/whole-program-compilation/trunk/Makefile	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/Makefile	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,21 @@
+FIBDOT=fib.ssa.fib_0.cfg.dot
+
+$(FIBDOT): fib.sml
+	mlton -keep dot -keep ssa -show-types true fib.sml
+
+fib.ps: $(FIBDOT)
+	dot $(FIBDOT) >fib.ps
+
+fib.gif: fib.ps
+	convert fib.ps fib.gif
+
+LOOPDOT=loop.ssa.sum_0.cfg.dot
+
+$(LOOPDOT): loop.sml
+	mlton -drop-pass knownCase -drop-pass inline -keep dot -keep ssa -show-types true loop.sml
+
+loop.ps: $(LOOPDOT)
+	dot $(LOOPDOT) >loop.ps
+
+loop.gif: loop.ps
+	convert loop.ps loop.gif

Added: talks/whole-program-compilation/trunk/dates.sml
===================================================================
--- talks/whole-program-compilation/trunk/dates.sml	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/dates.sml	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,142 @@
+structure Main:sig end =
+struct
+
+structure Time =
+   struct
+      open Time
+
+      val hoursPerDay = 24
+      val secondsPerMinute = 60
+      val minutesPerHour = 60
+      val secondsPerHour = secondsPerMinute * minutesPerHour
+      val secondsPerDay = hoursPerDay * secondsPerHour
+      fun toDays t = IntInf.toInt (toSeconds t) div secondsPerDay
+   end
+
+structure List =
+   struct
+      open List
+
+      fun fold (l, b, f) = List.foldl f b l
+   end
+
+fun die s = raise Fail s
+
+val points =
+   [(1997, 01, 01, 0),
+    (1997, 10, 15, 16286),
+    (1998, 03, 27, 21575),
+    (1998, 08, 26, 35000),
+    (1999, 01, 20, 46217),
+    (1999, 03, 19, 48006),
+    (1999, 12, 24, 48132),
+    (2000, 09, 06, 66766),
+    (2001, 07, 17, 83722),
+    (2002, 01, 01, 102541),
+    (2003, 01, 01, 112204),
+    (2004, 01, 01, 122299),
+    (2005, 01, 01, 141917),
+    (2006, 01, 01, 143707)]
+
+val i2m =
+   let
+      open Date
+   in
+      fn 1 => Jan
+       | 2 => Feb
+       | 3 => Mar
+       | 4 => Apr
+       | 5 => May
+       | 6 => Jun
+       | 7 => Jul
+       | 8 => Aug
+       | 9 => Sep
+       | 10 => Oct
+       | 11 => Nov
+       | 12 => Dec
+       | _ => die "i2m"
+   end
+
+fun date (y, m, d) =
+   Date.date {year = y,
+              month = i2m m,
+              day = d,
+              hour = 0,
+              minute = 0,
+              second = 0,
+              offset = NONE}
+
+val points =
+   List.map
+   (fn (y, m, d, lines) =>
+    {date = date (y, m, d),
+     lines = lines})
+   points
+
+val _ =
+   List.fold
+   (tl points, hd points,
+    fn (dl2 as {date = d2, lines = l2: int}, {date = d1, lines = l1: int}) =>
+    let
+       val () =
+          if Date.year d2 = Date.year d1 then
+             ()
+          else
+             let
+                val lines = 
+                   if Date.yearDay d2 = 1 then
+                      l2
+                   else
+                      let
+                         val yearStart = date (Date.year d2, 1, 1)
+                         val t2 =
+                            Time.toDays (Time.- (Date.toTime d2,
+                                                 Date.toTime yearStart))
+                         val t1 =
+                            Time.toDays (Time.- (Date.toTime yearStart,
+                                                 Date.toTime d1))
+                      in
+                         (l1 * t1 + l2 * t2) div (t1 + t2)
+                      end
+             in
+                print (concat [Int.toString (Date.year d2),
+                               "\t", Int.toString lines, "\n"])
+             end
+    in
+       dl2
+    end)
+                      
+
+val firstDate = #date (hd points)
+val firstDate = date (1997, 1, 1)
+val firstDate = Date.toTime firstDate
+
+val points =
+   List.map
+   (fn {date, lines} =>
+    {days = Time.toDays (Time.- (Date.toTime date, firstDate)),
+     lines = lines})
+   points
+
+val () =
+   List.app
+   (fn {days, lines} =>
+    print (concat [Int.toString days, "\t", Int.toString lines, "\n"]))
+   points
+
+(*
+286     16286
+450     21575
+601     35000
+749     46217
+807     48006
+1087    48132
+1343    66766
+1657    83722
+1826    102541
+2191    112204
+2556    122299
+2922    141917
+3287    143707
+*)
+end

Added: talks/whole-program-compilation/trunk/fib.gif
===================================================================
(Binary files differ)


Property changes on: talks/whole-program-compilation/trunk/fib.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: talks/whole-program-compilation/trunk/fib.ps
===================================================================
--- talks/whole-program-compilation/trunk/fib.ps	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/fib.ps	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,608 @@
+%!PS-Adobe-2.0
+%%Creator: dot version 2.8 (Wed Jul 19 03:30:15 UTC 2006)
+%%For: (sweeks) Stephen Weeks,,,
+%%Title: fib_0 control-flow graph
+%%Pages: (atend)
+%%BoundingBox: 36 36 448 600
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+	dup 1 exch div /InvScaleFactor exch def
+	dup scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw aligned label in bounding box aligned to current point
+/alignedtext {			% width adj text
+	/text exch def
+	/adj exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			text stringwidth pop adj mul 0 rmoveto
+		} if
+		[] 0 setdash
+		text show
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+%%Page: 1 1
+%%PageBoundingBox: 36 36 448 600
+%%PageOrientation: Portrait
+gsave
+36 36 412 564 boxprim clip newpath
+36 36 translate
+0 0 1 beginpage
+1.0000 set_scale
+4 4 translate 0 rotate
+0.000 0.000 1.000 graphcolor
+0.000 0.000 1.000 graphcolor
+newpath -6 -6 moveto
+-6 562 lineto
+410 562 lineto
+410 -6 lineto
+closepath
+fill
+0.000 0.000 1.000 graphcolor
+newpath -6 -6 moveto
+-6 562 lineto
+410 562 lineto
+410 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+gsave 10 dict begin
+133 7 moveto
+(fib_0 control-flow graph)
+[4.56 3.84 6.96 6.96 6.96 3.6 6.24 6.96 6.96 3.84 4.56 6.96 3.84 4.56 4.56 3.84 6.96 10.08 3.6 6.96 4.56 6.24 6.96 6.96]
+xshow
+end grestore
+% n0
+gsave 10 dict begin
+newpath 186 556 moveto
+16 556 lineto
+16 500 lineto
+186 500 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+24 539 moveto
+(L_157 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+24 523 moveto
+(x_371: bool = 0x1 < x_370)
+[6.96 6.96 6.96 6.96 6.96 3.84 3.6 6.96 6.96 6.96 3.84 3.6 7.92 3.6 6.96 6.96 6.96 3.6 7.92 3.6 6.96 6.96 6.96 6.96 6.96]
+xshow
+24 507 moveto
+(case x_371)
+[6.24 6.24 5.52 6.24 3.6 6.96 6.96 6.96 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n6
+gsave 10 dict begin
+newpath 98 440 moveto
+0 440 lineto
+0 400 lineto
+98 400 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 423 moveto
+(L_158 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+8 407 moveto
+(return \(x_370\))
+[4.56 6.24 3.84 6.96 4.56 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n0->n6
+gsave 10 dict begin
+solid
+newpath 87 500 moveto
+80 484 71 465 63 449 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 66 448 moveto
+59 440 lineto
+60 451 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 66 448 moveto
+59 440 lineto
+60 451 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+78 469 moveto
+(false)
+[4.56 6.24 3.84 5.52 6.24]
+xshow
+end grestore
+end grestore
+% n7
+gsave 10 dict begin
+newpath 300 448 moveto
+116 448 lineto
+116 392 lineto
+300 392 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+124 431 moveto
+(L_159 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+124 415 moveto
+(x_372: word32 = x_370 - 0x1)
+[6.96 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 3.6 7.92 3.6 6.96 6.96 6.96 6.96 6.96 3.6 4.56 3.6 6.96 6.96 6.96]
+xshow
+124 399 moveto
+(fib_0 \(x_372\))
+[4.56 3.84 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n0->n7
+gsave 10 dict begin
+solid
+newpath 129 500 moveto
+143 486 159 470 174 455 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 176 458 moveto
+181 448 lineto
+171 453 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 176 458 moveto
+181 448 lineto
+171 453 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+159 469 moveto
+(true)
+[3.84 4.56 6.96 6.24]
+xshow
+end grestore
+end grestore
+% n1
+gsave 10 dict begin
+newpath 404 64 moveto
+254 64 lineto
+254 24 lineto
+404 24 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+262 47 moveto
+(L_164 \(x_376: word32\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 4.56]
+xshow
+262 31 moveto
+(return \(x_376\))
+[4.56 6.24 3.84 6.96 4.56 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n2
+gsave 10 dict begin
+newpath 352 156 moveto
+202 156 lineto
+202 116 lineto
+352 116 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+210 139 moveto
+(L_163 \(x_375: word32\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 4.56]
+xshow
+210 123 moveto
+(x_373 + x_375)
+[6.96 6.96 6.96 6.96 6.96 3.6 7.92 3.6 6.96 6.96 6.96 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n2->n1
+gsave 10 dict begin
+solid
+newpath 289 116 moveto
+296 103 305 86 313 73 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 316 74 moveto
+318 64 lineto
+310 71 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 316 74 moveto
+318 64 lineto
+310 71 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+% n3
+gsave 10 dict begin
+newpath 236 64 moveto
+112 64 lineto
+112 24 lineto
+236 24 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+120 47 moveto
+(L_162 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+120 31 moveto
+(raise \(Overflow_0\))
+[4.56 6.24 3.84 5.52 6.24 3.6 4.56 10.08 6.96 6.24 4.56 4.56 3.84 6.96 10.08 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n2->n3
+gsave 10 dict begin
+dashed
+newpath 254 116 moveto
+239 103 220 86 204 71 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 206 68 moveto
+196 64 lineto
+201 73 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 206 68 moveto
+196 64 lineto
+201 73 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+233 85 moveto
+(Overflow)
+[10.08 6.96 6.24 4.56 4.56 3.84 6.96 10.08]
+xshow
+end grestore
+end grestore
+% n4
+gsave 10 dict begin
+newpath 352 248 moveto
+202 248 lineto
+202 208 lineto
+352 208 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+210 231 moveto
+(L_161 \(x_374: word32\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 4.56]
+xshow
+210 215 moveto
+(fib_0 \(x_374\))
+[4.56 3.84 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n4->n2
+gsave 10 dict begin
+dotted
+newpath 277 208 moveto
+277 195 277 180 277 166 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 281 166 moveto
+277 156 lineto
+274 166 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 281 166 moveto
+277 156 lineto
+274 166 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+% n5
+gsave 10 dict begin
+newpath 283 340 moveto
+133 340 lineto
+133 300 lineto
+283 300 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+141 323 moveto
+(L_160 \(x_373: word32\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 4.56]
+xshow
+141 307 moveto
+(x_370 - 0x2)
+[6.96 6.96 6.96 6.96 6.96 3.6 4.56 3.6 6.96 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n5->n3
+gsave 10 dict begin
+dashed
+newpath 203 300 moveto
+199 285 195 266 193 248 curveto
+184 186 178 114 176 74 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 179 74 moveto
+175 64 lineto
+173 74 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 179 74 moveto
+175 64 lineto
+173 74 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+184 177 moveto
+(Overflow)
+[10.08 6.96 6.24 4.56 4.56 3.84 6.96 10.08]
+xshow
+end grestore
+end grestore
+% n5->n4
+gsave 10 dict begin
+solid
+newpath 223 300 moveto
+233 287 245 270 256 256 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 259 258 moveto
+262 248 lineto
+253 254 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 259 258 moveto
+262 248 lineto
+253 254 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+% n7->n5
+gsave 10 dict begin
+dotted
+newpath 208 392 moveto
+208 379 208 363 208 350 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 212 350 moveto
+208 340 lineto
+205 350 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 212 350 moveto
+208 340 lineto
+205 350 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF

Added: talks/whole-program-compilation/trunk/fib.sml
===================================================================
--- talks/whole-program-compilation/trunk/fib.sml	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/fib.sml	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,7 @@
+fun fib n =
+   if n <= 1 then
+      n
+   else
+      fib (n - 1) + fib (n - 2)
+
+val () = print (concat [Int.toString (fib 10), "\n"])

Added: talks/whole-program-compilation/trunk/fib.ssa
===================================================================
--- talks/whole-program-compilation/trunk/fib.ssa	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/fib.ssa	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,1996 @@
+MLton MLTONVERSION (built Mon Jul 17 18:22:35 2006 on eponym)
+  created this file on Fri Aug 25 09:59:43 2006.
+Do not edit this file.
+Flag settings: 
+   align: 4
+   atMLtons: (fib, @MLton, --)
+   chunk: chunk per function
+   codegen: Native
+   contifyIntoMain: false
+   debug: false
+   defaultChar: char8
+   defaultInt: int32
+   defaultReal: real64
+   defaultWord: word32
+   diag passes: []
+   drop passes: []
+   elaborate allowConstant (default): false
+   elaborate allowConstant (enabled): true
+   elaborate allowFFI (default): false
+   elaborate allowFFI (enabled): true
+   elaborate allowPrim (default): false
+   elaborate allowPrim (enabled): true
+   elaborate allowOverload (default): false
+   elaborate allowOverload (enabled): true
+   elaborate allowRebindEquals (default): false
+   elaborate allowRebindEquals (enabled): true
+   elaborate deadCode (default): false
+   elaborate deadCode (enabled): true
+   elaborate forceUsed (default): false
+   elaborate forceUsed (enabled): true
+   elaborate ffiStr (default): 
+   elaborate ffiStr (enabled): true
+   elaborate nonexhaustiveExnMatch (default): default
+   elaborate nonexhaustiveExnMatch (enabled): true
+   elaborate nonexhaustiveMatch (default): warn
+   elaborate nonexhaustiveMatch (enabled): true
+   elaborate redundantMatch (default): warn
+   elaborate redundantMatch (enabled): true
+   elaborate sequenceNonUnit (default): ignore
+   elaborate sequenceNonUnit (enabled): true
+   elaborate warnUnused (default): false
+   elaborate warnUnused (enabled): true
+   elaborate only: false
+   export header: None
+   exn history: false
+   gc check: Limit
+   indentation: 3
+   inline: NonRecursive {product = 320, small = 60}
+   inlineIntoMain: true
+   input file: fib.ssa
+   keep Machine: false
+   keep RSSA: false
+   keep SSA: true
+   keep SSA2: false
+   keep dot: true
+   keep passes: []
+   extra_: false
+   lib dir: /home/sweeks/mlton/src/build/lib
+   lib target dir: /home/sweeks/mlton/src/build/lib/self
+   loop passes: 1
+   mark cards: true
+   max function size: 10000
+   mlb path maps: [/home/sweeks/mlton/src/build/lib/mlb-path-map]
+   native commented: 0
+   native live stack: false
+   native optimize: 1
+   native move hoist: true
+   native copy prop: true
+   native copy prop cutoff: 1000
+   native cutoff: 100
+   native live transfer: 8
+   native shuffle: true
+   native ieee fp: false
+   native split: Some 20000
+   optimizationPassesSet: [<ssa2PassesSet>, <ssaPassesSet>, <sxmlPassesSet>, <xmlPassesSet>]
+   polyvariance: Some {rounds = 2, small = 30, product = 300}
+   prof passes: []
+   profile: None
+   profile branch: false
+   profile C: []
+   profile IL: ProfileSource
+   profile include/exclude: [(Seq [Star [.], Or [Seq [Seq [[<], [b], [a], [s], [i], [s], [>]]]], Star [.]], false)]
+   profile raise: false
+   profile stack: false
+   show basis: None
+   show def-use: None
+   show types: true
+   ssaPassesSet: <ssaPassesSet>
+   ssaPasses: [default]
+   ssa2PassesSet: <ssa2PassesSet>
+   ssa2Passes: [default]
+   sxmlPassesSet: <sxmlPassesSet>
+   sxmlPasses: [default]
+   target: self
+   target arch: X86
+   target OS: Linux
+   type check: false
+   verbosity: Silent
+   warn unrecognized annotation: true
+   xmlPassesSet: <xmlPassesSet>
+   xmlPasses: [default]
+   zone cut depth: 100
+
+
+Datatypes:
+lambdas_0 = Env_2 of (list_1) | Env_0 | Env_1 of (list_0 ref)
+lambdas_1 = C_0
+lambdas_2 = C_1
+lambdas_3 = Env_4 of (word32, word32, word8 array)
+	  | Env_3 of (word32, word32, word8 vector)
+list_2 = nil_6 | ::_1 of (list_2, (word32 * word32))
+Primitive.Option.t_0 = NONE_0 | SOME_0
+list_3 = nil_5 | ::_2 of (list_3, (word32 * word8 vector * word32))
+StreamIOExtra.bufferMode_0 = LINE_BUF_1 of (word32 ref, word8 array)
+			   | BLOCK_BUF_1 of (word32 ref, word8 array)
+list_4 = nil_4 | ::_0 of (list_4, word8 vector)
+IO.buffer_mode_0 = LINE_BUF_0 | BLOCK_BUF_0
+list_5 = nil_3
+       | ::_3 of (list_5,
+		  ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))))
+Primitive.Option.t_1 = SOME_1 of (word32)
+list_6 = C_2
+list_1 = nil_2 | ::_4 of (list_1, (word32 * word8 vector))
+list_7 = nil_1 | ::_5 of (list_7, list_5 ref)
+list_0 = nil_0 | ::_6 of (list_0, lambdas_0)
+bool = false | true
+exn = Io_0 of (word8 vector, word8 vector, exn)
+    | ClosedStream_0
+    | SysErr_0 of (Primitive.Option.t_1, word8 vector)
+    | Fail_0 of (word8 vector)
+    | Subscript_0
+    | Size_0
+    | Overflow_0
+    | Fail8_0 of (word8 vector)
+
+
+Globals:
+x_0: word32 = 0x1
+x_1: unit = ()
+global_0: word32 = 0x8
+global_1: word32 = 0x10
+global_2: word32 = 0x20
+global_3: word32 = 0x0
+global_4: word32 = 0x1
+global_5: word32 = 0x40000000
+global_6: list_0 = nil_0 ()
+global_7: word32 = 0x21
+global_8: bool = false ()
+global_9: lambdas_0 = Env_0 ()
+global_10: list_7 = nil_1 ()
+global_11: word32 = 0x12
+global_12: word8 vector = "xdev"
+global_13: (word32 * word8 vector) = (global_11, global_12)
+global_14: list_1 = nil_2 ()
+global_15: word32 = 0xB
+global_16: word8 vector = "wouldblock"
+global_17: (word32 * word8 vector) = (global_15, global_16)
+global_18: word32 = 0x1A
+global_19: word8 vector = "txtbsy"
+global_20: (word32 * word8 vector) = (global_18, global_19)
+global_21: word32 = 0x7
+global_22: word8 vector = "toobig"
+global_23: (word32 * word8 vector) = (global_21, global_22)
+global_24: word32 = 0x6E
+global_25: word8 vector = "timedout"
+global_26: (word32 * word8 vector) = (global_24, global_25)
+global_27: word32 = 0x3E
+global_28: word8 vector = "time"
+global_29: (word32 * word8 vector) = (global_27, global_28)
+global_30: word32 = 0x74
+global_31: word8 vector = "stale"
+global_32: (word32 * word8 vector) = (global_30, global_31)
+global_33: word32 = 0x3
+global_34: word8 vector = "srch"
+global_35: (word32 * word8 vector) = (global_33, global_34)
+global_36: word32 = 0x1D
+global_37: word8 vector = "spipe"
+global_38: (word32 * word8 vector) = (global_36, global_37)
+global_39: word32 = 0x1E
+global_40: word8 vector = "rofs"
+global_41: (word32 * word8 vector) = (global_39, global_40)
+global_42: word32 = 0x22
+global_43: word8 vector = "range"
+global_44: (word32 * word8 vector) = (global_42, global_43)
+global_45: word32 = 0x5B
+global_46: word8 vector = "prototype"
+global_47: (word32 * word8 vector) = (global_45, global_46)
+global_48: word32 = 0x5D
+global_49: word8 vector = "protonosupport"
+global_50: (word32 * word8 vector) = (global_48, global_49)
+global_51: word32 = 0x47
+global_52: word8 vector = "proto"
+global_53: (word32 * word8 vector) = (global_51, global_52)
+global_54: word8 vector = "pipe"
+global_55: (word32 * word8 vector) = (global_2, global_54)
+global_56: word8 vector = "perm"
+global_57: (word32 * word8 vector) = (global_4, global_56)
+global_58: word32 = 0x4B
+global_59: word8 vector = "overflow"
+global_60: (word32 * word8 vector) = (global_58, global_59)
+global_61: word32 = 0x5F
+global_62: word8 vector = "opnotsupp"
+global_63: (word32 * word8 vector) = (global_61, global_62)
+global_64: word32 = 0x6
+global_65: word8 vector = "nxio"
+global_66: (word32 * word8 vector) = (global_64, global_65)
+global_67: word32 = 0x19
+global_68: word8 vector = "notty"
+global_69: (word32 * word8 vector) = (global_67, global_68)
+global_70: word8 vector = "notsup"
+global_71: (word32 * word8 vector) = (global_61, global_70)
+global_72: word32 = 0x58
+global_73: word8 vector = "notsock"
+global_74: (word32 * word8 vector) = (global_72, global_73)
+global_75: word32 = 0x27
+global_76: word8 vector = "notempty"
+global_77: (word32 * word8 vector) = (global_75, global_76)
+global_78: word32 = 0x14
+global_79: word8 vector = "notdir"
+global_80: (word32 * word8 vector) = (global_78, global_79)
+global_81: word32 = 0x6B
+global_82: word8 vector = "notconn"
+global_83: (word32 * word8 vector) = (global_81, global_82)
+global_84: word32 = 0x26
+global_85: word8 vector = "nosys"
+global_86: (word32 * word8 vector) = (global_84, global_85)
+global_87: word32 = 0x3C
+global_88: word8 vector = "nostr"
+global_89: (word32 * word8 vector) = (global_87, global_88)
+global_90: word32 = 0x3F
+global_91: word8 vector = "nosr"
+global_92: (word32 * word8 vector) = (global_90, global_91)
+global_93: word32 = 0x1C
+global_94: word8 vector = "nospc"
+global_95: (word32 * word8 vector) = (global_93, global_94)
+global_96: word32 = 0x5C
+global_97: word8 vector = "noprotoopt"
+global_98: (word32 * word8 vector) = (global_96, global_97)
+global_99: word32 = 0x2A
+global_100: word8 vector = "nomsg"
+global_101: (word32 * word8 vector) = (global_99, global_100)
+global_102: word32 = 0xC
+global_103: word8 vector = "nomem"
+global_104: (word32 * word8 vector) = (global_102, global_103)
+global_105: word32 = 0x43
+global_106: word8 vector = "nolink"
+global_107: (word32 * word8 vector) = (global_105, global_106)
+global_108: word32 = 0x25
+global_109: word8 vector = "nolck"
+global_110: (word32 * word8 vector) = (global_108, global_109)
+global_111: word8 vector = "noexec"
+global_112: (word32 * word8 vector) = (global_0, global_111)
+global_113: word32 = 0x2
+global_114: word8 vector = "noent"
+global_115: (word32 * word8 vector) = (global_113, global_114)
+global_116: word32 = 0x13
+global_117: word8 vector = "nodev"
+global_118: (word32 * word8 vector) = (global_116, global_117)
+global_119: word32 = 0x3D
+global_120: word8 vector = "nodata"
+global_121: (word32 * word8 vector) = (global_119, global_120)
+global_122: word32 = 0x69
+global_123: word8 vector = "nobufs"
+global_124: (word32 * word8 vector) = (global_122, global_123)
+global_125: word32 = 0x17
+global_126: word8 vector = "nfile"
+global_127: (word32 * word8 vector) = (global_125, global_126)
+global_128: word32 = 0x65
+global_129: word8 vector = "netunreach"
+global_130: (word32 * word8 vector) = (global_128, global_129)
+global_131: word32 = 0x66
+global_132: word8 vector = "netreset"
+global_133: (word32 * word8 vector) = (global_131, global_132)
+global_134: word32 = 0x64
+global_135: word8 vector = "netdown"
+global_136: (word32 * word8 vector) = (global_134, global_135)
+global_137: word32 = 0x24
+global_138: word8 vector = "nametoolong"
+global_139: (word32 * word8 vector) = (global_137, global_138)
+global_140: word32 = 0x48
+global_141: word8 vector = "multihop"
+global_142: (word32 * word8 vector) = (global_140, global_141)
+global_143: word32 = 0x5A
+global_144: word8 vector = "msgsize"
+global_145: (word32 * word8 vector) = (global_143, global_144)
+global_146: word32 = 0x1F
+global_147: word8 vector = "mlink"
+global_148: (word32 * word8 vector) = (global_146, global_147)
+global_149: word32 = 0x18
+global_150: word8 vector = "mfile"
+global_151: (word32 * word8 vector) = (global_149, global_150)
+global_152: word32 = 0x28
+global_153: word8 vector = "loop"
+global_154: (word32 * word8 vector) = (global_152, global_153)
+global_155: word32 = 0x15
+global_156: word8 vector = "isdir"
+global_157: (word32 * word8 vector) = (global_155, global_156)
+global_158: word32 = 0x6A
+global_159: word8 vector = "isconn"
+global_160: (word32 * word8 vector) = (global_158, global_159)
+global_161: word32 = 0x5
+global_162: word8 vector = "io"
+global_163: (word32 * word8 vector) = (global_161, global_162)
+global_164: word32 = 0x16
+global_165: word8 vector = "inval"
+global_166: (word32 * word8 vector) = (global_164, global_165)
+global_167: word32 = 0x4
+global_168: word8 vector = "intr"
+global_169: (word32 * word8 vector) = (global_167, global_168)
+global_170: word32 = 0x73
+global_171: word8 vector = "inprogress"
+global_172: (word32 * word8 vector) = (global_170, global_171)
+global_173: word32 = 0x54
+global_174: word8 vector = "ilseq"
+global_175: (word32 * word8 vector) = (global_173, global_174)
+global_176: word32 = 0x2B
+global_177: word8 vector = "idrm"
+global_178: (word32 * word8 vector) = (global_176, global_177)
+global_179: word32 = 0x71
+global_180: word8 vector = "hostunreach"
+global_181: (word32 * word8 vector) = (global_179, global_180)
+global_182: word32 = 0x1B
+global_183: word8 vector = "fbig"
+global_184: (word32 * word8 vector) = (global_182, global_183)
+global_185: word32 = 0xE
+global_186: word8 vector = "fault"
+global_187: (word32 * word8 vector) = (global_185, global_186)
+global_188: word32 = 0x11
+global_189: word8 vector = "exist"
+global_190: (word32 * word8 vector) = (global_188, global_189)
+global_191: word32 = 0x7A
+global_192: word8 vector = "dquot"
+global_193: (word32 * word8 vector) = (global_191, global_192)
+global_194: word8 vector = "dom"
+global_195: (word32 * word8 vector) = (global_7, global_194)
+global_196: word32 = 0x59
+global_197: word8 vector = "destaddrreq"
+global_198: (word32 * word8 vector) = (global_196, global_197)
+global_199: word32 = 0x23
+global_200: word8 vector = "deadlk"
+global_201: (word32 * word8 vector) = (global_199, global_200)
+global_202: word32 = 0x68
+global_203: word8 vector = "connreset"
+global_204: (word32 * word8 vector) = (global_202, global_203)
+global_205: word32 = 0x6F
+global_206: word8 vector = "connrefused"
+global_207: (word32 * word8 vector) = (global_205, global_206)
+global_208: word32 = 0x67
+global_209: word8 vector = "connaborted"
+global_210: (word32 * word8 vector) = (global_208, global_209)
+global_211: word32 = 0xA
+global_212: word8 vector = "child"
+global_213: (word32 * word8 vector) = (global_211, global_212)
+global_214: word32 = 0x7D
+global_215: word8 vector = "canceled"
+global_216: (word32 * word8 vector) = (global_214, global_215)
+global_217: word8 vector = "busy"
+global_218: (word32 * word8 vector) = (global_1, global_217)
+global_219: word32 = 0x4A
+global_220: word8 vector = "badmsg"
+global_221: (word32 * word8 vector) = (global_219, global_220)
+global_222: word32 = 0x9
+global_223: word8 vector = "badf"
+global_224: (word32 * word8 vector) = (global_222, global_223)
+global_225: word32 = 0x72
+global_226: word8 vector = "already"
+global_227: (word32 * word8 vector) = (global_225, global_226)
+global_228: word8 vector = "again"
+global_229: (word32 * word8 vector) = (global_15, global_228)
+global_230: word32 = 0x61
+global_231: word8 vector = "afnosupport"
+global_232: (word32 * word8 vector) = (global_230, global_231)
+global_233: word32 = 0x63
+global_234: word8 vector = "addrnotavail"
+global_235: (word32 * word8 vector) = (global_233, global_234)
+global_236: word32 = 0x62
+global_237: word8 vector = "addrinuse"
+global_238: (word32 * word8 vector) = (global_236, global_237)
+global_239: word32 = 0xD
+global_240: word8 vector = "acces"
+global_241: (word32 * word8 vector) = (global_239, global_240)
+global_242: bool = true ()
+global_243: exn = Overflow_0 ()
+global_244: word32 = 0xFFFFFFFF
+global_245: word64 = 0x0
+global_246: list_5 = nil_3 ()
+global_247: IO.buffer_mode_0 = BLOCK_BUF_0 ()
+global_248: IO.buffer_mode_0 = LINE_BUF_0 ()
+global_249: word32 = 0x1000
+global_250: word8 vector = "<stdout>"
+global_251: word8 = 0x0
+global_252: word8 vector = "
+"
+global_253: list_4 = nil_4 ()
+global_254: list_4 = ::_0 (global_253, global_252)
+global_255: word8 vector = "output"
+global_256: exn = ClosedStream_0 ()
+global_257: word8 vector = "toplevel handler not installed"
+global_258: word8 = 0xA
+global_259: Primitive.Option.t_0 = SOME_0 ()
+global_260: Primitive.Option.t_0 = NONE_0 ()
+global_261: word8 vector = "partial write"
+global_262: word8 vector = global_261
+global_263: exn = Fail_0 (global_262)
+global_264: exn = Subscript_0 ()
+global_265: word8 vector = "Toplevel handler raised exception.
+"
+global_266: word8 vector = "unhandled exception: "
+global_267: word8 vector = "exit"
+global_268: word8 vector = global_267
+global_269: exn = Fail_0 (global_268)
+global_270: word64 = 0xFFFFFFFFFFFFFFFF
+global_271: word8 vector = "Unknown error"
+global_272: word8 vector = "flushOut"
+global_273: word8 vector = "0123456789ABCDEF"
+global_274: word8 = 0x7E
+global_275: exn = Size_0 ()
+global_276: list_3 = nil_5 ()
+global_277: word8 vector = "Sequence.Slice.concat"
+global_278: word8 vector = global_277
+global_279: exn = Fail_0 (global_278)
+global_280: word8 array = Array_array(word8) (global_3)
+global_281: word8 vector = "" failed with "
+global_282: word8 vector = " ""
+global_283: word8 vector = "Io: "
+global_284: word8 vector = "Fail: "
+global_285: word8 vector = "<UNKNOWN>"
+global_286: word8 vector = "]"
+global_287: list_4 = ::_0 (global_253, global_286)
+global_288: word8 vector = " ["
+global_289: word8 vector = "SysErr: "
+global_290: (word32 * word32) = (global_3, global_3)
+global_291: list_2 = nil_6 ()
+global_292: list_2 = ::_1 (global_291, global_290)
+global_293: (word32 * word32) = (global_3, global_4)
+global_294: list_2 = ::_1 (global_291, global_293)
+global_295: word8 vector = "Fail "
+global_296: word8 vector = "unhandled exception in Basis Library "
+global_297: word8 vector = "Thread.atomicEnd"
+global_298: word8 vector = global_297
+global_299: exn = Fail8_0 (global_298)
+global_300: word8 vector = "Overflow"
+global_301: word8 vector = "Fail8"
+global_302: word8 vector = "Size"
+global_303: word8 vector = "Subscript"
+global_304: word8 vector = "Fail"
+global_305: word8 vector = "SysErr"
+global_306: word8 vector = "ClosedStream"
+global_307: word8 vector = "Io"
+
+
+Main: main_0
+
+
+Functions:
+fun main_0 (): {raises = None, returns = Some ()} = L_0 ()
+  L_0 ()
+    global_311: word64 ref = Ref_ref(word64) (global_245)
+    global_310: word64 ref = Ref_ref(word64) (global_245)
+    global_309: word32 ref = Ref_ref(word32) (global_3)
+    global_308: word32 ref = Ref_ref(word32) (global_3)
+    loop_0 (global_292, global_4, global_5)
+  loop_0 (x_4: list_2, x_3: word32, x_2: word32)
+    x_5: bool = Word32_equal (global_3, x_2)
+    case x_5 of
+      true => L_2 | false => L_1
+  L_1 ()
+    L_3 (x_3 + global_4) Overflow => L_4 ()
+  L_3 (x_6: word32)
+    x_8: (word32 * word32) = (x_3, x_2)
+    x_7: list_2 = ::_1 (x_4, x_8)
+    loop_0 (x_7, x_6, global_3)
+  L_4 ()
+    L_5 (global_243)
+  L_2 ()
+    x_9: word32 array = Array_array(word32) (x_3)
+    case x_4 of
+      nil_6 => L_7 | ::_1 => L_6
+  L_6 (x_11: list_2, x_10: (word32 * word32))
+    x_12: word32 = #1 x_10
+    x_13: word32 = #0 x_10
+    Array_update(word32) (x_9, x_13, x_12)
+    case x_11 of
+      nil_6 => L_7 | ::_1 => L_6
+  L_7 ()
+    messagers_0: list_0 ref = Ref_ref(list_0) (global_6)
+    x_14: word8 array = Array_array(word8) (global_7)
+    loop_1 (global_3)
+  loop_1 (x_15: word32)
+    x_16: bool = WordS32_lt (x_15, global_7)
+    case x_16 of
+      true => L_9 | false => L_8
+  L_8 ()
+    x_110: bool ref = Ref_ref(bool) (global_8)
+    x_109: (word8 array * bool ref) = (x_14, x_110)
+    x_108: list_0 = Ref_deref(list_0) (messagers_0)
+    x_107: list_0 = ::_6 (x_108, global_9)
+    Ref_assign(list_0) (messagers_0, x_107)
+    x_19: list_7 ref = Ref_ref(list_7) (global_10)
+    x_106: list_1 = ::_4 (global_14, global_13)
+    x_105: list_1 = ::_4 (x_106, global_17)
+    x_104: list_1 = ::_4 (x_105, global_20)
+    x_103: list_1 = ::_4 (x_104, global_23)
+    x_102: list_1 = ::_4 (x_103, global_26)
+    x_101: list_1 = ::_4 (x_102, global_29)
+    x_100: list_1 = ::_4 (x_101, global_32)
+    x_99: list_1 = ::_4 (x_100, global_35)
+    x_98: list_1 = ::_4 (x_99, global_38)
+    x_97: list_1 = ::_4 (x_98, global_41)
+    x_96: list_1 = ::_4 (x_97, global_44)
+    x_95: list_1 = ::_4 (x_96, global_47)
+    x_94: list_1 = ::_4 (x_95, global_50)
+    x_93: list_1 = ::_4 (x_94, global_53)
+    x_92: list_1 = ::_4 (x_93, global_55)
+    x_91: list_1 = ::_4 (x_92, global_57)
+    x_90: list_1 = ::_4 (x_91, global_60)
+    x_89: list_1 = ::_4 (x_90, global_63)
+    x_88: list_1 = ::_4 (x_89, global_66)
+    x_87: list_1 = ::_4 (x_88, global_69)
+    x_86: list_1 = ::_4 (x_87, global_71)
+    x_85: list_1 = ::_4 (x_86, global_74)
+    x_84: list_1 = ::_4 (x_85, global_77)
+    x_83: list_1 = ::_4 (x_84, global_80)
+    x_82: list_1 = ::_4 (x_83, global_83)
+    x_81: list_1 = ::_4 (x_82, global_86)
+    x_80: list_1 = ::_4 (x_81, global_89)
+    x_79: list_1 = ::_4 (x_80, global_92)
+    x_78: list_1 = ::_4 (x_79, global_95)
+    x_77: list_1 = ::_4 (x_78, global_98)
+    x_76: list_1 = ::_4 (x_77, global_101)
+    x_75: list_1 = ::_4 (x_76, global_104)
+    x_74: list_1 = ::_4 (x_75, global_107)
+    x_73: list_1 = ::_4 (x_74, global_110)
+    x_72: list_1 = ::_4 (x_73, global_112)
+    x_71: list_1 = ::_4 (x_72, global_115)
+    x_70: list_1 = ::_4 (x_71, global_118)
+    x_69: list_1 = ::_4 (x_70, global_121)
+    x_68: list_1 = ::_4 (x_69, global_124)
+    x_67: list_1 = ::_4 (x_68, global_127)
+    x_66: list_1 = ::_4 (x_67, global_130)
+    x_65: list_1 = ::_4 (x_66, global_133)
+    x_64: list_1 = ::_4 (x_65, global_136)
+    x_63: list_1 = ::_4 (x_64, global_139)
+    x_62: list_1 = ::_4 (x_63, global_142)
+    x_61: list_1 = ::_4 (x_62, global_145)
+    x_60: list_1 = ::_4 (x_61, global_148)
+    x_59: list_1 = ::_4 (x_60, global_151)
+    x_58: list_1 = ::_4 (x_59, global_154)
+    x_57: list_1 = ::_4 (x_58, global_157)
+    x_56: list_1 = ::_4 (x_57, global_160)
+    x_55: list_1 = ::_4 (x_56, global_163)
+    x_54: list_1 = ::_4 (x_55, global_166)
+    x_53: list_1 = ::_4 (x_54, global_169)
+    x_52: list_1 = ::_4 (x_53, global_172)
+    x_51: list_1 = ::_4 (x_52, global_175)
+    x_50: list_1 = ::_4 (x_51, global_178)
+    x_49: list_1 = ::_4 (x_50, global_181)
+    x_48: list_1 = ::_4 (x_49, global_184)
+    x_47: list_1 = ::_4 (x_48, global_187)
+    x_46: list_1 = ::_4 (x_47, global_190)
+    x_45: list_1 = ::_4 (x_46, global_193)
+    x_44: list_1 = ::_4 (x_45, global_195)
+    x_43: list_1 = ::_4 (x_44, global_198)
+    x_42: list_1 = ::_4 (x_43, global_201)
+    x_41: list_1 = ::_4 (x_42, global_204)
+    x_40: list_1 = ::_4 (x_41, global_207)
+    x_39: list_1 = ::_4 (x_40, global_210)
+    x_38: list_1 = ::_4 (x_39, global_213)
+    x_37: list_1 = ::_4 (x_38, global_216)
+    x_36: list_1 = ::_4 (x_37, global_218)
+    x_35: list_1 = ::_4 (x_36, global_221)
+    x_34: list_1 = ::_4 (x_35, global_224)
+    x_33: list_1 = ::_4 (x_34, global_227)
+    x_32: list_1 = ::_4 (x_33, global_229)
+    x_31: list_1 = ::_4 (x_32, global_232)
+    x_30: list_1 = ::_4 (x_31, global_235)
+    x_29: list_1 = ::_4 (x_30, global_238)
+    x_28: list_1 = ::_4 (x_29, global_241)
+    x_27: list_0 = Ref_deref(list_0) (messagers_0)
+    x_26: lambdas_0 = Env_2 (x_28)
+    x_25: list_0 = ::_6 (x_27, x_26)
+    Ref_assign(list_0) (messagers_0, x_25)
+    x_24: IntInf.int = 1000000000
+    x_23: list_0 = Ref_deref(list_0) (messagers_0)
+    x_22: lambdas_0 = Env_1 (messagers_0)
+    x_21: list_0 = ::_6 (x_23, x_22)
+    Ref_assign(list_0) (messagers_0, x_21)
+    openOutstreams_0: list_5 ref = Ref_ref(list_5) (global_246)
+    x_20: list_7 = Ref_deref(list_7) (x_19)
+    x_18: list_7 = ::_5 (x_20, openOutstreams_0)
+    Ref_assign(list_7) (x_19, x_18)
+    x_17: bool = Posix_ProcEnv_isatty (global_4)
+    case x_17 of
+      true => L_11 | false => L_10
+  L_10 ()
+    L_12 (global_247)
+  L_11 ()
+    L_12 (global_248)
+  L_12 (x_111: IO.buffer_mode_0)
+    closed_0: bool ref = Ref_ref(bool) (global_8)
+    Thread_atomicBegin ()
+    x_113: word32 = Posix_FileSys_Stat_fstat (global_4)
+    x_112: bool = Word32_equal (global_244, x_113)
+    case x_112 of
+      true => L_14 | false => L_13
+  L_13 ()
+    Posix_FileSys_Stat_getDev ()
+    Posix_FileSys_Stat_getINo ()
+    x_116: word32 = Posix_FileSys_Stat_getMode ()
+    x_115: word32 = Posix_FileSys_Stat_getNLink ()
+    x_114: bool = WordS32_lt (x_115, global_3)
+    case x_114 of
+      true => L_16 | false => L_15
+  L_15 ()
+    Posix_FileSys_Stat_getUId ()
+    Posix_FileSys_Stat_getGId ()
+    Posix_FileSys_Stat_getSize ()
+    x_117: word32 = Posix_FileSys_Stat_getATime ()
+    x_118 (x_117, x_24) NonTail {cont = L_17, handler = Handle L_16}
+  L_17 ()
+    x_119: word32 = Posix_FileSys_Stat_getMTime ()
+    x_118 (x_119, x_24) NonTail {cont = L_18, handler = Handle L_16}
+  L_18 ()
+    x_120: word32 = Posix_FileSys_Stat_getCTime ()
+    x_118 (x_120, x_24) NonTail {cont = L_19, handler = Handle L_16}
+  L_19 ()
+    x_122: word32 = Thread_canHandle ()
+    x_121: bool = Word32_equal (global_3, x_122)
+    case x_121 of
+      true => L_21 | false => L_20
+  L_20 ()
+    Thread_atomicEnd ()
+    x_123: bool = Posix_FileSys_ST_isReg (x_116)
+    case x_123 of
+      true => L_23 | false => L_22
+  L_22 ()
+    L_24 (global_311)
+  L_23 ()
+    Thread_atomicBegin ()
+    x_125: word64 = Posix_IO_lseek (global_4, global_245, global_4)
+    x_124: bool = Word64_equal (global_270, x_125)
+    case x_124 of
+      true => L_26 | false => L_25
+  L_25 ()
+    x_127: word32 = Thread_canHandle ()
+    x_126: bool = Word32_equal (global_3, x_127)
+    case x_126 of
+      true => L_28 | false => L_27
+  L_27 ()
+    Thread_atomicEnd ()
+    Ref_assign(word64) (global_310, x_125)
+    L_24 (global_310)
+  L_24 (x_128: word64 ref)
+    x_131: (word64 ref * bool ref) = (x_128, closed_0)
+    x_130: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = (global_250,
+										 x_131,
+										 x_131)
+    x_129: unit ref = Ref_ref(unit) (x_1)
+    case x_111 of
+      BLOCK_BUF_0 => L_30 | LINE_BUF_0 => L_29
+  L_29 ()
+    x_132: word8 array = Array_array(word8) (global_249)
+    loop_2 (global_3)
+  loop_2 (x_133: word32)
+    x_134: bool = WordS32_lt (x_133, global_249)
+    case x_134 of
+      true => L_32 | false => L_31
+  L_31 ()
+    x_135: StreamIOExtra.bufferMode_0 = LINE_BUF_1 (global_309, x_132)
+    L_33 (x_135)
+  L_32 ()
+    Array_update(word8) (x_132, x_133, global_251)
+    x_136: word32 = Word32_add (global_4, x_133)
+    loop_2 (x_136)
+  L_30 ()
+    x_137: word8 array = Array_array(word8) (global_249)
+    loop_3 (global_3)
+  loop_3 (x_138: word32)
+    x_139: bool = WordS32_lt (x_138, global_249)
+    case x_139 of
+      true => L_35 | false => L_34
+  L_34 ()
+    x_140: StreamIOExtra.bufferMode_0 = BLOCK_BUF_1 (global_308, x_137)
+    L_33 (x_140)
+  L_33 (x_141: StreamIOExtra.bufferMode_0)
+    x_146: StreamIOExtra.bufferMode_0 ref = Ref_ref(StreamIOExtra.bufferMode_0) (x_141)
+    x_143: ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))) = (x_130,
+																								    x_146,
+																								    x_129,
+																								    x_130)
+    x_145: list_5 = Ref_deref(list_5) (openOutstreams_0)
+    x_144: list_5 = ::_3 (x_145, x_143)
+    Ref_assign(list_5) (openOutstreams_0, x_144)
+    x_142: ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))) ref = Ref_ref(((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)))) (x_143)
+    exiting_0: bool ref = Ref_ref(bool) (global_8)
+    tuple_0: (bool ref * list_7 ref * (word8 array * bool ref)) = (exiting_0,
+								   x_19,
+								   x_109)
+    fib_0 (global_211) NonTail {cont = L_36, handler = Handle L_37}
+  L_36 (x_147: word32)
+    x_148 (x_147, x_110, x_14) NonTail {cont = L_38, handler = Handle L_37}
+  L_38 (x_149: word8 vector)
+    x_150: list_4 = ::_0 (global_254, x_149)
+    concat_0 (x_150) NonTail {cont = L_39, handler = Handle L_37}
+  L_39 (x_151: word8 vector)
+    x_155: ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))) = Ref_deref(((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)))) (x_142)
+    x_153: StreamIOExtra.bufferMode_0 ref = #1 x_155
+    x_154: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = #0 x_155
+    x_152: StreamIOExtra.bufferMode_0 = Ref_deref(StreamIOExtra.bufferMode_0) (x_153)
+    case x_152 of
+      BLOCK_BUF_1 => L_41 | LINE_BUF_1 => L_40
+  L_40 (x_157: word32 ref, x_156: word8 array)
+    x_160: (word8 array * word32 ref) = (x_156, x_157)
+    x_159: word32 = Ref_deref(word32) (x_157)
+    x_158: word32 = Vector_length(word8) (x_151)
+    L_42 (x_159 + x_158) Overflow => L_43 ()
+  L_42 (newSize_0: word32)
+    x_162: word32 = Array_length(word8) (x_156)
+    x_161: bool = WordS32_lt (newSize_0, x_162)
+    case x_161 of
+      true => L_45 | false => L_44
+  L_45 ()
+    x_163: word32 = Word32_sub (x_158, global_4)
+    loop_4 (global_3, x_151, x_163) NonTail {cont = L_46, handler = Dead}
+  L_46 (x_164: Primitive.Option.t_0)
+    case x_164 of
+      NONE_0 => L_47 | SOME_0 => L_44
+  L_44 ()
+    flushBuf_0 (x_160, x_154) NonTail {cont = L_48, handler = Handle L_49}
+  L_48 ()
+    x_165: (word64 ref * bool ref) = #2 x_154
+    loop_5 (global_3)
+  loop_5 (x_166: word32)
+    x_167: bool = Word32_equal (x_166, x_158)
+    case x_167 of
+      true => L_51 | false => L_50
+  L_50 ()
+    L_52 (x_158 - x_166) Overflow => L_43 ()
+  L_52 (x_168: word32)
+    x_169: bool = WordU32_lt (x_158, x_166)
+    case x_169 of
+      true => L_54 | false => L_53
+  L_53 ()
+    x_171: word32 = Word32_sub (x_158, x_166)
+    x_170: bool = WordU32_lt (x_171, x_168)
+    case x_170 of
+      true => L_54 | false => L_55
+  L_55 ()
+    putV_0: word64 ref = #0 x_165
+    closed_1: bool ref = #1 x_165
+    x_172: bool = Ref_deref(bool) (closed_1)
+    case x_172 of
+      true => L_57 | false => L_56
+  L_56 ()
+    x_173: lambdas_3 = Env_3 (x_166, x_168, x_151)
+    x_174 (x_173) NonTail {cont = sextdFromInt32ToInt32_0, handler = Handle L_49}
+  sextdFromInt32ToInt32_0 (x_175: word32)
+    x_177: word64 = Ref_deref(word64) (putV_0)
+    x_176: word64 = WordS32_toWord64 (x_175)
+    L_58 (x_177 + x_176) Overflow => L_43 ()
+  L_58 (x_178: word64)
+    Ref_assign(word64) (putV_0, x_178)
+    x_179: bool = Word32_equal (x_175, global_3)
+    case x_179 of
+      true => L_60 | false => L_59
+  L_59 ()
+    loop_5 (x_166 + x_175) Overflow => L_43 ()
+  L_47 ()
+    x_181: (word32 * word8 vector * word32) = (x_158, x_151, global_3)
+    x_180: bool = WordU32_lt (x_162, x_159)
+    case x_180 of
+      true => L_54 | false => L_61
+  L_61 ()
+    x_183: word32 = Word32_sub (x_162, x_159)
+    x_182: bool = WordU32_lt (x_183, x_158)
+    case x_182 of
+      true => L_54 | false => L_62
+  L_62 ()
+    x_185: (word32 * word8 array * word32) = (x_158, x_156, x_159)
+    x_184: word32 = Word32_add (x_163, x_159)
+    loop_6 (x_159, x_185, x_181, x_184) NonTail {cont = L_63, handler = Dead}
+  L_63 ()
+    Ref_assign(word32) (x_157, newSize_0)
+    L_51 ()
+  L_41 (x_187: word32 ref, x_186: word8 array)
+    x_190: (word8 array * word32 ref) = (x_186, x_187)
+    x_189: word32 = Ref_deref(word32) (global_308)
+    x_188: word32 = Vector_length(word8) (x_151)
+    L_64 (x_189 + x_188) Overflow => L_43 ()
+  L_64 (newSize_1: word32)
+    x_192: word32 = Array_length(word8) (x_186)
+    x_191: bool = WordS32_lt (newSize_1, x_192)
+    case x_191 of
+      true => L_66 | false => L_65
+  L_65 ()
+    flushBuf_0 (x_190, x_154) NonTail {cont = L_67, handler = Handle L_49}
+  L_67 ()
+    x_193: (word64 ref * bool ref) = #2 x_154
+    loop_7 (global_3)
+  loop_7 (x_194: word32)
+    x_195: bool = Word32_equal (x_194, x_188)
+    case x_195 of
+      true => L_51 | false => L_68
+  L_68 ()
+    L_69 (x_188 - x_194) Overflow => L_43 ()
+  L_69 (x_196: word32)
+    x_197: bool = WordU32_lt (x_188, x_194)
+    case x_197 of
+      true => L_54 | false => L_70
+  L_70 ()
+    x_199: word32 = Word32_sub (x_188, x_194)
+    x_198: bool = WordU32_lt (x_199, x_196)
+    case x_198 of
+      true => L_54 | false => L_71
+  L_71 ()
+    putV_1: word64 ref = #0 x_193
+    closed_2: bool ref = #1 x_193
+    x_200: bool = Ref_deref(bool) (closed_2)
+    case x_200 of
+      true => L_57 | false => L_72
+  L_72 ()
+    x_201: lambdas_3 = Env_3 (x_194, x_196, x_151)
+    x_174 (x_201) NonTail {cont = sextdFromInt32ToInt32_1, handler = Handle L_49}
+  sextdFromInt32ToInt32_1 (x_202: word32)
+    x_204: word64 = Ref_deref(word64) (putV_1)
+    x_203: word64 = WordS32_toWord64 (x_202)
+    L_73 (x_204 + x_203) Overflow => L_43 ()
+  L_73 (x_205: word64)
+    Ref_assign(word64) (putV_1, x_205)
+    x_206: bool = Word32_equal (global_3, x_202)
+    case x_206 of
+      true => L_60 | false => L_74
+  L_74 ()
+    loop_7 (x_194 + x_202) Overflow => L_43 ()
+  L_60 ()
+    L_49 (global_263)
+  L_57 ()
+    L_49 (global_256)
+  L_66 ()
+    x_208: (word32 * word8 vector * word32) = (x_188, x_151, global_3)
+    x_207: bool = WordU32_lt (x_192, x_189)
+    case x_207 of
+      true => L_54 | false => L_75
+  L_75 ()
+    x_210: word32 = Word32_sub (x_192, x_189)
+    x_209: bool = WordU32_lt (x_210, x_188)
+    case x_209 of
+      true => L_54 | false => L_76
+  L_76 ()
+    x_213: (word32 * word8 array * word32) = (x_188, x_186, x_189)
+    x_212: word32 = Word32_sub (x_188, global_4)
+    x_211: word32 = Word32_add (x_212, x_189)
+    loop_8 (x_189, x_213, x_208, x_211) NonTail {cont = L_77, handler = Dead}
+  L_77 ()
+    Ref_assign(word32) (global_308, newSize_1)
+    L_51 ()
+  L_51 ()
+    x_217: ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))) = Ref_deref(((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)))) (x_142)
+    x_215: StreamIOExtra.bufferMode_0 ref = #1 x_217
+    x_216: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = #0 x_217
+    x_214: StreamIOExtra.bufferMode_0 = Ref_deref(StreamIOExtra.bufferMode_0) (x_215)
+    case x_214 of
+      BLOCK_BUF_1 => L_79 | LINE_BUF_1 => L_78
+  L_78 (x_219: word32 ref, x_218: word8 array)
+    x_220: (word8 array * word32 ref) = (x_218, x_219)
+    flushBuf_0 (x_220, x_216) NonTail {cont = L_80, handler = Handle L_37}
+  L_37 (x_221: exn)
+    L_81 (tuple_0, messagers_0, x_221)
+  L_79 (x_223: word32 ref, x_222: word8 array)
+    x_224: (word8 array * word32 ref) = (x_222, x_223)
+    flushBuf_0 (x_224, x_216) NonTail {cont = L_80, handler = Handle L_82}
+  L_82 (x_225: exn)
+    x_228: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = #3 x_217
+    x_227: word8 vector = #0 x_228
+    x_226: exn = Io_0 (x_227, global_272, x_225)
+    L_81 (tuple_0, messagers_0, x_226)
+  L_80 ()
+    x_229: bool = Ref_deref(bool) (exiting_0)
+    case x_229 of
+      true => L_84 | false => L_83
+  L_83 ()
+    Ref_assign(bool) (exiting_0, global_242)
+    x_230: list_7 = Ref_deref(list_7) (x_19)
+    case x_230 of
+      nil_1 => L_86 | ::_5 => L_85
+  L_85 (x_232: list_7, x_231: list_5 ref)
+    x_233: list_5 = Ref_deref(list_5) (x_231)
+    case x_233 of
+      nil_3 => L_88 | ::_3 => L_87
+  L_87 (x_235: list_5,
+	x_234: ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))))
+    x_237: StreamIOExtra.bufferMode_0 ref = #1 x_234
+    x_238: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = #0 x_234
+    x_236: StreamIOExtra.bufferMode_0 = Ref_deref(StreamIOExtra.bufferMode_0) (x_237)
+    case x_236 of
+      BLOCK_BUF_1 => L_90 | LINE_BUF_1 => L_89
+  L_89 (x_240: word32 ref, x_239: word8 array)
+    x_241: (word8 array * word32 ref) = (x_239, x_240)
+    flushBuf_0 (x_241, x_238) NonTail {cont = L_91, handler = Handle L_92}
+  L_92 (x_242: exn)
+    case x_232 of
+      nil_1 => L_86 | ::_5 => L_85
+  L_90 (x_244: word32 ref, x_243: word8 array)
+    x_245: (word8 array * word32 ref) = (x_243, x_244)
+    flushBuf_0 (x_245, x_238) NonTail {cont = L_91, handler = Handle L_93}
+  L_93 (x_246: exn)
+    case x_232 of
+      nil_1 => L_86 | ::_5 => L_85
+  L_91 ()
+    case x_235 of
+      nil_3 => L_88 | ::_3 => L_87
+  L_88 ()
+    case x_232 of
+      nil_1 => L_86 | ::_5 => L_85
+  L_86 ()
+    L_94 (MLton_halt (global_3))
+  L_94 ()
+    L_81 (tuple_0, messagers_0, global_269)
+  L_84 ()
+    L_81 (tuple_0, messagers_0, global_269)
+  L_54 ()
+    L_49 (global_264)
+  L_43 ()
+    L_49 (global_243)
+  L_49 (x_247: exn)
+    x_250: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = #3 x_155
+    x_249: word8 vector = #0 x_250
+    x_248: exn = Io_0 (x_249, global_255, x_247)
+    L_81 (tuple_0, messagers_0, x_248)
+  L_81 (x_253: (bool ref * list_7 ref * (word8 array * bool ref)),
+	x_252: list_0 ref,
+	x_251: exn)
+    exnMessage_0 (x_251, x_252) NonTail {cont = L_95, handler = Handle print_0}
+  L_95 (x_254: word8 vector)
+    x_256: list_4 = ::_0 (global_254, x_254)
+    x_255: list_4 = ::_0 (x_256, global_266)
+    concat_0 (x_255) NonTail {cont = print_1, handler = Handle L_96}
+  L_96 (x_257: exn)
+    print_0 ()
+  print_1 (x_258: word8 vector)
+    Stdio_print (x_258)
+    exiting_1: bool ref = #0 x_253
+    atExit_0: list_7 ref = #1 x_253
+    x_259: bool = Ref_deref(bool) (exiting_1)
+    case x_259 of
+      true => print_0 | false => L_97
+  L_97 ()
+    Ref_assign(bool) (exiting_1, global_242)
+    x_260: list_7 = Ref_deref(list_7) (atExit_0)
+    case x_260 of
+      nil_1 => L_99 | ::_5 => L_98
+  L_98 (x_262: list_7, x_261: list_5 ref)
+    x_263: list_5 = Ref_deref(list_5) (x_261)
+    case x_263 of
+      nil_3 => L_101 | ::_3 => L_100
+  L_100 (x_265: list_5,
+	 x_264: ((word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) * StreamIOExtra.bufferMode_0 ref * unit ref * (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))))
+    x_267: StreamIOExtra.bufferMode_0 ref = #1 x_264
+    x_268: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref)) = #0 x_264
+    x_266: StreamIOExtra.bufferMode_0 = Ref_deref(StreamIOExtra.bufferMode_0) (x_267)
+    case x_266 of
+      BLOCK_BUF_1 => L_103 | LINE_BUF_1 => L_102
+  L_102 (x_270: word32 ref, x_269: word8 array)
+    x_271: (word8 array * word32 ref) = (x_269, x_270)
+    flushBuf_0 (x_271, x_268) NonTail {cont = L_104, handler = Handle L_105}
+  L_105 (x_272: exn)
+    case x_262 of
+      nil_1 => L_99 | ::_5 => L_98
+  L_103 (x_274: word32 ref, x_273: word8 array)
+    x_275: (word8 array * word32 ref) = (x_273, x_274)
+    flushBuf_0 (x_275, x_268) NonTail {cont = L_104, handler = Handle L_106}
+  L_106 (x_276: exn)
+    case x_262 of
+      nil_1 => L_99 | ::_5 => L_98
+  L_104 ()
+    case x_265 of
+      nil_3 => L_101 | ::_3 => L_100
+  L_101 ()
+    case x_262 of
+      nil_1 => L_99 | ::_5 => L_98
+  L_99 ()
+    print_0 (MLton_halt (global_4))
+  print_0 ()
+    Stdio_print (global_265)
+    L_107 (MLton_halt (global_4))
+  L_35 ()
+    Array_update(word8) (x_137, x_138, global_251)
+    x_277: word32 = Word32_add (global_4, x_138)
+    loop_3 (x_277)
+  L_28 ()
+    L_5 (global_299)
+  L_26 ()
+    x_280: word32 = Posix_Error_getErrno ()
+    x_279: word32 = Thread_canHandle ()
+    x_278: bool = Word32_equal (global_3, x_279)
+    case x_278 of
+      true => L_109 | false => L_108
+  L_108 ()
+    Thread_atomicEnd ()
+    x_282: word32 = Posix_Error_strError (x_280)
+    x_281: bool = Word32_equal (global_3, x_282)
+    case x_281 of
+      true => L_111 | false => L_110
+  L_110 ()
+    loop_9 (global_3)
+  loop_9 (x_283: word32)
+    x_284: word8 = Pointer_getWord8 (x_282, x_283)
+    case x_284 of
+      0x0 => L_112 | _ => L_113
+  L_113 ()
+    x_285: word32 = Word32_add (x_283, global_4)
+    loop_9 (x_285)
+  L_112 ()
+    x_286: bool = WordS32_lt (x_283, global_3)
+    case x_286 of
+      true => L_115 | false => L_114
+  L_114 ()
+    x_287: word8 array = Array_array(word8) (x_283)
+    loop_10 (global_3)
+  loop_10 (x_288: word32)
+    x_289: bool = WordS32_lt (x_288, x_283)
+    case x_289 of
+      true => L_117 | false => L_116
+  L_116 ()
+    x_290: word8 vector = Array_toVector(word8) (x_287)
+    L_118 (x_290)
+  L_117 ()
+    x_292: word8 = Pointer_getWord8 (x_282, x_288)
+    x_291: bool = WordU32_lt (x_288, x_283)
+    case x_291 of
+      true => L_120 | false => L_119
+  L_119 ()
+    L_5 (global_264)
+  L_120 ()
+    Array_update(word8) (x_287, x_288, x_292)
+    x_293: word32 = Word32_add (x_288, x_0)
+    loop_10 (x_293)
+  L_115 ()
+    L_5 (global_275)
+  L_111 ()
+    L_118 (global_271)
+  L_118 (x_294: word8 vector)
+    x_296: Primitive.Option.t_1 = SOME_1 (x_280)
+    x_295: exn = SysErr_0 (x_296, x_294)
+    L_5 (x_295)
+  L_109 ()
+    L_5 (global_299)
+  L_21 ()
+    L_5 (global_299)
+  L_16 ()
+    x_298: word32 = Thread_canHandle ()
+    x_297: bool = Word32_equal (global_3, x_298)
+    case x_297 of
+      true => L_122 | false => L_121
+  L_121 ()
+    Thread_atomicEnd ()
+    L_5 (global_243)
+  L_122 ()
+    L_5 (global_299)
+  L_14 ()
+    x_301: word32 = Posix_Error_getErrno ()
+    x_300: word32 = Thread_canHandle ()
+    x_299: bool = Word32_equal (global_3, x_300)
+    case x_299 of
+      true => L_124 | false => L_123
+  L_123 ()
+    Thread_atomicEnd ()
+    x_303: word32 = Posix_Error_strError (x_301)
+    x_302: bool = Word32_equal (global_3, x_303)
+    case x_302 of
+      true => L_126 | false => L_125
+  L_125 ()
+    loop_11 (global_3)
+  loop_11 (x_304: word32)
+    x_305: word8 = Pointer_getWord8 (x_303, x_304)
+    case x_305 of
+      0x0 => L_127 | _ => L_128
+  L_128 ()
+    x_306: word32 = Word32_add (global_4, x_304)
+    loop_11 (x_306)
+  L_127 ()
+    x_307: bool = WordS32_lt (x_304, global_3)
+    case x_307 of
+      true => L_130 | false => L_129
+  L_129 ()
+    x_308: word8 array = Array_array(word8) (x_304)
+    loop_12 (global_3)
+  loop_12 (x_309: word32)
+    x_310: bool = WordS32_lt (x_309, x_304)
+    case x_310 of
+      true => L_132 | false => L_131
+  L_131 ()
+    x_311: word8 vector = Array_toVector(word8) (x_308)
+    L_133 (x_311)
+  L_132 ()
+    x_313: word8 = Pointer_getWord8 (x_303, x_309)
+    x_312: bool = WordU32_lt (x_309, x_304)
+    case x_312 of
+      true => L_135 | false => L_134
+  L_134 ()
+    L_5 (global_264)
+  L_135 ()
+    Array_update(word8) (x_308, x_309, x_313)
+    x_314: word32 = Word32_add (x_309, x_0)
+    loop_12 (x_314)
+  L_130 ()
+    L_5 (global_275)
+  L_126 ()
+    L_133 (global_271)
+  L_133 (x_315: word8 vector)
+    x_317: Primitive.Option.t_1 = SOME_1 (x_301)
+    x_316: exn = SysErr_0 (x_317, x_315)
+    L_5 (x_316)
+  L_124 ()
+    L_5 (global_299)
+  L_5 (x_318: exn)
+    Stdio_print (global_266)
+    case x_318 of
+      Fail8_0 => L_143
+    | Io_0 => L_142
+    | ClosedStream_0 => L_141
+    | SysErr_0 => L_140
+    | Fail_0 => L_139
+    | Subscript_0 => L_138
+    | Size_0 => L_137
+    | Overflow_0 => L_136
+  L_136 ()
+    print_2 (global_300)
+  L_137 ()
+    print_2 (global_302)
+  L_138 ()
+    print_2 (global_303)
+  L_139 (x_319: word8 vector)
+    print_2 (global_304)
+  L_140 (x_321: Primitive.Option.t_1, x_320: word8 vector)
+    print_2 (global_305)
+  L_141 ()
+    print_2 (global_306)
+  L_142 (x_324: word8 vector, x_323: word8 vector, x_322: exn)
+    print_2 (global_307)
+  print_2 (x_325: word8 vector)
+    Stdio_print (x_325)
+    print_3 ()
+  L_143 (x_326: word8 vector)
+    Stdio_print (global_295)
+    Stdio_print (x_326)
+    print_3 ()
+  print_3 ()
+    Stdio_print (global_252)
+    x_327: word32 = Vector_length(word8) (global_296)
+    L_144 (x_327 - global_4) Overflow => L_107 ()
+  L_144 (x_328: word32)
+    x_330: word8 = Vector_sub(word8) (global_296, x_328)
+    x_329: bool = Word8_equal (x_330, global_251)
+    case x_329 of
+      true => L_145 | false => L_107
+  L_145 ()
+    MLton_bug (global_296)
+    return ()
+  L_107 ()
+    MLton_bug (global_257)
+    return ()
+  L_9 ()
+    Array_update(word8) (x_14, x_15, global_251)
+    x_331: word32 = Word32_add (global_4, x_15)
+    loop_1 (x_331)
+fun loop_6 (x_335: word32,
+	    x_334: (word32 * word8 array * word32),
+	    x_333: (word32 * word8 vector * word32),
+	    x_332: word32): {raises = None, returns = Some ()} = L_146 ()
+  L_146 ()
+    loop_13 (x_335)
+  loop_13 (x_336: word32)
+    x_337: bool = WordS32_lt (x_332, x_336)
+    case x_337 of
+      true => L_148 | false => L_147
+  L_147 ()
+    x_346: word32 = Word32_add (global_4, x_336)
+    x_342: word32 = Word32_sub (x_336, x_335)
+    x_345: word32 = #2 x_333
+    x_344: word8 vector = #1 x_333
+    x_343: word32 = Word32_add (x_342, x_345)
+    x_338: word8 = Vector_sub(word8) (x_344, x_343)
+    x_341: word32 = #2 x_334
+    x_340: word8 array = #1 x_334
+    x_339: word32 = Word32_add (x_342, x_341)
+    Array_update(word8) (x_340, x_339, x_338)
+    loop_13 (x_346)
+  L_148 ()
+    return ()
+fun loop_4 (x_349: word32, x_348: word8 vector, x_347: word32): {raises = None,
+								 returns = Some (Primitive.Option.t_0)} = L_149 ()
+  L_149 ()
+    loop_14 (x_349)
+  loop_14 (x_350: word32)
+    x_351: bool = WordS32_lt (x_347, x_350)
+    case x_351 of
+      true => L_151 | false => L_150
+  L_150 ()
+    x_353: word8 = Vector_sub(word8) (x_348, x_350)
+    x_352: bool = Word8_equal (global_258, x_353)
+    case x_352 of
+      true => L_153 | false => L_152
+  L_152 ()
+    x_354: word32 = Word32_add (global_4, x_350)
+    loop_14 (x_354)
+  L_153 ()
+    return global_259
+  L_151 ()
+    return global_260
+fun loop_8 (x_358: word32,
+	    x_357: (word32 * word8 array * word32),
+	    x_356: (word32 * word8 vector * word32),
+	    x_355: word32): {raises = None, returns = Some ()} = L_154 ()
+  L_154 ()
+    loop_15 (x_358)
+  loop_15 (x_359: word32)
+    x_360: bool = WordS32_lt (x_355, x_359)
+    case x_360 of
+      true => L_156 | false => L_155
+  L_155 ()
+    x_369: word32 = Word32_add (global_4, x_359)
+    x_365: word32 = Word32_sub (x_359, x_358)
+    x_368: word32 = #2 x_356
+    x_367: word8 vector = #1 x_356
+    x_366: word32 = Word32_add (x_365, x_368)
+    x_361: word8 = Vector_sub(word8) (x_367, x_366)
+    x_364: word32 = #2 x_357
+    x_363: word8 array = #1 x_357
+    x_362: word32 = Word32_add (x_365, x_364)
+    Array_update(word8) (x_363, x_362, x_361)
+    loop_15 (x_369)
+  L_156 ()
+    return ()
+fun fib_0 (x_370: word32): {raises = Some (exn), returns = Some (word32)} = L_157 ()
+  L_157 ()
+    x_371: bool = WordS32_lt (global_4, x_370)
+    case x_371 of
+      true => L_159 | false => L_158
+  L_158 ()
+    return x_370
+  L_159 ()
+    x_372: word32 = Word32_sub (x_370, x_0)
+    fib_0 (x_372) NonTail {cont = L_160, handler = Caller}
+  L_160 (x_373: word32)
+    L_161 (x_370 - global_113) Overflow => L_162 ()
+  L_161 (x_374: word32)
+    fib_0 (x_374) NonTail {cont = L_163, handler = Caller}
+  L_163 (x_375: word32)
+    L_164 (x_373 + x_375) Overflow => L_162 ()
+  L_164 (x_376: word32)
+    return x_376
+  L_162 ()
+    raise (global_243)
+fun flushBuf_0 (x_378: (word8 array * word32 ref),
+		x_377: (word8 vector * (word64 ref * bool ref) * (word64 ref * bool ref))): {raises = Some (exn),
+											     returns = Some ()} = L_165 ()
+  L_165 ()
+    x_383: word32 ref = #1 x_378
+    x_382: word8 array = #0 x_378
+    x_380: word32 = Ref_deref(word32) (x_383)
+    Ref_assign(word32) (x_383, global_3)
+    x_381: word32 = Array_length(word8) (x_382)
+    x_379: bool = WordU32_lt (x_381, x_380)
+    case x_379 of
+      true => L_167 | false => L_166
+  L_166 ()
+    x_384: (word64 ref * bool ref) = #1 x_377
+    loop_16 (global_3)
+  loop_16 (x_385: word32)
+    x_386: bool = Word32_equal (x_385, x_380)
+    case x_386 of
+      true => L_169 | false => L_168
+  L_168 ()
+    L_170 (x_380 - x_385) Overflow => L_171 ()
+  L_170 (x_387: word32)
+    x_388: bool = WordU32_lt (x_381, x_385)
+    case x_388 of
+      true => L_167 | false => L_172
+  L_172 ()
+    x_390: word32 = Word32_sub (x_381, x_385)
+    x_389: bool = WordU32_lt (x_390, x_387)
+    case x_389 of
+      true => L_167 | false => L_173
+  L_173 ()
+    putA_0: word64 ref = #0 x_384
+    closed_3: bool ref = #1 x_384
+    x_391: bool = Ref_deref(bool) (closed_3)
+    case x_391 of
+      true => L_175 | false => L_174
+  L_174 ()
+    x_392: lambdas_3 = Env_4 (x_385, x_387, x_382)
+    x_174 (x_392) NonTail {cont = sextdFromInt32ToInt32_2, handler = Caller}
+  sextdFromInt32ToInt32_2 (x_393: word32)
+    x_395: word64 = Ref_deref(word64) (putA_0)
+    x_394: word64 = WordS32_toWord64 (x_393)
+    L_176 (x_395 + x_394) Overflow => L_171 ()
+  L_176 (x_396: word64)
+    Ref_assign(word64) (putA_0, x_396)
+    x_397: bool = Word32_equal (x_393, global_3)
+    case x_397 of
+      true => L_178 | false => L_177
+  L_177 ()
+    loop_16 (x_385 + x_393) Overflow => L_171 ()
+  L_178 ()
+    raise (global_263)
+  L_175 ()
+    raise (global_256)
+  L_171 ()
+    raise (global_243)
+  L_169 ()
+    return ()
+  L_167 ()
+    raise (global_264)
+fun x_118 (x_398: word32, env_0: IntInf.int): {raises = Some (),
+					       returns = Some ()} = L_179 ()
+  L_179 ()
+    x_400: word32 = WordS32_rshift (x_398, global_39)
+    x_399: bool = Word32_equal (global_3, x_400)
+    case x_399 of
+      true => L_181 | false => L_180
+  L_180 ()
+    x_401: bool = Word32_equal (global_244, x_400)
+    case x_401 of
+      true => L_181 | false => L_182
+  L_182 ()
+    x_402: bool = WordS32_lt (x_398, global_3)
+    case x_402 of
+      true => L_184 | false => L_183
+  L_183 ()
+    loop_17 (global_292, global_4, x_398)
+  L_184 ()
+    x_403: word32 = Word32_neg (x_398)
+    loop_17 (global_294, global_4, x_403)
+  loop_17 (x_406: list_2, x_405: word32, x_404: word32)
+    x_407: bool = Word32_equal (global_3, x_404)
+    case x_407 of
+      true => L_186 | false => L_185
+  L_185 ()
+    L_187 (x_405 + global_4) Overflow => L_188 ()
+  L_187 (x_408: word32)
+    x_410: (word32 * word32) = (x_405, x_404)
+    x_409: list_2 = ::_1 (x_406, x_410)
+    loop_17 (x_409, x_408, global_3)
+  L_188 ()
+    raise ()
+  L_186 ()
+    x_411: word32 array = Array_array(word32) (x_405)
+    case x_406 of
+      nil_6 => L_190 | ::_1 => L_189
+  L_189 (x_413: list_2, x_412: (word32 * word32))
+    x_414: word32 = #1 x_412
+    x_415: word32 = #0 x_412
+    Array_update(word32) (x_411, x_415, x_414)
+    case x_413 of
+      nil_6 => L_190 | ::_1 => L_189
+  L_190 ()
+    x_417: word32 vector = Array_toVector(word32) (x_411)
+    x_416: IntInf.int = WordVector_toIntInf (x_417)
+    L_191 (x_416)
+  L_181 ()
+    x_420: word32 = Word32_lshift (x_398, global_4)
+    x_419: word32 = Word32_orb (global_4, x_420)
+    x_418: IntInf.int = Word_toIntInf (x_419)
+    L_191 (x_418)
+  L_191 (x_421: IntInf.int)
+    x_425: word32 = IntInf_toWord (x_421)
+    x_426: word32 = IntInf_toWord (env_0)
+    x_424: word32 = Word32_andb (x_426, x_425)
+    x_423: word32 = Word32_andb (global_4, x_424)
+    x_422: bool = Word32_equal (global_3, x_423)
+    case x_422 of
+      true => numLimbs_0 | false => L_192
+  L_192 ()
+    x_428: word32 = WordS32_rshift (x_425, global_4)
+    x_427: word32 = WordS32_rshift (x_426, global_4)
+    zextdFromInt32ToWord32_0 (x_428 * x_427) Overflow => numLimbs_0 ()
+  zextdFromInt32ToWord32_0 (x_429: word32)
+    x_433: word32 = Word32_lshift (x_429, global_4)
+    x_432: word32 = Word32_orb (global_4, x_433)
+    x_431: word32 = Word32_xorb (x_429, x_432)
+    x_430: bool = WordS32_lt (x_431, global_3)
+    case x_430 of
+      true => numLimbs_0 | false => L_193
+  L_193 ()
+    return ()
+  numLimbs_0 ()
+    x_435: word32 = Word32_andb (global_4, x_425)
+    x_434: bool = Word32_equal (x_435, global_3)
+    case x_434 of
+      true => L_195 | false => L_194
+  L_194 ()
+    L_196 (global_4)
+  L_195 ()
+    x_437: word32 vector = IntInf_toVector (x_421)
+    x_436: word32 = Vector_length(word32) (x_437)
+    L_196 (x_436 - global_4) Overflow => L_197 ()
+  L_196 (x_438: word32)
+    x_440: word32 = Word32_andb (global_4, x_426)
+    x_439: bool = Word32_equal (global_3, x_440)
+    case x_439 of
+      true => L_199 | false => L_198
+  L_198 ()
+    L_200 (global_4)
+  L_199 ()
+    x_442: word32 vector = IntInf_toVector (env_0)
+    x_441: word32 = Vector_length(word32) (x_442)
+    L_200 (x_441 - global_4) Overflow => L_201 ()
+  L_200 (x_443: word32)
+    L_202 (x_438 + x_443) Overflow => L_203 ()
+  L_202 (x_444: word32)
+    return ()
+  L_203 ()
+    raise ()
+  L_201 ()
+    raise ()
+  L_197 ()
+    raise ()
+fun x_174 (x_445: lambdas_3): {raises = Some (exn), returns = Some (word32)} = L_204 ()
+  L_204 ()
+    Thread_atomicBegin ()
+    case x_445 of
+      Env_4 => x_447 | Env_3 => x_446
+  x_446 (x_450: word32, x_449: word32, x_448: word8 vector)
+    x_451: word32 = Posix_IO_writeChar8Vec (global_4, x_448, x_450, x_449)
+    x_452 (x_451)
+  x_447 (x_455: word32, x_454: word32, x_453: word8 array)
+    x_456: word32 = Posix_IO_writeChar8Arr (global_4, x_453, x_455, x_454)
+    x_452 (x_456)
+  x_452 (x_457: word32)
+    x_458: bool = Word32_equal (x_457, global_244)
+    case x_458 of
+      true => L_206 | false => L_205
+  L_205 ()
+    x_460: word32 = Thread_canHandle ()
+    x_459: bool = Word32_equal (global_3, x_460)
+    case x_459 of
+      true => L_208 | false => L_207
+  L_207 ()
+    Thread_atomicEnd ()
+    return x_457
+  L_206 ()
+    x_463: word32 = Posix_Error_getErrno ()
+    x_462: word32 = Thread_canHandle ()
+    x_461: bool = Word32_equal (global_3, x_462)
+    case x_461 of
+      true => L_208 | false => L_209
+  L_209 ()
+    Thread_atomicEnd ()
+    errUnblocked_0 (x_463)
+  errUnblocked_0 (x_464: word32)
+    x_465: bool = Word32_equal (global_167, x_464)
+    case x_465 of
+      true => L_211 | false => L_210
+  L_210 ()
+    x_467: word32 = Posix_Error_strError (x_464)
+    x_466: bool = Word32_equal (global_3, x_467)
+    case x_466 of
+      true => L_213 | false => L_212
+  L_212 ()
+    loop_18 (global_3)
+  loop_18 (x_468: word32)
+    x_469: word8 = Pointer_getWord8 (x_467, x_468)
+    case x_469 of
+      0x0 => L_214 | _ => L_215
+  L_215 ()
+    x_470: word32 = Word32_add (global_4, x_468)
+    loop_18 (x_470)
+  L_214 ()
+    x_471: bool = WordS32_lt (x_468, global_3)
+    case x_471 of
+      true => L_217 | false => L_216
+  L_216 ()
+    x_472: word8 array = Array_array(word8) (x_468)
+    loop_19 (global_3)
+  loop_19 (x_473: word32)
+    x_474: bool = WordS32_lt (x_473, x_468)
+    case x_474 of
+      true => L_219 | false => L_218
+  L_218 ()
+    x_475: word8 vector = Array_toVector(word8) (x_472)
+    L_220 (x_475)
+  L_219 ()
+    x_477: word8 = Pointer_getWord8 (x_467, x_473)
+    x_476: bool = WordU32_lt (x_473, x_468)
+    case x_476 of
+      true => L_222 | false => L_221
+  L_222 ()
+    Array_update(word8) (x_472, x_473, x_477)
+    x_478: word32 = Word32_add (x_473, x_0)
+    loop_19 (x_478)
+  L_213 ()
+    L_220 (global_271)
+  L_220 (x_479: word8 vector)
+    x_481: Primitive.Option.t_1 = SOME_1 (x_464)
+    x_480: exn = SysErr_0 (x_481, x_479)
+    raise (x_480)
+  L_211 ()
+    x_483: word32 = Thread_canHandle ()
+    x_482: bool = Word32_equal (global_3, x_483)
+    case x_482 of
+      true => L_224 | false => L_223
+  L_223 ()
+    Thread_atomicBegin ()
+    case x_445 of
+      Env_4 => x_485 | Env_3 => x_484
+  x_484 (x_488: word32, x_487: word32, x_486: word8 vector)
+    x_489: word32 = Posix_IO_writeChar8Vec (global_4, x_486, x_488, x_487)
+    x_490 (x_489)
+  x_485 (x_493: word32, x_492: word32, x_491: word8 array)
+    x_494: word32 = Posix_IO_writeChar8Arr (global_4, x_491, x_493, x_492)
+    x_490 (x_494)
+  x_490 (x_495: word32)
+    x_496: bool = Word32_equal (x_495, global_244)
+    case x_496 of
+      true => L_226 | false => L_225
+  L_225 ()
+    x_498: word32 = Thread_canHandle ()
+    x_497: bool = Word32_equal (global_3, x_498)
+    case x_497 of
+      true => L_208 | false => L_227
+  L_227 ()
+    Thread_atomicEnd ()
+    return x_495
+  L_226 ()
+    x_501: word32 = Posix_Error_getErrno ()
+    x_500: word32 = Thread_canHandle ()
+    x_499: bool = Word32_equal (global_3, x_500)
+    case x_499 of
+      true => L_208 | false => L_228
+  L_228 ()
+    Thread_atomicEnd ()
+    x_503: word32 = Posix_Error_strError (x_501)
+    x_502: bool = Word32_equal (global_3, x_503)
+    case x_502 of
+      true => L_230 | false => L_229
+  L_229 ()
+    loop_20 (global_3)
+  loop_20 (x_504: word32)
+    x_505: word8 = Pointer_getWord8 (x_503, x_504)
+    case x_505 of
+      0x0 => L_231 | _ => L_232
+  L_232 ()
+    x_506: word32 = Word32_add (global_4, x_504)
+    loop_20 (x_506)
+  L_231 ()
+    x_507: bool = WordS32_lt (x_504, global_3)
+    case x_507 of
+      true => L_217 | false => L_233
+  L_233 ()
+    x_508: word8 array = Array_array(word8) (x_504)
+    loop_21 (global_3)
+  loop_21 (x_509: word32)
+    x_510: bool = WordS32_lt (x_509, x_504)
+    case x_510 of
+      true => L_235 | false => L_234
+  L_234 ()
+    x_511: word8 vector = Array_toVector(word8) (x_508)
+    L_236 (x_511)
+  L_235 ()
+    x_513: word8 = Pointer_getWord8 (x_503, x_509)
+    x_512: bool = WordU32_lt (x_509, x_504)
+    case x_512 of
+      true => L_237 | false => L_221
+  L_221 ()
+    raise (global_264)
+  L_237 ()
+    Array_update(word8) (x_508, x_509, x_513)
+    x_514: word32 = Word32_add (x_509, x_0)
+    loop_21 (x_514)
+  L_217 ()
+    raise (global_275)
+  L_230 ()
+    L_236 (global_271)
+  L_236 (x_515: word8 vector)
+    x_517: Primitive.Option.t_1 = SOME_1 (x_501)
+    x_516: exn = SysErr_0 (x_517, x_515)
+    raise (x_516)
+  L_224 ()
+    Thread_atomicBegin ()
+    case x_445 of
+      Env_4 => x_519 | Env_3 => x_518
+  x_518 (x_522: word32, x_521: word32, x_520: word8 vector)
+    x_523: word32 = Posix_IO_writeChar8Vec (global_4, x_520, x_522, x_521)
+    x_524 (x_523)
+  x_519 (x_527: word32, x_526: word32, x_525: word8 array)
+    x_528: word32 = Posix_IO_writeChar8Arr (global_4, x_525, x_527, x_526)
+    x_524 (x_528)
+  x_524 (x_529: word32)
+    x_530: bool = Word32_equal (x_529, global_244)
+    case x_530 of
+      true => L_239 | false => L_238
+  L_238 ()
+    x_532: word32 = Thread_canHandle ()
+    x_531: bool = Word32_equal (global_3, x_532)
+    case x_531 of
+      true => L_208 | false => L_240
+  L_240 ()
+    Thread_atomicEnd ()
+    return x_529
+  L_239 ()
+    x_535: word32 = Posix_Error_getErrno ()
+    x_534: word32 = Thread_canHandle ()
+    x_533: bool = Word32_equal (x_534, global_3)
+    case x_533 of
+      true => L_208 | false => L_241
+  L_241 ()
+    Thread_atomicEnd ()
+    errUnblocked_0 (x_535)
+  L_208 ()
+    raise (global_299)
+fun x_148 (x_538: word32, x_537: bool ref, x_536: word8 array): {raises = Some (exn),
+								 returns = Some (word8 vector)} = L_242 ()
+  L_242 ()
+    Thread_atomicBegin ()
+    x_539: bool = Ref_deref(bool) (x_537)
+    case x_539 of
+      true => L_244 | false => L_243
+  L_243 ()
+    Ref_assign(bool) (x_537, global_242)
+    x_541: word32 = Thread_canHandle ()
+    x_540: bool = Word32_equal (global_3, x_541)
+    case x_540 of
+      true => L_246 | false => L_245
+  L_245 ()
+    Thread_atomicEnd ()
+    L_247 (x_536)
+  L_244 ()
+    x_543: word32 = Thread_canHandle ()
+    x_542: bool = Word32_equal (global_3, x_543)
+    case x_542 of
+      true => L_246 | false => L_248
+  L_248 ()
+    Thread_atomicEnd ()
+    x_544: word8 array = Array_array(word8) (global_7)
+    loop_22 (global_3)
+  loop_22 (x_545: word32)
+    x_546: bool = WordS32_lt (x_545, global_7)
+    case x_546 of
+      true => L_250 | false => L_249
+  L_249 ()
+    L_247 (x_544)
+  L_247 (x_547: word8 array)
+    x_548: bool = WordS32_lt (x_538, global_3)
+    case x_548 of
+      true => L_252 | false => L_251
+  L_251 ()
+    x_549: word32 = Word32_neg (x_538)
+    loop_23 (global_2, x_549)
+  L_252 ()
+    loop_23 (global_2, x_538)
+  loop_23 (x_551: word32, x_550: word32)
+    x_555: word32 = WordS32_rem (x_550, global_211)
+    x_554: word32 = Word32_neg (x_555)
+    x_553: word32 = Vector_length(word8) (global_273)
+    x_552: bool = WordU32_lt (x_554, x_553)
+    case x_552 of
+      true => L_254 | false => L_253
+  L_254 ()
+    x_558: word8 = Vector_sub(word8) (global_273, x_554)
+    x_557: word32 = Array_length(word8) (x_547)
+    x_556: bool = WordU32_lt (x_551, x_557)
+    case x_556 of
+      true => L_255 | false => L_253
+  L_255 ()
+    Array_update(word8) (x_547, x_551, x_558)
+    x_560: word32 = WordS32_quot (x_550, global_211)
+    x_559: bool = Word32_equal (global_3, x_560)
+    case x_559 of
+      true => L_257 | false => L_256
+  L_256 ()
+    L_258 (x_551 - global_4) Overflow => L_259 ()
+  L_258 (x_561: word32)
+    loop_23 (x_561, x_560)
+  L_257 ()
+    case x_548 of
+      true => L_261 | false => L_260
+  L_260 ()
+    L_262 (x_551)
+  L_261 ()
+    L_263 (x_551 - global_4) Overflow => L_259 ()
+  L_263 (i_0: word32)
+    x_562: bool = WordU32_lt (i_0, x_557)
+    case x_562 of
+      true => L_264 | false => L_253
+  L_264 ()
+    Array_update(word8) (x_547, i_0, global_274)
+    L_262 (i_0)
+  L_262 (x_563: word32)
+    x_564: bool = WordU32_lt (x_557, x_563)
+    case x_564 of
+      true => L_253 | false => L_265
+  L_265 ()
+    x_566: word32 = Word32_sub (x_557, x_563)
+    x_565: bool = Word32_equal (global_3, x_566)
+    case x_565 of
+      true => L_267 | false => L_266
+  L_266 ()
+    x_567: bool = WordS32_lt (x_566, global_3)
+    case x_567 of
+      true => L_269 | false => L_268
+  L_268 ()
+    x_568: word8 array = Array_array(word8) (x_566)
+    L_270 (x_568)
+  L_269 ()
+    case x_539 of
+      true => L_272 | false => L_271
+  L_271 ()
+    L_273 (global_275)
+  L_272 ()
+    raise (global_275)
+  L_267 ()
+    L_270 (global_280)
+  L_270 (a_0: word8 array)
+    loop_24 (global_3)
+  loop_24 (x_569: word32)
+    x_570: bool = WordS32_lt (x_569, x_566)
+    case x_570 of
+      true => L_275 | false => L_274
+  L_274 ()
+    x_571: word8 vector = Array_toVector(word8) (a_0)
+    case x_539 of
+      true => L_277 | false => L_276
+  L_276 ()
+    Ref_assign(bool) (x_537, global_8)
+    L_277 ()
+  L_277 ()
+    return x_571
+  L_275 ()
+    x_574: word32 = Word32_add (x_569, x_563)
+    x_573: word8 = Array_sub(word8) (x_547, x_574)
+    Array_update(word8) (a_0, x_569, x_573)
+    x_572: word32 = Word32_add (global_4, x_569)
+    loop_24 (x_572)
+  L_253 ()
+    case x_539 of
+      true => L_279 | false => L_278
+  L_278 ()
+    L_273 (global_264)
+  L_279 ()
+    raise (global_264)
+  L_259 ()
+    case x_539 of
+      true => L_281 | false => L_280
+  L_280 ()
+    L_273 (global_243)
+  L_273 (x_575: exn)
+    Ref_assign(bool) (x_537, global_8)
+    raise (x_575)
+  L_281 ()
+    raise (global_243)
+  L_250 ()
+    Array_update(word8) (x_544, x_545, global_251)
+    x_576: word32 = Word32_add (global_4, x_545)
+    loop_22 (x_576)
+  L_246 ()
+    raise (global_299)
+fun concat_0 (x_577: list_4): {raises = Some (exn),
+			       returns = Some (word8 vector)} = L_282 ()
+  L_282 ()
+    case x_577 of
+      nil_4 => L_284 | ::_0 => L_283
+  L_283 (x_579: list_4, x_578: word8 vector)
+    L_285 (x_579, x_578, global_276)
+  L_285 (x_582: list_4, x_581: word8 vector, x_580: list_3)
+    x_585: word32 = Vector_length(word8) (x_581)
+    x_584: (word32 * word8 vector * word32) = (x_585, x_581, global_3)
+    x_583: list_3 = ::_2 (x_580, x_584)
+    case x_582 of
+      nil_4 => L_287 | ::_0 => L_286
+  L_286 (x_587: list_4, x_586: word8 vector)
+    L_285 (x_587, x_586, x_583)
+  L_287 ()
+    L_288 (x_580, x_584, global_276)
+  L_288 (x_590: list_3, x_589: (word32 * word8 vector * word32), x_588: list_3)
+    x_591: list_3 = ::_2 (x_588, x_589)
+    case x_590 of
+      nil_5 => L_290 | ::_2 => L_289
+  L_289 (x_593: list_3, x_592: (word32 * word8 vector * word32))
+    L_288 (x_593, x_592, x_591)
+  L_290 ()
+    case x_588 of
+      nil_5 => L_291 | _ => L_292
+  L_292 ()
+    L_293 (x_588, x_589, global_3)
+  L_293 (x_596: list_3, x_595: (word32 * word8 vector * word32), x_594: word32)
+    x_598: word32 = #0 x_595
+    x_597: word32 = Word32_add (x_594, x_598)
+    case x_596 of
+      nil_5 => L_295 | ::_2 => L_294
+  L_294 (x_600: list_3, x_599: (word32 * word8 vector * word32))
+    L_293 (x_600, x_599, x_597)
+  L_295 ()
+    x_601: bool = Word32_equal (global_3, x_597)
+    case x_601 of
+      true => L_297 | false => L_296
+  L_296 ()
+    x_602: bool = WordS32_lt (x_597, global_3)
+    case x_602 of
+      true => L_299 | false => L_298
+  L_298 ()
+    x_603: word8 array = Array_array(word8) (x_597)
+    L_300 (x_603)
+  L_297 ()
+    L_300 (global_280)
+  L_300 (a_1: word8 array)
+    loop_25 (x_588, x_589, global_3, global_3)
+  loop_25 (x_607: list_3,
+	   x_606: (word32 * word8 vector * word32),
+	   x_605: word32,
+	   x_604: word32)
+    x_608: bool = WordS32_lt (x_604, x_597)
+    case x_608 of
+      true => L_302 | false => L_301
+  L_301 ()
+    x_609: word8 vector = Array_toVector(word8) (a_1)
+    return x_609
+  L_302 ()
+    loop_26 (x_607, x_606, x_605)
+  loop_26 (x_612: list_3, x_611: (word32 * word8 vector * word32), x_610: word32)
+    x_614: word32 = #0 x_611
+    x_613: bool = WordS32_lt (x_610, x_614)
+    case x_613 of
+      true => L_304 | false => L_303
+  L_303 ()
+    case x_612 of
+      nil_5 => L_306 | ::_2 => L_305
+  L_305 (x_616: list_3, x_615: (word32 * word8 vector * word32))
+    loop_26 (x_616, x_615, global_3)
+  L_306 ()
+    raise (global_279)
+  L_304 ()
+    x_622: word32 = #2 x_611
+    x_621: word8 vector = #1 x_611
+    x_620: word32 = Word32_add (x_610, x_622)
+    x_618: word8 = Vector_sub(word8) (x_621, x_620)
+    x_619: word32 = Word32_add (global_4, x_610)
+    Array_update(word8) (a_1, x_604, x_618)
+    x_617: word32 = Word32_add (global_4, x_604)
+    loop_25 (x_612, x_611, x_619, x_617)
+  L_291 ()
+    x_624: word32 = #2 x_589
+    x_626: word8 vector = #1 x_589
+    x_625: word32 = #0 x_589
+    x_623: bool = Word32_equal (global_3, x_624)
+    case x_623 of
+      true => L_308 | false => L_307
+  L_308 ()
+    x_628: word32 = Vector_length(word8) (x_626)
+    x_627: bool = Word32_equal (x_628, x_625)
+    case x_627 of
+      true => L_309 | false => L_307
+  L_307 ()
+    x_629: bool = Word32_equal (global_3, x_625)
+    case x_629 of
+      true => L_311 | false => L_310
+  L_310 ()
+    x_630: bool = WordS32_lt (x_625, global_3)
+    case x_630 of
+      true => L_299 | false => L_312
+  L_312 ()
+    x_631: word8 array = Array_array(word8) (x_625)
+    L_313 (x_631)
+  L_299 ()
+    raise (global_275)
+  L_311 ()
+    L_313 (global_280)
+  L_313 (a_2: word8 array)
+    loop_27 (global_3)
+  loop_27 (x_632: word32)
+    x_633: bool = WordS32_lt (x_632, x_625)
+    case x_633 of
+      true => L_315 | false => L_314
+  L_314 ()
+    x_634: word8 vector = Array_toVector(word8) (a_2)
+    return x_634
+  L_315 ()
+    x_637: word32 = Word32_add (x_632, x_624)
+    x_636: word8 = Vector_sub(word8) (x_626, x_637)
+    Array_update(word8) (a_2, x_632, x_636)
+    x_635: word32 = Word32_add (global_4, x_632)
+    loop_27 (x_635)
+  L_309 ()
+    return x_626
+  L_284 ()
+    L_316 ()
+  L_316 ()
+    x_638: word8 vector = Array_toVector(word8) (global_280)
+    return x_638
+fun exnMessage_0 (x_639: exn, env_1: list_0 ref): {raises = Some (),
+						   returns = Some (word8 vector)} = L_317 ()
+  L_317 ()
+    x_640: list_0 = Ref_deref(list_0) (env_1)
+    case x_640 of
+      nil_0 => L_319 | ::_6 => L_318
+  L_318 (x_642: list_0, x_641: lambdas_0)
+    case x_641 of
+      Env_2 => L_322 | Env_0 => L_321 | Env_1 => L_320
+  L_320 (env_2: list_0 ref)
+    case x_639 of
+      Io_0 => L_323 | _ => L_324
+  L_324 ()
+    case x_642 of
+      nil_0 => L_319 | ::_6 => L_318
+  L_323 (x_645: word8 vector, x_644: word8 vector, x_643: exn)
+    exnMessage_0 (x_643, env_2) NonTail {cont = L_325, handler = Caller}
+  L_325 (x_646: word8 vector)
+    x_652: list_4 = ::_0 (global_253, x_646)
+    x_651: list_4 = ::_0 (x_652, global_281)
+    x_650: list_4 = ::_0 (x_651, x_645)
+    x_649: list_4 = ::_0 (x_650, global_282)
+    x_648: list_4 = ::_0 (x_649, x_644)
+    x_647: list_4 = ::_0 (x_648, global_283)
+    concat_0 (x_647) NonTail {cont = L_326, handler = Handle L_327}
+  L_327 (x_653: exn)
+    raise ()
+  L_326 (x_654: word8 vector)
+    return x_654
+  L_321 ()
+    case x_639 of
+      Fail_0 => L_328 | _ => L_329
+  L_329 ()
+    case x_642 of
+      nil_0 => L_319 | ::_6 => L_318
+  L_328 (x_655: word8 vector)
+    x_657: list_4 = ::_0 (global_253, x_655)
+    x_656: list_4 = ::_0 (x_657, global_284)
+    concat_0 (x_656) NonTail {cont = L_330, handler = Handle L_331}
+  L_331 (x_658: exn)
+    raise ()
+  L_330 (x_659: word8 vector)
+    return x_659
+  L_322 (env_3: list_1)
+    case x_639 of
+      SysErr_0 => L_332 | _ => L_333
+  L_333 ()
+    case x_642 of
+      nil_0 => L_319 | ::_6 => L_318
+  L_332 (x_661: Primitive.Option.t_1, x_660: word8 vector)
+    case x_661 of
+      SOME_1 => L_334
+  L_334 (x_662: word32)
+    case env_3 of
+      nil_2 => L_336 | ::_4 => L_335
+  L_335 (x_664: list_1, x_663: (word32 * word8 vector))
+    x_666: word32 = #0 x_663
+    x_665: bool = Word32_equal (x_662, x_666)
+    case x_665 of
+      true => L_338 | false => L_337
+  L_337 ()
+    case x_664 of
+      nil_2 => L_336 | ::_4 => L_335
+  L_338 ()
+    x_667: word8 vector = #1 x_663
+    L_339 (x_667)
+  L_336 ()
+    L_339 (global_285)
+  L_339 (x_668: word8 vector)
+    x_670: list_4 = ::_0 (global_287, x_668)
+    x_669: list_4 = ::_0 (x_670, global_288)
+    concat_0 (x_669) NonTail {cont = L_340, handler = Handle L_341}
+  L_340 (x_671: word8 vector)
+    x_674: list_4 = ::_0 (global_253, x_671)
+    x_673: list_4 = ::_0 (x_674, x_660)
+    x_672: list_4 = ::_0 (x_673, global_289)
+    concat_0 (x_672) NonTail {cont = L_342, handler = Handle L_341}
+  L_341 (x_675: exn)
+    raise ()
+  L_342 (x_676: word8 vector)
+    return x_676
+  L_319 ()
+    case x_639 of
+      Io_0 => L_350
+    | ClosedStream_0 => L_349
+    | SysErr_0 => L_348
+    | Fail_0 => L_347
+    | Subscript_0 => L_346
+    | Size_0 => L_345
+    | Overflow_0 => L_344
+    | Fail8_0 => L_343
+  L_343 (x_677: word8 vector)
+    return global_301
+  L_344 ()
+    return global_300
+  L_345 ()
+    return global_302
+  L_346 ()
+    return global_303
+  L_347 (x_678: word8 vector)
+    return global_304
+  L_348 (x_680: Primitive.Option.t_1, x_679: word8 vector)
+    return global_305
+  L_349 ()
+    return global_306
+  L_350 (x_683: word8 vector, x_682: word8 vector, x_681: exn)
+    return global_307

Added: talks/whole-program-compilation/trunk/loop.gif
===================================================================
(Binary files differ)


Property changes on: talks/whole-program-compilation/trunk/loop.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: talks/whole-program-compilation/trunk/loop.ps
===================================================================
--- talks/whole-program-compilation/trunk/loop.ps	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/loop.ps	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,506 @@
+%!PS-Adobe-2.0
+%%Creator: dot version 2.8 (Wed Jul 19 03:30:15 UTC 2006)
+%%For: (sweeks) Stephen Weeks,,,
+%%Title: sum_0 control-flow graph
+%%Pages: (atend)
+%%BoundingBox: 36 36 458 384
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+	dup 1 exch div /InvScaleFactor exch def
+	dup scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw aligned label in bounding box aligned to current point
+/alignedtext {			% width adj text
+	/text exch def
+	/adj exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			text stringwidth pop adj mul 0 rmoveto
+		} if
+		[] 0 setdash
+		text show
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+%%Page: 1 1
+%%PageBoundingBox: 36 36 458 384
+%%PageOrientation: Portrait
+gsave
+36 36 422 348 boxprim clip newpath
+36 36 translate
+0 0 1 beginpage
+1.0000 set_scale
+4 4 translate 0 rotate
+0.000 0.000 1.000 graphcolor
+0.000 0.000 1.000 graphcolor
+newpath -6 -6 moveto
+-6 346 lineto
+420 346 lineto
+420 -6 lineto
+closepath
+fill
+0.000 0.000 1.000 graphcolor
+newpath -6 -6 moveto
+-6 346 lineto
+420 346 lineto
+420 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+gsave 10 dict begin
+134 7 moveto
+(sum_0 control-flow graph)
+[5.52 6.96 10.8 6.96 6.96 3.6 6.24 6.96 6.96 3.84 4.56 6.96 3.84 4.56 4.56 3.84 6.96 10.08 3.6 6.96 4.56 6.24 6.96 6.96]
+xshow
+end grestore
+% n0
+gsave 10 dict begin
+newpath 260 340 moveto
+136 340 lineto
+136 300 lineto
+260 300 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+144 323 moveto
+(L_118 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+144 307 moveto
+(loop_0 \(0x0, x_30\))
+[3.84 6.96 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 3.6 3.6 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n3
+gsave 10 dict begin
+newpath 307 248 moveto
+89 248 lineto
+89 208 lineto
+307 208 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+97 231 moveto
+(loop_0 \(x_32: word32, x_31: list_2\))
+[3.84 6.96 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 3.6 3.6 6.96 6.96 6.96 6.96 3.84 3.6 3.84 3.84 5.52 3.84 6.96 6.96 4.56]
+xshow
+97 215 moveto
+(case x_31)
+[6.24 6.24 5.52 6.24 3.6 6.96 6.96 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n0->n3
+gsave 10 dict begin
+solid
+newpath 198 300 moveto
+198 287 198 272 198 258 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 202 258 moveto
+198 248 lineto
+195 258 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 202 258 moveto
+198 248 lineto
+195 258 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+% n1
+gsave 10 dict begin
+newpath 286 64 moveto
+162 64 lineto
+162 24 lineto
+286 24 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+170 47 moveto
+(L_122 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+170 31 moveto
+(raise \(Overflow_0\))
+[4.56 6.24 3.84 5.52 6.24 3.6 4.56 10.08 6.96 6.24 4.56 4.56 3.84 6.96 10.08 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n2
+gsave 10 dict begin
+newpath 144 64 moveto
+0 64 lineto
+0 24 lineto
+144 24 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 47 moveto
+(L_121 \(x_35: word32\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 4.56]
+xshow
+8 31 moveto
+(loop_0 \(x_35, x_34\))
+[3.84 6.96 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 3.6 3.6 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n2->n3
+gsave 10 dict begin
+solid
+newpath 69 64 moveto
+66 88 65 128 82 156 curveto
+95 176 116 192 136 203 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 135 206 moveto
+145 208 lineto
+138 200 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 135 206 moveto
+145 208 lineto
+138 200 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+% n4
+gsave 10 dict begin
+newpath 306 156 moveto
+90 156 lineto
+90 116 lineto
+306 116 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+98 139 moveto
+(L_119 \(x_34: list_2, x_33: word32\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 6.96 6.96 6.96 6.96 3.84 3.6 3.84 3.84 5.52 3.84 6.96 6.96 3.6 3.6 6.96 6.96 6.96 6.96 3.84 3.6 10.08 6.96 4.56 6.96 6.96 6.96 4.56]
+xshow
+98 123 moveto
+(x_33 + x_32)
+[6.96 6.96 6.96 6.96 3.6 7.92 3.6 6.96 6.96 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n3->n4
+gsave 10 dict begin
+solid
+newpath 198 208 moveto
+198 195 198 180 198 166 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 202 166 moveto
+198 156 lineto
+195 166 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 202 166 moveto
+198 156 lineto
+195 166 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+198 177 moveto
+(::_0)
+[3.84 3.84 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n5
+gsave 10 dict begin
+newpath 414 156 moveto
+324 156 lineto
+324 116 lineto
+414 116 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+332 139 moveto
+(L_120 \(\))
+[8.64 6.96 6.96 6.96 6.96 3.6 4.56 4.56]
+xshow
+332 123 moveto
+(return \(x_32\))
+[4.56 6.24 3.84 6.96 4.56 6.96 3.6 4.56 6.96 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% n3->n5
+gsave 10 dict begin
+solid
+newpath 236 208 moveto
+261 195 295 175 323 161 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 325 164 moveto
+332 156 lineto
+322 158 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 325 164 moveto
+332 156 lineto
+322 158 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+293 177 moveto
+(nil_1)
+[6.96 3.84 3.84 6.96 6.96]
+xshow
+end grestore
+end grestore
+% n4->n1
+gsave 10 dict begin
+dashed
+newpath 204 116 moveto
+207 103 212 87 215 74 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 218 75 moveto
+218 64 lineto
+212 73 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 218 75 moveto
+218 64 lineto
+212 73 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+214 85 moveto
+(Overflow)
+[10.08 6.96 6.24 4.56 4.56 3.84 6.96 10.08]
+xshow
+end grestore
+end grestore
+% n4->n2
+gsave 10 dict begin
+solid
+newpath 170 116 moveto
+152 103 127 85 107 70 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 109 67 moveto
+99 64 lineto
+105 73 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 109 67 moveto
+99 64 lineto
+105 73 lineto
+closepath
+stroke
+end grestore
+gsave 10 dict begin
+end grestore
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF

Added: talks/whole-program-compilation/trunk/loop.sml
===================================================================
--- talks/whole-program-compilation/trunk/loop.sml	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/loop.sml	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,11 @@
+fun fold (l, b, f) = let
+  fun loop (l, b) =
+    case l of
+      [] => b
+    | x :: l => loop (l, f (x, b)) in
+  loop (l, b) end
+
+fun sum l =
+  fold (l, 0, fn (x, y) => x + y)
+
+val _ = sum [1, 2, 3] + sum [4, 5, 6]

Added: talks/whole-program-compilation/trunk/loop.ssa
===================================================================
--- talks/whole-program-compilation/trunk/loop.ssa	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/loop.ssa	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,1001 @@
+MLton MLTONVERSION (built Mon Jul 17 18:22:35 2006 on eponym)
+  created this file on Fri Aug 25 10:58:20 2006.
+Do not edit this file.
+Flag settings: 
+   align: 4
+   atMLtons: (loop, @MLton, --)
+   chunk: chunk per function
+   codegen: Native
+   contifyIntoMain: false
+   debug: false
+   defaultChar: char8
+   defaultInt: int32
+   defaultReal: real64
+   defaultWord: word32
+   diag passes: []
+   drop passes: [Or [Seq [Seq [[i], [n], [l], [i], [n], [e]]]], Or [Seq [Seq [[k], [n], [o], [w], [n], [C], [a], [s], [e]]]]]
+   elaborate allowConstant (default): false
+   elaborate allowConstant (enabled): true
+   elaborate allowFFI (default): false
+   elaborate allowFFI (enabled): true
+   elaborate allowPrim (default): false
+   elaborate allowPrim (enabled): true
+   elaborate allowOverload (default): false
+   elaborate allowOverload (enabled): true
+   elaborate allowRebindEquals (default): false
+   elaborate allowRebindEquals (enabled): true
+   elaborate deadCode (default): false
+   elaborate deadCode (enabled): true
+   elaborate forceUsed (default): false
+   elaborate forceUsed (enabled): true
+   elaborate ffiStr (default): 
+   elaborate ffiStr (enabled): true
+   elaborate nonexhaustiveExnMatch (default): default
+   elaborate nonexhaustiveExnMatch (enabled): true
+   elaborate nonexhaustiveMatch (default): warn
+   elaborate nonexhaustiveMatch (enabled): true
+   elaborate redundantMatch (default): warn
+   elaborate redundantMatch (enabled): true
+   elaborate sequenceNonUnit (default): ignore
+   elaborate sequenceNonUnit (enabled): true
+   elaborate warnUnused (default): false
+   elaborate warnUnused (enabled): true
+   elaborate only: false
+   export header: None
+   exn history: false
+   gc check: Limit
+   indentation: 3
+   inline: NonRecursive {product = 320, small = 60}
+   inlineIntoMain: true
+   input file: loop.ssa
+   keep Machine: false
+   keep RSSA: false
+   keep SSA: true
+   keep SSA2: false
+   keep dot: true
+   keep passes: []
+   extra_: false
+   lib dir: /home/sweeks/mlton/src/build/lib
+   lib target dir: /home/sweeks/mlton/src/build/lib/self
+   loop passes: 1
+   mark cards: true
+   max function size: 10000
+   mlb path maps: [/home/sweeks/mlton/src/build/lib/mlb-path-map]
+   native commented: 0
+   native live stack: false
+   native optimize: 1
+   native move hoist: true
+   native copy prop: true
+   native copy prop cutoff: 1000
+   native cutoff: 100
+   native live transfer: 8
+   native shuffle: true
+   native ieee fp: false
+   native split: Some 20000
+   optimizationPassesSet: [<ssa2PassesSet>, <ssaPassesSet>, <sxmlPassesSet>, <xmlPassesSet>]
+   polyvariance: Some {rounds = 2, small = 30, product = 300}
+   prof passes: []
+   profile: None
+   profile branch: false
+   profile C: []
+   profile IL: ProfileSource
+   profile include/exclude: [(Seq [Star [.], Or [Seq [Seq [[<], [b], [a], [s], [i], [s], [>]]]], Star [.]], false)]
+   profile raise: false
+   profile stack: false
+   show basis: None
+   show def-use: None
+   show types: true
+   ssaPassesSet: <ssaPassesSet>
+   ssaPasses: [default]
+   ssa2PassesSet: <ssa2PassesSet>
+   ssa2Passes: [default]
+   sxmlPassesSet: <sxmlPassesSet>
+   sxmlPasses: [default]
+   target: self
+   target arch: X86
+   target OS: Linux
+   type check: false
+   verbosity: Silent
+   warn unrecognized annotation: true
+   xmlPassesSet: <xmlPassesSet>
+   xmlPasses: [default]
+   zone cut depth: 100
+
+
+Datatypes:
+lambdas_0 = Env_2 | Env_1 | Env_3
+lambdas_1 = Env_0 | Env_4 of ((bool ref * bool ref * word8 array), list_0 ref)
+lambdas_2 = C_0
+list_1 = nil_3 | ::_2 of (list_1, (word32 * word8 vector))
+list_2 = nil_1 | ::_0 of (list_2, word32)
+list_3 = nil_2 | ::_1 of (list_3, word8 vector)
+list_0 = nil_0 | ::_3 of (list_0, lambdas_0)
+bool = false | true
+exn = Fail_0 of (word8 vector)
+    | Subscript_0 | Size_0 | Overflow_0 | Fail8_0 of (word8 vector)
+
+
+Globals:
+global_0: lambdas_1 = Env_0 ()
+global_1: word32 = 0x8
+global_2: word32 = 0x10
+global_3: word32 = 0x20
+global_4: word32 = 0x40
+global_5: list_0 = nil_0 ()
+global_6: word32 = 0x21
+global_7: bool = false ()
+global_8: lambdas_0 = Env_1 ()
+global_9: word32 = 0x12
+global_10: word32 = 0xB
+global_11: word32 = 0x1A
+global_12: word32 = 0x7
+global_13: word32 = 0x6E
+global_14: word32 = 0x3E
+global_15: word32 = 0x74
+global_16: word32 = 0x3
+global_17: word32 = 0x1D
+global_18: word32 = 0x1E
+global_19: word32 = 0x22
+global_20: word32 = 0x5B
+global_21: word32 = 0x5D
+global_22: word32 = 0x47
+global_23: word32 = 0x1
+global_24: word32 = 0x4B
+global_25: word32 = 0x5F
+global_26: word32 = 0x6
+global_27: word32 = 0x19
+global_28: word32 = 0x58
+global_29: word32 = 0x27
+global_30: word32 = 0x14
+global_31: word32 = 0x6B
+global_32: word32 = 0x26
+global_33: word32 = 0x3C
+global_34: word32 = 0x3F
+global_35: word32 = 0x1C
+global_36: word32 = 0x5C
+global_37: word32 = 0x2A
+global_38: word32 = 0xC
+global_39: word32 = 0x43
+global_40: word32 = 0x25
+global_41: word32 = 0x2
+global_42: word32 = 0x13
+global_43: word32 = 0x3D
+global_44: word32 = 0x69
+global_45: word32 = 0x17
+global_46: word32 = 0x65
+global_47: word32 = 0x66
+global_48: word32 = 0x64
+global_49: word32 = 0x24
+global_50: word32 = 0x48
+global_51: word32 = 0x5A
+global_52: word32 = 0x1F
+global_53: word32 = 0x18
+global_54: word32 = 0x28
+global_55: word32 = 0x15
+global_56: word32 = 0x6A
+global_57: word32 = 0x5
+global_58: word32 = 0x16
+global_59: word32 = 0x4
+global_60: word32 = 0x73
+global_61: word32 = 0x54
+global_62: word32 = 0x2B
+global_63: word32 = 0x71
+global_64: word32 = 0x1B
+global_65: word32 = 0xE
+global_66: word32 = 0x11
+global_67: word32 = 0x7A
+global_68: word32 = 0x59
+global_69: word32 = 0x23
+global_70: word32 = 0x68
+global_71: word32 = 0x6F
+global_72: word32 = 0x67
+global_73: word32 = 0xA
+global_74: word32 = 0x7D
+global_75: word32 = 0x4A
+global_76: word32 = 0x9
+global_77: word32 = 0x72
+global_78: word32 = 0x61
+global_79: word32 = 0x63
+global_80: word32 = 0x62
+global_81: word32 = 0xD
+global_82: lambdas_0 = Env_2 ()
+global_83: lambdas_0 = Env_3 ()
+global_84: word32 = 0x0
+global_85: list_2 = nil_1 ()
+global_86: list_2 = ::_0 (global_85, global_16)
+global_87: list_2 = ::_0 (global_86, global_41)
+global_88: list_2 = ::_0 (global_87, global_23)
+global_89: list_2 = ::_0 (global_85, global_26)
+global_90: list_2 = ::_0 (global_89, global_57)
+global_91: list_2 = ::_0 (global_90, global_59)
+global_92: exn = Overflow_0 ()
+global_93: word8 vector = "MkNum0: Int.sizeInBits <> Word.sizeInBits"
+global_94: word8 vector = global_93
+global_95: exn = Fail8_0 (global_94)
+global_96: word8 vector = "toplevel handler not installed"
+global_97: list_3 = nil_2 ()
+global_98: word8 vector = "Fail: "
+global_99: word8 vector = "Toplevel handler raised exception.
+"
+global_100: word8 vector = "
+"
+global_101: list_3 = ::_1 (global_97, global_100)
+global_102: word8 vector = "unhandled exception: "
+global_103: bool = true ()
+global_104: word32 = 0x100
+global_105: word8 vector = "0123456789ABCDEF"
+global_106: word8 = 0x7E
+global_107: word8 vector = "exit must have 0 <= status < 256: saw "
+global_108: exn = Subscript_0 ()
+global_109: word8 vector = "exit"
+global_110: word8 vector = global_109
+global_111: exn = Fail_0 (global_110)
+global_112: word32 = 0xFFFFFFFF
+global_113: word8 = 0x0
+global_114: exn = Size_0 ()
+global_115: list_1 = nil_3 ()
+global_116: word8 vector = "Sequence.Slice.concat"
+global_117: word8 vector = global_116
+global_118: exn = Fail_0 (global_117)
+global_119: word8 array = Array_array(word8) (global_84)
+global_120: word8 vector = "Fail "
+global_121: word8 vector = "unhandled exception in Basis Library "
+global_122: word8 vector = "Thread.atomicEnd"
+global_123: word8 vector = global_122
+global_124: exn = Fail8_0 (global_123)
+global_125: word8 vector = "Overflow"
+global_126: word8 vector = "Fail8"
+global_127: word8 vector = "Size"
+global_128: word8 vector = "Subscript"
+global_129: word8 vector = "Fail"
+
+
+Main: main_0
+
+
+Functions:
+fun main_0 (): {raises = None, returns = Some ()} = L_0 ()
+  L_0 ()
+    x_0 (global_1, global_1) NonTail {cont = L_1, handler = Dead}
+  L_1 (x_1: bool)
+    case x_1 of
+      true => L_3 | false => L_2
+  L_2 ()
+    x_0 (global_1, global_1) NonTail {cont = L_4, handler = Dead}
+  L_4 (x_2: bool)
+    case x_2 of
+      true => L_6 | false => L_5
+  L_5 ()
+    x_0 (global_2, global_2) NonTail {cont = L_7, handler = Dead}
+  L_7 (x_3: bool)
+    case x_3 of
+      true => L_9 | false => L_8
+  L_8 ()
+    x_0 (global_2, global_2) NonTail {cont = L_10, handler = Dead}
+  L_10 (x_4: bool)
+    case x_4 of
+      true => L_12 | false => L_11
+  L_11 ()
+    x_0 (global_3, global_3) NonTail {cont = L_13, handler = Dead}
+  L_13 (x_5: bool)
+    case x_5 of
+      true => L_15 | false => L_14
+  L_14 ()
+    x_0 (global_3, global_3) NonTail {cont = L_16, handler = Dead}
+  L_16 (x_6: bool)
+    case x_6 of
+      true => L_18 | false => L_17
+  L_17 ()
+    x_0 (global_4, global_4) NonTail {cont = L_19, handler = Dead}
+  L_19 (x_7: bool)
+    case x_7 of
+      true => L_21 | false => L_20
+  L_20 ()
+    x_0 (global_4, global_4) NonTail {cont = L_22, handler = Dead}
+  L_22 (x_8: bool)
+    case x_8 of
+      true => L_24 | false => L_23
+  L_23 ()
+    messagers_0: list_0 ref = Ref_ref(list_0) (global_5)
+    x_9 () NonTail {cont = L_25, handler = Handle L_26}
+  L_26 (x_10: exn)
+    L_27 (global_0, x_10)
+  L_25 (x_11: word8 array)
+    x_14: bool ref = Ref_ref(bool) (global_7)
+    x_13: list_0 = Ref_deref(list_0) (messagers_0)
+    x_12: list_0 = ::_3 (x_13, global_8)
+    Ref_assign(list_0) (messagers_0, x_12)
+    ::?_0 (global_9) NonTail {cont = L_28, handler = Dead}
+  L_28 ()
+    ::?_0 (global_10) NonTail {cont = L_29, handler = Dead}
+  L_29 ()
+    ::?_0 (global_11) NonTail {cont = L_30, handler = Dead}
+  L_30 ()
+    ::?_0 (global_12) NonTail {cont = L_31, handler = Dead}
+  L_31 ()
+    ::?_0 (global_13) NonTail {cont = L_32, handler = Dead}
+  L_32 ()
+    ::?_0 (global_14) NonTail {cont = L_33, handler = Dead}
+  L_33 ()
+    ::?_0 (global_15) NonTail {cont = L_34, handler = Dead}
+  L_34 ()
+    ::?_0 (global_16) NonTail {cont = L_35, handler = Dead}
+  L_35 ()
+    ::?_0 (global_17) NonTail {cont = L_36, handler = Dead}
+  L_36 ()
+    ::?_0 (global_18) NonTail {cont = L_37, handler = Dead}
+  L_37 ()
+    ::?_0 (global_19) NonTail {cont = L_38, handler = Dead}
+  L_38 ()
+    ::?_0 (global_20) NonTail {cont = L_39, handler = Dead}
+  L_39 ()
+    ::?_0 (global_21) NonTail {cont = L_40, handler = Dead}
+  L_40 ()
+    ::?_0 (global_22) NonTail {cont = L_41, handler = Dead}
+  L_41 ()
+    ::?_0 (global_3) NonTail {cont = L_42, handler = Dead}
+  L_42 ()
+    ::?_0 (global_23) NonTail {cont = L_43, handler = Dead}
+  L_43 ()
+    ::?_0 (global_24) NonTail {cont = L_44, handler = Dead}
+  L_44 ()
+    ::?_0 (global_25) NonTail {cont = L_45, handler = Dead}
+  L_45 ()
+    ::?_0 (global_26) NonTail {cont = L_46, handler = Dead}
+  L_46 ()
+    ::?_0 (global_27) NonTail {cont = L_47, handler = Dead}
+  L_47 ()
+    ::?_0 (global_25) NonTail {cont = L_48, handler = Dead}
+  L_48 ()
+    ::?_0 (global_28) NonTail {cont = L_49, handler = Dead}
+  L_49 ()
+    ::?_0 (global_29) NonTail {cont = L_50, handler = Dead}
+  L_50 ()
+    ::?_0 (global_30) NonTail {cont = L_51, handler = Dead}
+  L_51 ()
+    ::?_0 (global_31) NonTail {cont = L_52, handler = Dead}
+  L_52 ()
+    ::?_0 (global_32) NonTail {cont = L_53, handler = Dead}
+  L_53 ()
+    ::?_0 (global_33) NonTail {cont = L_54, handler = Dead}
+  L_54 ()
+    ::?_0 (global_34) NonTail {cont = L_55, handler = Dead}
+  L_55 ()
+    ::?_0 (global_35) NonTail {cont = L_56, handler = Dead}
+  L_56 ()
+    ::?_0 (global_36) NonTail {cont = L_57, handler = Dead}
+  L_57 ()
+    ::?_0 (global_37) NonTail {cont = L_58, handler = Dead}
+  L_58 ()
+    ::?_0 (global_38) NonTail {cont = L_59, handler = Dead}
+  L_59 ()
+    ::?_0 (global_39) NonTail {cont = L_60, handler = Dead}
+  L_60 ()
+    ::?_0 (global_40) NonTail {cont = L_61, handler = Dead}
+  L_61 ()
+    ::?_0 (global_1) NonTail {cont = L_62, handler = Dead}
+  L_62 ()
+    ::?_0 (global_41) NonTail {cont = L_63, handler = Dead}
+  L_63 ()
+    ::?_0 (global_42) NonTail {cont = L_64, handler = Dead}
+  L_64 ()
+    ::?_0 (global_43) NonTail {cont = L_65, handler = Dead}
+  L_65 ()
+    ::?_0 (global_44) NonTail {cont = L_66, handler = Dead}
+  L_66 ()
+    ::?_0 (global_45) NonTail {cont = L_67, handler = Dead}
+  L_67 ()
+    ::?_0 (global_46) NonTail {cont = L_68, handler = Dead}
+  L_68 ()
+    ::?_0 (global_47) NonTail {cont = L_69, handler = Dead}
+  L_69 ()
+    ::?_0 (global_48) NonTail {cont = L_70, handler = Dead}
+  L_70 ()
+    ::?_0 (global_49) NonTail {cont = L_71, handler = Dead}
+  L_71 ()
+    ::?_0 (global_50) NonTail {cont = L_72, handler = Dead}
+  L_72 ()
+    ::?_0 (global_51) NonTail {cont = L_73, handler = Dead}
+  L_73 ()
+    ::?_0 (global_52) NonTail {cont = L_74, handler = Dead}
+  L_74 ()
+    ::?_0 (global_53) NonTail {cont = L_75, handler = Dead}
+  L_75 ()
+    ::?_0 (global_54) NonTail {cont = L_76, handler = Dead}
+  L_76 ()
+    ::?_0 (global_55) NonTail {cont = L_77, handler = Dead}
+  L_77 ()
+    ::?_0 (global_56) NonTail {cont = L_78, handler = Dead}
+  L_78 ()
+    ::?_0 (global_57) NonTail {cont = L_79, handler = Dead}
+  L_79 ()
+    ::?_0 (global_58) NonTail {cont = L_80, handler = Dead}
+  L_80 ()
+    ::?_0 (global_59) NonTail {cont = L_81, handler = Dead}
+  L_81 ()
+    ::?_0 (global_60) NonTail {cont = L_82, handler = Dead}
+  L_82 ()
+    ::?_0 (global_61) NonTail {cont = L_83, handler = Dead}
+  L_83 ()
+    ::?_0 (global_62) NonTail {cont = L_84, handler = Dead}
+  L_84 ()
+    ::?_0 (global_63) NonTail {cont = L_85, handler = Dead}
+  L_85 ()
+    ::?_0 (global_64) NonTail {cont = L_86, handler = Dead}
+  L_86 ()
+    ::?_0 (global_65) NonTail {cont = L_87, handler = Dead}
+  L_87 ()
+    ::?_0 (global_66) NonTail {cont = L_88, handler = Dead}
+  L_88 ()
+    ::?_0 (global_67) NonTail {cont = L_89, handler = Dead}
+  L_89 ()
+    ::?_0 (global_6) NonTail {cont = L_90, handler = Dead}
+  L_90 ()
+    ::?_0 (global_68) NonTail {cont = L_91, handler = Dead}
+  L_91 ()
+    ::?_0 (global_69) NonTail {cont = L_92, handler = Dead}
+  L_92 ()
+    ::?_0 (global_70) NonTail {cont = L_93, handler = Dead}
+  L_93 ()
+    ::?_0 (global_71) NonTail {cont = L_94, handler = Dead}
+  L_94 ()
+    ::?_0 (global_72) NonTail {cont = L_95, handler = Dead}
+  L_95 ()
+    ::?_0 (global_73) NonTail {cont = L_96, handler = Dead}
+  L_96 ()
+    ::?_0 (global_74) NonTail {cont = L_97, handler = Dead}
+  L_97 ()
+    ::?_0 (global_2) NonTail {cont = L_98, handler = Dead}
+  L_98 ()
+    ::?_0 (global_75) NonTail {cont = L_99, handler = Dead}
+  L_99 ()
+    ::?_0 (global_76) NonTail {cont = L_100, handler = Dead}
+  L_100 ()
+    ::?_0 (global_77) NonTail {cont = L_101, handler = Dead}
+  L_101 ()
+    ::?_0 (global_10) NonTail {cont = L_102, handler = Dead}
+  L_102 ()
+    ::?_0 (global_78) NonTail {cont = L_103, handler = Dead}
+  L_103 ()
+    ::?_0 (global_79) NonTail {cont = L_104, handler = Dead}
+  L_104 ()
+    ::?_0 (global_80) NonTail {cont = L_105, handler = Dead}
+  L_105 ()
+    ::?_0 (global_81) NonTail {cont = L_106, handler = Dead}
+  L_106 ()
+    x_19: list_0 = Ref_deref(list_0) (messagers_0)
+    x_18: list_0 = ::_3 (x_19, global_82)
+    Ref_assign(list_0) (messagers_0, x_18)
+    x_17: list_0 = Ref_deref(list_0) (messagers_0)
+    x_16: list_0 = ::_3 (x_17, global_83)
+    Ref_assign(list_0) (messagers_0, x_16)
+    exiting_0: bool ref = Ref_ref(bool) (global_7)
+    tuple_0: (bool ref * bool ref * word8 array) = (exiting_0, x_14, x_11)
+    x_15: lambdas_1 = Env_4 (tuple_0, messagers_0)
+    sum_0 (global_88) NonTail {cont = L_107, handler = Handle L_108}
+  L_107 (x_20: word32)
+    sum_0 (global_91) NonTail {cont = L_109, handler = Handle L_108}
+  L_109 (x_21: word32)
+    L_110 (x_20 + x_21) Overflow => L_111 ()
+  L_110 (x_22: word32)
+    x_23 (x_11, x_14, exiting_0) NonTail {cont = L_112, handler = Handle L_108}
+  L_108 (x_24: exn)
+    L_27 (x_15, x_24)
+  L_112 ()
+    Bug
+  L_111 ()
+    L_27 (x_15, global_92)
+  L_24 ()
+    L_27 (global_0, global_95)
+  L_21 ()
+    L_27 (global_0, global_95)
+  L_18 ()
+    L_27 (global_0, global_95)
+  L_15 ()
+    L_27 (global_0, global_95)
+  L_12 ()
+    L_27 (global_0, global_95)
+  L_9 ()
+    L_27 (global_0, global_95)
+  L_6 ()
+    L_27 (global_0, global_95)
+  L_3 ()
+    L_27 (global_0, global_95)
+  L_27 (x_26: lambdas_1, x_25: exn)
+    case x_26 of
+      Env_0 => L_114 | Env_4 => L_113
+  L_113 (x_28: (bool ref * bool ref * word8 array), x_27: list_0 ref)
+    topLevelHandler_0 (x_25, x_28, x_27) NonTail {cont = L_115,
+						  handler = Handle L_116}
+  L_115 ()
+    Bug
+  L_114 ()
+    x_29 (x_25) NonTail {cont = L_117, handler = Handle L_116}
+  L_116 ()
+    MLton_bug (global_96)
+    return ()
+  L_117 ()
+    return ()
+fun sum_0 (x_30: list_2): {raises = Some (exn), returns = Some (word32)} = L_118 ()
+  L_118 ()
+    loop_0 (global_84, x_30)
+  loop_0 (x_32: word32, x_31: list_2)
+    case x_31 of
+      nil_1 => L_120 | ::_0 => L_119
+  L_119 (x_34: list_2, x_33: word32)
+    L_121 (x_33 + x_32) Overflow => L_122 ()
+  L_121 (x_35: word32)
+    loop_0 (x_35, x_34)
+  L_122 ()
+    raise (global_92)
+  L_120 ()
+    return x_32
+fun x_23 (x_38: word8 array, x_37: bool ref, x_36: bool ref): {raises = Some (exn),
+							       returns = None} = L_123 ()
+  L_123 ()
+    env_0: (bool ref * bool ref * word8 array) = (x_36, x_37, x_38)
+    exit_0 (global_84, env_0) Tail
+fun topLevelHandler_0 (x_41: exn,
+		       x_40: (bool ref * bool ref * word8 array),
+		       x_39: list_0 ref): {raises = Some (), returns = None} = L_124 ()
+  L_124 ()
+    x_42: list_0 = Ref_deref(list_0) (x_39)
+    find_0 (x_42)
+  find_0 (x_43: list_0)
+    case x_43 of
+      nil_0 => L_126 | ::_3 => L_125
+  L_125 (x_45: list_0, x_44: lambdas_0)
+    case x_44 of
+      Env_2 => L_129 | Env_1 => L_128 | Env_3 => L_127
+  L_127 ()
+    find_0 (x_45)
+  L_128 ()
+    case x_41 of
+      Fail_0 => L_130 | _ => L_131
+  L_131 ()
+    find_0 (x_45)
+  L_130 (x_46: word8 vector)
+    x_48: list_3 = ::_1 (global_97, x_46)
+    x_47: list_3 = ::_1 (x_48, global_98)
+    concat_0 (x_47) NonTail {cont = L_132, handler = Handle L_133}
+  L_133 (x_49: exn)
+    print_0 ()
+  L_129 ()
+    find_0 (x_45)
+  L_126 ()
+    name_0 (x_41) NonTail {cont = L_132, handler = Dead}
+  L_132 (x_50: word8 vector)
+    x_52: list_3 = ::_1 (global_101, x_50)
+    x_51: list_3 = ::_1 (x_52, global_102)
+    concat_0 (x_51) NonTail {cont = print_1, handler = Handle L_134}
+  print_1 (x_53: word8 vector)
+    Stdio_print (x_53)
+    exit_0 (global_23, x_40) NonTail {cont = L_135, handler = Handle L_134}
+  L_134 (x_54: exn)
+    print_0 ()
+  print_0 ()
+    Stdio_print (global_99)
+    L_136 (MLton_halt (global_23))
+  L_136 ()
+    raise ()
+  L_135 ()
+    Bug
+fun exit_0 (x_55: word32, env_1: (bool ref * bool ref * word8 array)): {raises = Some (exn),
+									returns = None} = L_137 ()
+  L_137 ()
+    exiting_1: bool ref = #0 env_1
+    x_58: bool ref = #1 env_1
+    x_57: word8 array = #2 env_1
+    x_56: bool = Ref_deref(bool) (exiting_1)
+    case x_56 of
+      true => L_139 | false => L_138
+  L_138 ()
+    Ref_assign(bool) (exiting_1, global_103)
+    <=_0 (x_55, global_84) NonTail {cont = L_140, handler = Dead}
+  L_140 (x_59: bool)
+    case x_59 of
+      true => L_142 | false => L_141
+  L_142 ()
+    x_60: bool = WordS32_lt (x_55, global_104)
+    case x_60 of
+      true => loop_1 | false => L_141
+  L_141 ()
+    Thread_atomicBegin ()
+    x_61: bool = Ref_deref(bool) (x_58)
+    case x_61 of
+      true => L_144 | false => L_143
+  L_143 ()
+    Ref_assign(bool) (x_58, global_103)
+    atomicEnd_0 () NonTail {cont = L_145, handler = Caller}
+  L_145 ()
+    L_146 (x_57)
+  L_144 ()
+    atomicEnd_0 () NonTail {cont = L_147, handler = Caller}
+  L_147 ()
+    x_9 () NonTail {cont = L_146, handler = Caller}
+  L_146 (x_62: word8 array)
+    x_63: bool = WordS32_lt (x_55, global_84)
+    case x_63 of
+      true => L_149 | false => L_148
+  L_148 ()
+    x_64: word32 = Word32_neg (x_55)
+    loop_2 (global_3, x_64)
+  L_149 ()
+    loop_2 (global_3, x_55)
+  loop_2 (x_66: word32, x_65: word32)
+    x_68: word32 = WordS32_rem (x_65, global_73)
+    x_67: word32 = Word32_neg (x_68)
+    full_0 (global_105) NonTail {cont = L_150, handler = Dead}
+  L_150 (x_70: word8 vector, x_69: word32)
+    x_71: (word32 * word8 vector) = (x_69, x_70)
+    >=_0 (x_69, x_67) NonTail {cont = L_151, handler = Dead}
+  L_151 (x_72: bool)
+    case x_72 of
+      true => L_153 | false => L_152
+  L_152 ()
+    unsafeSub'_0 (x_67, x_71) NonTail {cont = L_154, handler = Dead}
+  L_154 (x_73: word8)
+    update_0 (x_73, x_66, x_62) NonTail {cont = L_155, handler = Handle L_156}
+  L_155 ()
+    x_75: word32 = WordS32_quot (x_65, global_73)
+    x_74: bool = Word32_equal (x_75, global_84)
+    case x_74 of
+      true => L_158 | false => L_157
+  L_157 ()
+    L_159 (x_66 - global_23) Overflow => L_160 ()
+  L_159 (x_76: word32)
+    loop_2 (x_76, x_75)
+  L_158 ()
+    case x_63 of
+      true => L_162 | false => L_161
+  L_161 ()
+    L_163 (x_66)
+  L_162 ()
+    L_164 (x_66 - global_23) Overflow => L_160 ()
+  L_164 (i_0: word32)
+    update_0 (global_106, i_0, x_62) NonTail {cont = L_165,
+					      handler = Handle L_156}
+  L_165 ()
+    L_163 (i_0)
+  L_163 (x_77: word32)
+    ltu_0 (x_77, global_6) NonTail {cont = L_166, handler = Dead}
+  L_166 (x_78: bool)
+    case x_78 of
+      true => L_153 | false => L_167
+  L_167 ()
+    x_79: word32 = Word32_sub (global_6, x_77)
+    arrayUninit'_0 (x_79) NonTail {cont = L_168, handler = Handle L_156}
+  L_168 (a_0: word8 array)
+    loop_3 (global_84)
+  loop_3 (x_80: word32)
+    >=_1 (x_79, x_80) NonTail {cont = L_169, handler = Dead}
+  L_169 (x_81: bool)
+    case x_81 of
+      true => L_171 | false => L_170
+  L_170 ()
+    x_84: word32 = Word32_add (x_77, x_80)
+    x_83: word8 = Array_sub(word8) (x_62, x_84)
+    Array_update(word8) (a_0, x_80, x_83)
+    x_82: word32 = Word32_add (x_80, global_23)
+    loop_3 (x_82)
+  L_171 ()
+    x_85: word8 vector = Array_toVector(word8) (a_0)
+    x_86 (x_61, x_58) NonTail {cont = L_172, handler = Dead}
+  L_172 ()
+    x_88: list_3 = ::_1 (global_97, x_85)
+    x_87: list_3 = ::_1 (x_88, global_107)
+    concat_0 (x_87) NonTail {cont = L_173, handler = Caller}
+  L_173 (x_89: word8 vector)
+    x_90: exn = Fail_0 (x_89)
+    raise (x_90)
+  L_160 ()
+    L_156 (global_92)
+  L_153 ()
+    L_156 (global_108)
+  L_156 (x_91: exn)
+    x_86 (x_61, x_58) NonTail {cont = L_174, handler = Dead}
+  L_174 ()
+    raise (x_91)
+  loop_1 ()
+    L_139 (MLton_halt (x_55))
+  L_139 ()
+    raise (global_111)
+fun x_86 (x_93: bool, x_92: bool ref): {raises = None, returns = Some ()} = L_175 ()
+  L_175 ()
+    case x_93 of
+      true => L_177 | false => L_176
+  L_176 ()
+    Ref_assign(bool) (x_92, global_7)
+    return ()
+  L_177 ()
+    return ()
+fun ::?_0 (x_94: word32): {raises = None, returns = Some ()} = L_178 ()
+  L_178 ()
+    x_95: bool = Word32_equal (global_112, x_94)
+    case x_95 of
+      true => L_180 | false => L_179
+  L_179 ()
+    return ()
+  L_180 ()
+    return ()
+fun x_9 (): {raises = Some (exn), returns = Some (word8 array)} = L_181 ()
+  L_181 ()
+    >_0 () NonTail {cont = L_182, handler = Dead}
+  L_182 (x_96: bool)
+    case x_96 of
+      true => L_184 | false => L_183
+  L_183 ()
+    x_97: word8 array = Array_array(word8) (global_6)
+    loop_4 (global_84)
+  loop_4 (x_98: word32)
+    >=_1 (global_6, x_98) NonTail {cont = L_185, handler = Dead}
+  L_185 (x_99: bool)
+    case x_99 of
+      true => L_187 | false => L_186
+  L_186 ()
+    Array_update(word8) (x_97, x_98, global_113)
+    x_100: word32 = Word32_add (x_98, global_23)
+    loop_4 (x_100)
+  L_187 ()
+    return x_97
+  L_184 ()
+    raise (global_114)
+fun update_0 (x_103: word8, x_102: word32, x_101: word8 array): {raises = Some (exn),
+								 returns = Some ()} = L_188 ()
+  L_188 ()
+    >=_0 (global_6, x_102) NonTail {cont = L_189, handler = Dead}
+  L_189 (x_104: bool)
+    case x_104 of
+      true => L_191 | false => L_190
+  L_190 ()
+    Array_update(word8) (x_101, x_102, x_103)
+    return ()
+  L_191 ()
+    raise (global_108)
+fun concat_0 (x_105: list_3): {raises = Some (exn),
+			       returns = Some (word8 vector)} = L_192 ()
+  L_192 ()
+    loop_5 (global_115, x_105)
+  loop_5 (x_107: list_1, x_106: list_3)
+    case x_106 of
+      nil_2 => L_194 | ::_1 => L_193
+  L_193 (x_109: list_3, x_108: word8 vector)
+    full_0 (x_108) NonTail {cont = L_195, handler = Dead}
+  L_195 (x_111: word8 vector, x_110: word32)
+    x_113: (word32 * word8 vector) = (x_110, x_111)
+    x_112: list_1 = ::_2 (x_107, x_113)
+    loop_5 (x_112, x_109)
+  L_194 ()
+    loop_6 (global_115, x_107)
+  loop_6 (x_115: list_1, x_114: list_1)
+    case x_114 of
+      nil_3 => L_197 | ::_2 => L_196
+  L_196 (x_117: list_1, x_116: (word32 * word8 vector))
+    x_118: list_1 = ::_2 (x_115, x_116)
+    loop_6 (x_118, x_117)
+  L_197 ()
+    case x_115 of
+      nil_3 => L_199 | ::_2 => L_198
+  L_198 (x_120: list_1, x_119: (word32 * word8 vector))
+    case x_120 of
+      nil_3 => L_200 | _ => L_201
+  L_201 ()
+    loop_7 (global_84, x_115)
+  loop_7 (x_122: word32, x_121: list_1)
+    case x_121 of
+      nil_3 => L_203 | ::_2 => L_202
+  L_202 (x_124: list_1, x_123: (word32 * word8 vector))
+    x_126: word32 = #0 x_123
+    x_125: word32 = Word32_add (x_126, x_122)
+    loop_7 (x_125, x_124)
+  L_203 ()
+    arrayUninit'_0 (x_122) NonTail {cont = L_204, handler = Caller}
+  L_204 (a_1: word8 array)
+    loop_8 (x_120, x_119, global_84, global_84)
+  loop_8 (x_130: list_1,
+	  x_129: (word32 * word8 vector),
+	  x_128: word32,
+	  x_127: word32)
+    >=_1 (x_122, x_127) NonTail {cont = L_205, handler = Dead}
+  L_205 (x_131: bool)
+    case x_131 of
+      true => L_207 | false => L_206
+  L_206 ()
+    loop_9 (x_130, x_129, x_128)
+  loop_9 (x_134: list_1, x_133: (word32 * word8 vector), x_132: word32)
+    x_136: word32 = #0 x_133
+    x_135: bool = WordS32_lt (x_132, x_136)
+    case x_135 of
+      true => L_209 | false => L_208
+  L_208 ()
+    case x_134 of
+      nil_3 => L_211 | ::_2 => L_210
+  L_210 (x_138: list_1, x_137: (word32 * word8 vector))
+    loop_9 (x_138, x_137, global_84)
+  L_211 ()
+    raise (global_118)
+  L_209 ()
+    unsafeSub'_0 (x_132, x_133) NonTail {cont = L_212, handler = Dead}
+  L_212 (x_139: word8)
+    x_141: word32 = Word32_add (global_23, x_132)
+    Array_update(word8) (a_1, x_127, x_139)
+    x_140: word32 = Word32_add (x_127, global_23)
+    loop_8 (x_134, x_133, x_141, x_140)
+  L_207 ()
+    x_142: word8 vector = Array_toVector(word8) (a_1)
+    return x_142
+  L_200 ()
+    x_144: word8 vector = #1 x_119
+    x_143: word32 = #0 x_119
+    x_0 (global_84, global_84) NonTail {cont = L_213, handler = Dead}
+  L_213 (x_145: bool)
+    case x_145 of
+      true => L_215 | false => L_214
+  L_214 ()
+    x_146: word32 = Vector_length(word8) (x_144)
+    x_0 (x_146, x_143) NonTail {cont = L_216, handler = Dead}
+  L_216 (x_147: bool)
+    case x_147 of
+      true => L_215 | false => L_217
+  L_217 ()
+    return x_144
+  L_215 ()
+    arrayUninit'_0 (x_143) NonTail {cont = L_218, handler = Caller}
+  L_218 (a_2: word8 array)
+    loop_10 (global_84)
+  loop_10 (x_148: word32)
+    >=_1 (x_143, x_148) NonTail {cont = L_219, handler = Dead}
+  L_219 (x_149: bool)
+    case x_149 of
+      true => L_221 | false => L_220
+  L_220 ()
+    x_151: word8 = Vector_sub(word8) (x_144, x_148)
+    Array_update(word8) (a_2, x_148, x_151)
+    x_150: word32 = Word32_add (x_148, global_23)
+    loop_10 (x_150)
+  L_221 ()
+    x_152: word8 vector = Array_toVector(word8) (a_2)
+    return x_152
+  L_199 ()
+    arrayUninit'_0 (global_84) NonTail {cont = x_153, handler = Caller}
+  x_153 (x_154: word8 array)
+    x_155: word8 vector = Array_toVector(word8) (x_154)
+    return x_155
+fun full_0 (x_156: word8 vector): {raises = None,
+				   returns = Some (word8 vector, word32)} = L_222 ()
+  L_222 ()
+    x_157: word32 = Vector_length(word8) (x_156)
+    return (x_156, x_157)
+fun unsafeSub'_0 (x_159: word32, x_158: (word32 * word8 vector)): {raises = None,
+								   returns = Some (word8)} = L_223 ()
+  L_223 ()
+    x_161: word8 vector = #1 x_158
+    x_160: word8 = Vector_sub(word8) (x_161, x_159)
+    return x_160
+fun arrayUninit'_0 (x_162: word32): {raises = Some (exn),
+				     returns = Some (word8 array)} = L_224 ()
+  L_224 ()
+    x_163: bool = Word32_equal (x_162, global_84)
+    case x_163 of
+      true => L_226 | false => L_225
+  L_225 ()
+    x_164: bool = WordS32_lt (x_162, global_84)
+    case x_164 of
+      true => L_228 | false => L_227
+  L_227 ()
+    >_0 () NonTail {cont = L_229, handler = Dead}
+  L_229 (x_165: bool)
+    case x_165 of
+      true => L_228 | false => L_230
+  L_230 ()
+    x_166: word8 array = Array_array(word8) (x_162)
+    return x_166
+  L_228 ()
+    raise (global_114)
+  L_226 ()
+    return global_119
+fun >=_0 (x_168: word32, x_167: word32): {raises = None, returns = Some (bool)} = L_231 ()
+  L_231 ()
+    ltu_0 (x_168, x_167) NonTail {cont = not_0, handler = Dead}
+  not_0 (x_169: bool)
+    case x_169 of
+      true => L_233 | false => L_232
+  L_232 ()
+    return global_103
+  L_233 ()
+    return global_7
+fun ltu_0 (x_171: word32, x_170: word32): {raises = None, returns = Some (bool)} = L_234 ()
+  L_234 ()
+    x_172: bool = WordU32_lt (x_170, x_171)
+    return x_172
+fun x_29 (x_173: exn): {raises = Some (), returns = Some ()} = L_235 ()
+  L_235 ()
+    Stdio_print (global_102)
+    case x_173 of
+      Fail8_0 => L_236 | _ => L_237
+  L_237 ()
+    name_0 (x_173) NonTail {cont = print_2, handler = Dead}
+  print_2 (x_174: word8 vector)
+    Stdio_print (x_174)
+    print_3 ()
+  L_236 (x_175: word8 vector)
+    Stdio_print (global_120)
+    Stdio_print (x_175)
+    print_3 ()
+  print_3 ()
+    Stdio_print (global_100)
+    fromString_0 (global_121) NonTail {cont = bug_0, handler = Handle L_238}
+  L_238 ()
+    raise ()
+  bug_0 (x_176: word8 vector)
+    MLton_bug (x_176)
+    return ()
+fun atomicEnd_0 (): {raises = Some (exn), returns = Some ()} = L_239 ()
+  L_239 ()
+    x_178: word32 = Thread_canHandle ()
+    x_177: bool = Word32_equal (x_178, global_84)
+    case x_177 of
+      true => L_241 | false => L_240
+  L_240 ()
+    Thread_atomicEnd ()
+    return ()
+  L_241 ()
+    raise (global_124)
+fun fromString_0 (x_179: word8 vector): {raises = Some (),
+					 returns = Some (word8 vector)} = L_242 ()
+  L_242 ()
+    x_180: word32 = Vector_length(word8) (x_179)
+    L_243 (x_180 - global_23) Overflow => L_244 ()
+  L_243 (x_181: word32)
+    x_183: word8 = Vector_sub(word8) (x_179, x_181)
+    x_182: bool = Word8_equal (x_183, global_113)
+    case x_182 of
+      true => L_246 | false => L_245
+  L_245 ()
+    raise ()
+  L_246 ()
+    return x_179
+  L_244 ()
+    raise ()
+fun >=_1 (x_185: word32, x_184: word32): {raises = None, returns = Some (bool)} = L_247 ()
+  L_247 ()
+    <=_0 (x_184, x_185) Tail
+fun >_0 (): {raises = None, returns = Some (bool)} = L_248 ()
+  L_248 ()
+    return global_7
+fun <=_0 (x_187: word32, x_186: word32): {raises = None, returns = Some (bool)} = L_249 ()
+  L_249 ()
+    x_188: bool = WordS32_lt (x_187, x_186)
+    case x_188 of
+      true => L_251 | false => L_250
+  L_250 ()
+    return global_103
+  L_251 ()
+    return global_7
+fun x_0 (x_190: word32, x_189: word32): {raises = None, returns = Some (bool)} = L_252 ()
+  L_252 ()
+    x_191: bool = Word32_equal (x_189, x_190)
+    case x_191 of
+      true => L_254 | false => L_253
+  L_253 ()
+    return global_103
+  L_254 ()
+    return global_7
+fun name_0 (x_192: exn): {raises = None, returns = Some (word8 vector)} = L_255 ()
+  L_255 ()
+    case x_192 of
+      Fail_0 => L_260
+    | Subscript_0 => L_259
+    | Size_0 => L_258
+    | Overflow_0 => L_257
+    | Fail8_0 => L_256
+  L_256 (x_193: word8 vector)
+    return global_126
+  L_257 ()
+    return global_125
+  L_258 ()
+    return global_127
+  L_259 ()
+    return global_128
+  L_260 (x_194: word8 vector)
+    return global_129

Added: talks/whole-program-compilation/trunk/mlton.odp
===================================================================
(Binary files differ)


Property changes on: talks/whole-program-compilation/trunk/mlton.odp
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: talks/whole-program-compilation/trunk/mlton.pdf
===================================================================
(Binary files differ)


Property changes on: talks/whole-program-compilation/trunk/mlton.pdf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: talks/whole-program-compilation/trunk/notes
===================================================================
--- talks/whole-program-compilation/trunk/notes	2006-09-11 18:04:38 UTC (rev 4698)
+++ talks/whole-program-compilation/trunk/notes	2006-09-11 18:55:22 UTC (rev 4699)
@@ -0,0 +1,58 @@
+lines of C
+     find . -type f | grep -v '~' | grep -v '\.svn' | grep -v '\.[oa]$' | grep -v 'gdtoa/' | grep -v 'gen/' | grep '\.[ch]$' | xargs wc -l
+
+problems with whole-program opt
+  compile time
+  instability -- small changes can affect optimizer choices
+    in weird ways, and throughout the program
+
+uses standard data representations
+to communcate with C via its foreign-function interface.
+
+MLton-specific extensions (e.g. the
+foreign-function interface) are documented as such, and are simple and
+well-specified.
+
+The language and library do not
+change, while extensions and the command-line interface change slowly.
+
+graphs
+  number of lines
+  number of people on dev list
+  number of mail messages
+  number of commits
+  number of users
+  self-compile time
+  number of platforms
+
+  simplicity
+    no fancy type systems, tricky data representations, magic ILs
+  don't bite off too much -- 
+    only be speculative about one thing -- whole-program opt
+
+MLton's Niche
+  commercial users: PolySpace, SourceLight, AnswerMine
+
+  small one-offs where performance matters
+    e.g. the kind of thing one would writ in Python
+      but can't because it's too slow (often 100-200X slower than
+      MLton)
+    good local code helps
+    generate standalon exes helps
+  very large complicated things where SML type/module system shines,
+     lack of libraries doesn't hurt (as much)
+     whole-program helps
+
+types are hash-consed (must be careful to walk types as dags)
+
+Safe-for space
+
+Profiling
+  How it works
+    insert Enter/Leav
+    very backend
+    At runtime 
+      gather counts via timer interrupts or C calls
+    -profile stack
+  whole-program => get nicecall graph
+




More information about the MLton-commit mailing list