pub enum CallTag {
Opaque,
RegPure,
Pure,
}Expand description
Per-call-site binding-convention tag (argpromote v2, ARGPROMOTE_REGISTERS_V2.md).
A materialized function supports two calling conventions selected per site;
this tag records which one a given Call uses and how much of the callee’s
effect is already explicit at the site. Serialized to the .harbinger wire
so that rewritten regpure sites persist; older snapshots that predate the
field load as CallTag::Opaque via #[serde(default)].
Variants§
Opaque
Implicit binding: the call reads its inputs from, and writes its outputs back to, the register file per the callee’s interface mapping (or, for a non-materialized / ⊤ callee, clobbers conservatively). The default and the only convention on freshly-lifted IR.
RegPure
The call’s register interface is fully explicit at this site: inputs
are passed as SSA args, outputs are read from the SSA return pack, and
the call neither reads nor writes register space. Requires a materialized
callee whose interface mapping the args/pack align with 1:1.
Pure
Additionally no implicit RAM effects — every effect is threaded through
operands and results, so the call is a pure SSA operation. Strictly
stronger than RegPure. (Reserved; the RAM channel that
sets it is out of scope for the register phases.)