jon.recoil.org

Module Global_flow_graph.Relations

type 'a atom = [> `Atom of Flambda2_datalog.Datalog.atom ] as 'a

accessor ~to_ field ~base represents a directed flow from the field field of variable base into the variable to_.

It corresponds to a projection to_ = base.field.

constructor ~base field ~from represents a directed flow from variable from into the field field or allocation base.

It corresponds to an allocation base = { field = from; _ } (there might be other fields in the allocation).

argument ~from param ~base represents a directed flow from variable from into the parameter param of function base.

It corresponds to a call base(param = from, _) (there might be other parameters in the call).

Note that base is a virtual object representing function-like calls; see the comment about encoding of function calls in Dep_solver.

parameter ~base param ~to_ represents a directed flow from function parameter param into variable to_.

There is no surface language syntax for this; we write to_ = base@param.

Note that base is a virtual object representing function-like calls; see the comment about encoding of function calls in Dep_solver.

val zero_alloc_source : Flambda2_identifiers.Code_id_or_name.t term -> _ atom