Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | IntroduceLoops |
2 | ============== | |
3 | ||
4 | <:IntroduceLoops:> is an optimization pass for the <:SSA:> | |
5 | <:IntermediateLanguage:>, invoked from <:SSASimplify:>. | |
6 | ||
7 | == Description == | |
8 | ||
9 | This pass rewrites any <:SSA:> function that calls itself in tail | |
10 | position into one with a local loop and no self tail calls. | |
11 | ||
12 | A <:SSA:> function like | |
13 | ---- | |
14 | fun F (arg_0, arg_1) = L_0 () | |
15 | ... | |
16 | L_16 (x_0) | |
17 | ... | |
18 | F (z_0, z_1) Tail | |
19 | ... | |
20 | ---- | |
21 | becomes | |
22 | ---- | |
23 | fun F (arg_0', arg_1') = loopS_0 () | |
24 | loopS_0 () | |
25 | loop_0 (arg_0', arg_1') | |
26 | loop_0 (arg_0, arg_1) | |
27 | L_0 () | |
28 | ... | |
29 | L_16 (x_0) | |
30 | ... | |
31 | loop_0 (z_0, z_1) | |
32 | ... | |
33 | ---- | |
34 | ||
35 | == Implementation == | |
36 | ||
37 | * <!ViewGitFile(mlton,master,mlton/ssa/introduce-loops.fun)> | |
38 | ||
39 | == Details and Notes == | |
40 | ||
41 | {empty} |