sig
  type temp_id = int
  and identifier = string
  and field = Il1.identifier * Ctt_abstree.c_type
  and il_switch_label = CASE of Big_int.big_int | DEFAULT
  and il_if_type = IFNOT | IFTRUE
  and il_binop =
      ILbinTimes
    | ILbinDiv
    | ILbinPlusVV
    | ILbinMinusVV
    | ILbinPlusPV
    | ILbinMinusPP
    | ILbinMinusPV
    | ILbinModulo
    | ILbinLshift
    | ILbinRshift
    | ILbinLogAnd
    | ILbinLogOr
    | ILbinIntAnd
    | ILbinIntOr
    | ILbinIntXor
    | ILbinLessThan
    | ILbinLessEqual
    | ILbinGtrThan
    | ILbinGtrEqual
    | ILbinEqual
    | ILbinNotEqual
  and il_lvalue =
      ILlvPtr of Il1.temp_id
    | ILlvVar of Il1.identifier * Ctt_abstree.c_type
    | ILlvTemp of Il1.temp_id
  and il_expr =
      ILexpCoerce of Ctt_abstree.c_type * Il1.temp_id
    | ILexpConstant of Cttm_abstree.c_constants
    | ILexpUndefined
    | ILexpBinop of Il1.il_binop * Il1.temp_id * Il1.temp_id
    | ILexpUnaryop of Cttm_abstree.unaryop * Il1.temp_id
    | ILexpInvoke of Il1.il_lvalue * Il1.temp_id list
    | ILexpAddress of Il1.il_lvalue * Il1.field list
    | ILexpArgument of int
    | ILexpIdent of Il1.temp_id
  and il1_desc =
      IL1stmtDeclAutoScalar of Ctt_abstree.local_storage_class *
        Ctt_abstree.c_type * Il1.identifier * Il1.temp_id option
    | IL1stmtDeclBulk of Ctt_abstree.local_storage_class *
        Ctt_abstree.c_type * Il1.identifier *
        Cttm_abstree.cttm_initializer option
    | IL1stmtIf of Il1.il_if_type * Il1.temp_id * int
    | IL1stmtSwitch of Il1.temp_id * (Il1.il_switch_label * int) list
    | IL1stmtGoto of int
    | IL1stmtReturn of Il1.temp_id option
    | IL1stmtDefTemp of Il1.temp_id * Ctt_abstree.c_type * Il1.il_expr
    | IL1stmtReadToTemp of Il1.temp_id * Ctt_abstree.c_type * Il1.il_lvalue *
        Il1.field list
    | IL1stmtWrite of Il1.il_lvalue * Il1.field list * Il1.temp_id
    | IL1stmtSequence of Il1.il1 list
    | IL1stmtParallel of Il1.il1 list
  and il1 = {
    il1_depends : Il1.temp_id Set_list.set;
    il1_defines : Il1.temp_id Set_list.set;
    il1_t : Il1.il1_desc;
  } 
  and il1_basic_block = {
    predecessor : int list;
    successor : int list;
    immediate_dominator : int;
    code : Il1.il1 list;
  } 
  and il1_function_body = Il1.il1_basic_block array
  and il1_global_declaration =
      IL1declFunction of Ctt_abstree.global_storage_class *
        Ctt_abstree.c_type * Il1.identifier * Il1.identifier list *
        Il1.il1_function_body
    | IL1declVariable of Ctt_abstree.global_storage_class *
        Ctt_abstree.c_type * Il1.identifier *
        Cttm_abstree.cttm_initializer option
end