Remark: in the paper "Counting Immutable Beans" the concepts of
free and live variables coincide because the paper does not consider
join points. For example, consider the function body B
let x := ctor_0;
jmp block_1 x
in a context where we have the join point block_1
defined as
block_1 (x : obj) : obj :=
let z := ctor_0 x y;
ret z
The variable y
is live in the function body B
since it occurs in
block_1
which is "invoked" by B
.
We use State Context
instead of ReaderT Context Id
because we remove
non local joint points from Context
whenever we visit them instead of
maintaining a set of visited non local join points.
Remark: we don't need to track local join points because we assume there is no variable or join point shadowing in our IR.
Instances For
Instances For
Instances For
Instances For
Instances For
Instances For
Return true if x
is live in the function body b
in the context ctx
.
Remark: the context only needs to contain all (free) join point declarations.
Recall that we say that a join point j
is free in b
if b
contains
FnBody.jmp j ys
and j
is not local.