import "cffc.hff"; struct IRCtx { alloc *Allocator, } struct IRInst; struct IRFn { body *IRInst } struct IRValue { ty *const Type, u enum union { IImm i64, FImm f64, SImm [#]const u8, BImm bool, Null, Tmp int, Local *Decl, Global *Decl, } } enum union IRArg { Val IRValue, Ty *const Type, Fn *Decl, } enum IRInstT { nop, neg, not, compl, fneg, add, sub, mul, div, mod, band, bor, xor, lsl, lsr, asr, fadd, fsub, fmul, fdiv, eq, neq, lt, lteq, ftrunc, itof, getelem, pgetelem, copy, setvar, load, store, call, b, beqz, ret0, ret, } struct IRInst { t IRInstT, next *IRInst, branch *IRInst, call_nargs int, args [0]IRArg, } extern fn irdump(*IRInst) void;