MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
The clos Plugin

See also
mim::plug::clos

Dependencies

plugin core;

Operations related to longjmp

let %clos.BufPtr = %mem.Ptr0 I8;
axm %clos.alloc_jmpbuf: %mem.M 0 → [%mem.M 0, %clos.BufPtr];
axm %clos.setjmp: [%mem.M 0, %clos.BufPtr] → [%mem.M 0, I32];
axm %clos.longjmp: Cn [%mem.M 0, %clos.BufPtr, I32];

Closure Attribute

Used internally to classify the use of differen Lambdas. mim::plug::clos::ClosConvPrep places these attributes:

  • ret: returning lambda
  • freeBB: ordinary basic block (see mim::Lam::is_basicblock())
  • fstclassBB: basic block that is passed around
  • esc: lambda that escapes its parent scope
  • bot: no special use
axm %clos.attr(returning, freeBB, fstclassBB, esc, bottom): {T: *} → T → T, normalize_clos;

Passes and Phases

Passes

axm %clos.clos_conv_prep_pass: %compile.Pass;
axm %clos.branch_clos_pass: %compile.Pass;
axm %clos.lower_typed_clos_prep_pass: %compile.Pass;
axm %clos.clos2sjlj_pass: %compile.Pass;

Phases

axm %clos.clos_conv_phase: %compile.Phase;
axm %clos.lower_typed_clos_phase: %compile.Phase;