Metrics and Objective Functions - Lambda-Mountain-Compiler-Backend/lambda-mountain GitHub Wiki

When appropriate, the compiler may choose from among equivalent candidate functions and data to minimize or maximize a final objective metric.

What is a Metric?

Metrics are integer tuples.

0 < 1 < (1 1) < (1 (0 2))

One Expression, Multiple Metrics

A single expression may yield multiple metrics such as memory pressure or cpu pressure.

cpu( e ) = (2 34 (5 67))
memory( e ) = (8 (9 1011))

Objectives are Goals to be Minimized

Objective functions are optimization goals that can be tweaked and weighted.

Goal: min( 0.8 * cpu(program) + 0.2 * memory(program) )

Selecting a Representation from a Class

Sometimes selecting a candidate representation is straightforward. Sometimes it can be not so simple. Constraint Solvers may be involved in the future.

let mov(src: Imm64, tgt: Register64);

let mov(src: Imm64/0, tgt: Register64);

In this code two forms of mov are declared. Types define equivalence. Metrics define preference.