Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / localhost / DeadCode
CommitLineData
7f918cf1
CE
1<!DOCTYPE html>\r
2<html lang="en">\r
3<head>\r
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
5<meta name="generator" content="AsciiDoc 8.6.9">\r
6<title>DeadCode</title>\r
7<link rel="stylesheet" href="./asciidoc.css" type="text/css">\r
8<link rel="stylesheet" href="./pygments.css" type="text/css">\r
9\r
10\r
11<script type="text/javascript" src="./asciidoc.js"></script>\r
12<script type="text/javascript">\r
13/*<![CDATA[*/\r
14asciidoc.install();\r
15/*]]>*/\r
16</script>\r
17<link rel="stylesheet" href="./mlton.css" type="text/css">\r
18</head>\r
19<body class="article">\r
20<div id="banner">\r
21<div id="banner-home">\r
22<a href="./Home">MLton 20180207</a>\r
23</div>\r
24</div>\r
25<div id="header">\r
26<h1>DeadCode</h1>\r
27</div>\r
28<div id="content">\r
29<div id="preamble">\r
30<div class="sectionbody">\r
31<div class="paragraph"><p><a href="DeadCode">DeadCode</a> is an optimization pass for the <a href="CoreML">CoreML</a>\r
32<a href="IntermediateLanguage">IntermediateLanguage</a>, invoked from <a href="CoreMLSimplify">CoreMLSimplify</a>.</p></div>\r
33</div>\r
34</div>\r
35<div class="sect1">\r
36<h2 id="_description">Description</h2>\r
37<div class="sectionbody">\r
38<div class="paragraph"><p>This pass eliminates declarations from the\r
39<a href="BasisLibrary">Basis Library</a> not needed by the user program.</p></div>\r
40</div>\r
41</div>\r
42<div class="sect1">\r
43<h2 id="_implementation">Implementation</h2>\r
44<div class="sectionbody">\r
45<div class="ulist"><ul>\r
46<li>\r
47<p>\r
48<a href="https://github.com/MLton/mlton/blob/master/mlton/core-ml/dead-code.sig"><span class="monospaced">dead-code.sig</span></a>\r
49</p>\r
50</li>\r
51<li>\r
52<p>\r
53<a href="https://github.com/MLton/mlton/blob/master/mlton/core-ml/dead-code.fun"><span class="monospaced">dead-code.fun</span></a>\r
54</p>\r
55</li>\r
56</ul></div>\r
57</div>\r
58</div>\r
59<div class="sect1">\r
60<h2 id="_details_and_notes">Details and Notes</h2>\r
61<div class="sectionbody">\r
62<div class="paragraph"><p>In order to compile small programs rapidly, a pass of dead code\r
63elimination is run in order to eliminate as much of the Basis Library\r
64as possible. The dead code elimination algorithm used is not safe in\r
65general, and only works because the Basis Library implementation has\r
66special properties:</p></div>\r
67<div class="ulist"><ul>\r
68<li>\r
69<p>\r
70it terminates\r
71</p>\r
72</li>\r
73<li>\r
74<p>\r
75it performs no I/O\r
76</p>\r
77</li>\r
78</ul></div>\r
79<div class="paragraph"><p>The dead code elimination includes the minimal set of\r
80declarations from the Basis Library so that there are no free\r
81variables in the user program (or remaining Basis Library\r
82implementation). It has a special hack to include all\r
83bindings of the form:</p></div>\r
84<div class="listingblock">\r
85<div class="content"><div class="highlight"><pre><span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="p">_</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">...</span><span class="w"></span>\r
86</pre></div></div></div>\r
87<div class="paragraph"><p>There is an <a href="MLBasisAnnotations">ML Basis annotation</a>,\r
88<span class="monospaced">deadCode true</span>, that governs which code is subject to this unsafe\r
89dead-code elimination.</p></div>\r
90</div>\r
91</div>\r
92</div>\r
93<div id="footnotes"><hr></div>\r
94<div id="footer">\r
95<div id="footer-text">\r
96</div>\r
97<div id="footer-badges">\r
98</div>\r
99</div>\r
100</body>\r
101</html>\r