sig
  type reg = int
  type value = Reg of ILVM.reg | Imm of int
  type op2 = Add | Sub | Mul | Div | Mod | LT | Eq
  type instr =
      Goto of ILVM.value
    | Exit of ILVM.value
    | Abort
    | Op2 of ILVM.reg * ILVM.op2 * ILVM.value * ILVM.value * ILVM.instr
    | Copy of ILVM.reg * ILVM.value * ILVM.instr
    | Load of ILVM.reg * ILVM.value * ILVM.instr
    | Store of ILVM.reg * ILVM.value * ILVM.instr
    | Ifz of ILVM.reg * ILVM.instr * ILVM.instr
    | Malloc of ILVM.reg * ILVM.value * ILVM.instr
    | Free of ILVM.reg * ILVM.instr
  type block = int * ILVM.instr
  val string_of_blocks : ILVM.block list -> string
end