sig
  type ident = string
  type register = Register.t
  type label = Label.t
  type operand = Reg of Register.t | Spilled of int
  type instr =
      Eload of Ltltree.register * int * Ltltree.register * Ltltree.label
    | Estore of Ltltree.register * Ltltree.register * int * Ltltree.label
    | Egoto of Ltltree.label
    | Ereturn
    | Econst of int32 * Ltltree.operand * Ltltree.label
    | Emunop of Ops.munop * Ltltree.operand * Ltltree.label
    | Embinop of Ops.mbinop * Ltltree.operand * Ltltree.operand *
        Ltltree.label
    | Emubranch of Ops.mubranch * Ltltree.operand * Ltltree.label *
        Ltltree.label
    | Embbranch of Ops.mbbranch * Ltltree.operand * Ltltree.operand *
        Ltltree.label * Ltltree.label
    | Epush of Ltltree.operand * Ltltree.label
    | Ecall of Ltltree.ident * Ltltree.label
    | Epop of Ltltree.register * Ltltree.label
  type cfg = Ltltree.instr Label.map
  type deffun = {
    fun_name : Ltltree.ident;
    fun_entry : Ltltree.label;
    fun_body : Ltltree.cfg;
  }
  type file = { funs : Ltltree.deffun list; }
  val succ : Ltltree.instr -> Ltltree.label list
  val print_operand : Stdlib.Format.formatter -> Ltltree.operand -> unit
  val print_instr : Stdlib.Format.formatter -> Ltltree.instr -> unit
  val print_graph :
    Stdlib.Format.formatter -> Ltltree.cfg -> Ltltree.label -> unit
  val print_deffun : Stdlib.Format.formatter -> Ltltree.deffun -> unit
  val print_file : Stdlib.Format.formatter -> Ltltree.file -> unit
end