[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