Module Separate_side_effect


module Separate_side_effect: sig  end

val cvt_binop : Cttm_abstree.binop -> Il.il_binop

type il0_loop_label =
| BREAK
| CONTINUE

exception Error

type il0_desc =
| IL0stmtLabel of Il.identifier
| IL0stmtDeclAutoScalar of Ctt_abstree.local_storage_class * Ctt_abstree.c_type * Il.identifier
* Il.temp_id option
| IL0stmtDeclBulk of Ctt_abstree.local_storage_class * Ctt_abstree.c_type * Il.identifier
* Cttm_abstree.cttm_initializer option
| IL0stmtIf of Il.il_if_type * Il.temp_id * string
| IL0stmtSwitch of Il.temp_id * (Il.il_switch_label * string) list
| IL0stmtGoto of string
| IL0stmtReturn of Il.temp_id option
| IL0stmtDefTemp of Il.temp_id * Ctt_abstree.c_type * Il.il_expr
| IL0stmtReadToTemp of Il.temp_id * Ctt_abstree.c_type * Il.il_lvalue * Il.field list
| IL0stmtWrite of Il.il_lvalue * Il.field list * Il.temp_id
| IL0stmtSequence of il0 list
| IL0stmtParallel of il0 list


type il0 = {
   il0_depends : Il.temp_id Set_list.set;
   il0_defines : Il.temp_id Set_list.set;
   il0_nobranch : bool;
   il0_t : il0_desc;
}

type il0_function_body = il0 list

type il0_global_declaration =
| IL0declFunction of Ctt_abstree.global_storage_class * Ctt_abstree.c_type * Il.identifier
* Il.identifier list * il0
| IL0declVariable of Ctt_abstree.global_storage_class * Ctt_abstree.c_type * Il.identifier
* Cttm_abstree.cttm_initializer option

val union_list : 'a Set_list.set list -> 'a Set_list.set
val defines_il0 : il0 -> Il.temp_id Set_list.set
val defines_desc : il0_desc -> Il.temp_id Set_list.set
val depends_il0 : il0 -> Il.temp_id Set_list.set
val depends_il0lvalue : Il.il_lvalue -> Il.temp_id Set_list.set
val depends_il0expr : Il.il_expr -> Il.temp_id Set_list.set
val depends_desc : il0_desc -> Il.temp_id Set_list.set
val hasnobranch_desc : il0_desc -> bool
val make_il0 : il0_desc -> il0
val label_counter : int Pervasives.ref
val make_label : unit -> string
val new_tempid : unit -> Il.temp_id
val gentemp : Il.il_expr -> Ctt_abstree.c_type -> Il.temp_id * il0
val gentemp_read : Il.il_lvalue * Il.field list ->
Ctt_abstree.c_type -> Il.temp_id * il0
val separate_sequence : il0 list ->
il0 list -> il0 list
val enclose_sequence : il0 list -> il0
val enclose_parallel : il0 list -> il0
val translate_mexpr : Cttm_abstree.mexpr -> Il.temp_id * il0
val translate_lvalue : ?allow_invoke:bool ->
Cttm_abstree.mem_object -> Il.il_lvalue * il0 list
val translate_mexpr : Cttm_abstree.mexpr -> Il.temp_id * il0
val print_binary_operator : Il.il_binop -> string
val print_tempid : int -> string
val print_il0lv : Il.il_lvalue -> (string * Ctt_abstree.c_type) list -> string
val print_il0expr : Il.il_expr -> string
val print_il0 : il0 -> string
val replace_label_localdecl : Ctt_abstree.local_storage_class * Ctt_abstree.c_type * Il.identifier *
Cttm_abstree.cttm_initializer option -> il0 list
val replace_label : Ctt_abstree.statement -> il0
val translate_program_to_il0 : Ctt_abstree.global_declaration_desc list ->
il0_global_declaration list