Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | RSSA |
2 | ==== | |
3 | ||
4 | <:RSSA:> is an <:IntermediateLanguage:>, translated from <:SSA2:> by | |
5 | <:ToRSSA:>, optimized by <:RSSASimplify:>, and translated by | |
6 | <:ToMachine:> to <:Machine:>. | |
7 | ||
8 | == Description == | |
9 | ||
10 | <:RSSA:> is a <:IntermediateLanguage:> that makes representation | |
11 | decisions explicit. | |
12 | ||
13 | == Implementation == | |
14 | ||
15 | * <!ViewGitFile(mlton,master,mlton/backend/rssa.sig)> | |
16 | * <!ViewGitFile(mlton,master,mlton/backend/rssa.fun)> | |
17 | ||
18 | == Type Checking == | |
19 | ||
20 | The new type language is aimed at expressing bit-level control over | |
21 | layout and associated packing of data representations. There are | |
22 | singleton types that denote constants, other atomic types for things | |
23 | like integers and reals, and arbitrary sum types and sequence (tuple) | |
24 | types. The big change to the type system is that type checking is now | |
25 | based on subtyping, not type equality. So, for example, the singleton | |
26 | type `0xFFFFEEBB` whose only inhabitant is the eponymous constant is a | |
27 | subtype of the type `Word32`. | |
28 | ||
29 | == Details and Notes == | |
30 | ||
31 | SSA is an abbreviation for Static Single Assignment. The <:RSSA:> | |
32 | <:IntermediateLanguage:> is a variant of SSA. |