IntroduceLoops is an optimization pass for the SSA IntermediateLanguage, invoked from SSASimplify.

Description

This pass rewrites any SSA function that calls itself in tail position into one with a local loop and no self tail calls.

A SSA function like

fun F (arg_0, arg_1) = L_0 ()
  ...
  L_16 (x_0)
    ...
    F (z_0, z_1) Tail
  ...

becomes

fun F (arg_0', arg_1') = loopS_0 ()
  loopS_0 ()
    loop_0 (arg_0', arg_1')
  loop_0 (arg_0, arg_1)
    L_0 ()
  ...
  L_16 (x_0)
    ...
    loop_0 (z_0, z_1)
  ...

Implementation

Details and Notes