optimization control -------------------- could be done with labels or blocks: some_label: for (int i : [0..10]) { code.opt.something(some_label); j += f(i); } codeblock some_block { for (int i : [0..10]) { code.opt.something(some_block); j += f(i); } } move out -------- loops: for (int i : [0..i-1]) { for (int j : [0..j-1]) { code.opt.move_out_var(loops, [a]); if (a == 0) c += f(i, j); else if (a == 1) c += f(j, i); else c += f(i, i-j); } } or // won't work. the code doesn't say which code should be moved out. // it could be if, if+for or if+for+for loops: for (int i : [0..i-1]) { for (int j : [0..j-1]) { if (a == 0) { code.opt.move_out(loops); c += f(i, j); } else if (a == 1) { code.opt.move_out(loops); c += f(j, i); } else { code.opt.move_out(loops); c += f(i, i-j); } } } produces: if (a == 0) { for (int i : [0..i-1]) { for (int j : [0..j-1]) { c += f(i, j); } } } else if (a == 1) { for (int i : [0..i-1]) { for (int j : [0..j-1]) { c += f(j, i); } } } else { ... } split_here ---------- loops: for (int i : [0..i-1]) { for (int j : [0..j-1]) { lots(); of(); _code(); code.opt.split_here(loops); even(); more(); _code(); } } produces: loops: for (int i : [0..i-1]) { for (int j : [0..j-1]) { lots(); of(); _code(); } } for (int i : [0..i-1]) { for (int j : [0..j-1]) { even(); more(); _code(); } } enforced tail call optimization -------------------------------- int f(int x, int y) { if y <= 0 return x; else continue f(x+y, y-1); }