<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<title>SSA2</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<link rel="stylesheet" href="./asciidoctor.css">
<link rel="stylesheet" href="./mlton.css">

</head>
<body class="article">
<div id="mlton-header">
<div id="mlton-header-text">
<h2>
<a href="./Home">
MLton
20241230
</a>
</h2>
</div>
</div>
<div id="header">
<h1>SSA2</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><a href="#">SSA2</a> is an <a href="IntermediateLanguage">IntermediateLanguage</a>, translated from <a href="SSA">SSA</a> by
<a href="ToSSA2">ToSSA2</a>, optimized by <a href="SSA2Simplify">SSA2Simplify</a>, and translated by
<a href="ToRSSA">ToRSSA</a> to <a href="RSSA">RSSA</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_description">Description</h2>
<div class="sectionbody">
<div class="paragraph">
<p><a href="#">SSA2</a> is a <a href="FirstOrder">FirstOrder</a>, <a href="SimplyTyped">SimplyTyped</a>
<a href="IntermediateLanguage">IntermediateLanguage</a>, a slight variant of the <a href="SSA">SSA</a>
<a href="IntermediateLanguage">IntermediateLanguage</a>,</p>
</div>
<div class="paragraph">
<p>Like <a href="SSA">SSA</a>, an <a href="#">SSA2</a> program consists of a collection of datatype
declarations, a sequence of global statements, and a collection of
functions, along with a distinguished "main" function.  Each function
consists of a collection of basic blocks, where each basic block is a
sequence of statements ending with some control transfer.</p>
</div>
<div class="paragraph">
<p>Unlike <a href="SSA">SSA</a>, <a href="#">SSA2</a> includes mutable fields in objects and makes
the vector type constructor n-ary instead of unary.  This allows
optimizations like <a href="RefFlatten">RefFlatten</a> and <a href="DeepFlatten">DeepFlatten</a> to be expressed.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_implementation">Implementation</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/MLton/mlton/blob/master/mlton/ssa/ssa2.sig"><code>ssa2.sig</code></a></p>
</li>
<li>
<p><a href="https://github.com/MLton/mlton/blob/master/mlton/ssa/ssa2.fun"><code>ssa2.fun</code></a></p>
</li>
<li>
<p><a href="https://github.com/MLton/mlton/blob/master/mlton/ssa/ssa-tree2.sig"><code>ssa-tree2.sig</code></a></p>
</li>
<li>
<p><a href="https://github.com/MLton/mlton/blob/master/mlton/ssa/ssa-tree2.fun"><code>ssa-tree2.fun</code></a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_type_checking">Type Checking</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Type checking (<a href="https://github.com/MLton/mlton/blob/master/mlton/ssa/type-check2.sig"><code>type-check2.sig</code></a>,
<a href="https://github.com/MLton/mlton/blob/master/mlton/ssa/type-check2.fun"><code>type-check2.fun</code></a>) of a <a href="#">SSA2</a>
program verifies the following:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>no duplicate definitions (tycons, cons, vars, labels, funcs)</p>
</li>
<li>
<p>no out of scope references (tycons, cons, vars, labels, funcs)</p>
</li>
<li>
<p>variable definitions dominate variable uses</p>
</li>
<li>
<p>case transfers are exhaustive and irredundant</p>
</li>
<li>
<p><code>Enter</code>/<code>Leave</code> profile statements match</p>
</li>
<li>
<p>"traditional" well-typedness</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_details_and_notes">Details and Notes</h2>
<div class="sectionbody">
<div class="paragraph">
<p>SSA is an abbreviation for Static Single Assignment.</p>
</div>
</div>
</div>
</div>
<div id="mlton-footer">
<div id="mlton-footer-text">
<div>
Last updated Thu Oct 21 15:53:06 2021 -0400 by Matthew Fluet.
<a href="https://github.com/MLton/mlton/commits/master/doc/guide/src/SSA2.adoc">Log</a>
<a href="https://github.com/MLton/mlton/edit/master/doc/guide/src/SSA2.adoc">Edit</a>
</div>
</div>
</body>
</html>