Intermediate representation

LANCE uses a three address code intermediate representation (IR). Complex expressions are decomposed into three address code by means of insertion of temporary variables. High-level control flow statements (loops, switch etc.) are replaced by equivalent jump constructs close to the assembly level.

The IR can be dumped to a file in low level ANSI C syntax. This implies a clear and easy-to-learn IR semantics (subset of C semantics) and enables executability of the IR, which enables verification of new IR transformation passes and fine-grained code instrumentation for profiling purposes.