module StoreMotionOracle: sig
.. end
Store motion oracle that tries to delay store instructions
val max_simult_cand : int
val print_stats_opt : bool
val write_stats_opt : bool
type
address = {
|
a_chunk : AST.memory_chunk ; |
|
a_addr : Op.addressing ; |
|
a_args : Registers.reg list ; |
|
a_aval : ValueDomain.aval option ; |
}
val mk_address : AST.memory_chunk ->
Op.addressing ->
Registers.reg list -> ValueDomain.aval option -> address
val address_disjoint : address -> address -> bool
val print_address : Stdlib.out_channel -> address -> unit
type
cand = {
|
c_addr : address ; |
|
c_aux : Registers.reg ; |
|
c_src : BTL_Invariants.store_num_t ; |
}
val cand_eq : cand -> cand -> bool
val cand_dep_reg : Registers.reg -> cand -> bool
val store_cand : cand -> BTL.iblock
type
stores = cand list
val store_list_before : stores -> BTL.iblock -> BTL.iblock
type ('a, 'b)
join_res =
| |
Jdiff of 'a |
| |
Jmerge of 'b |
val split_at : int -> 'a list -> 'a list * 'a list
val slice : int -> int -> 'a list -> 'a list
module type St_type = sig
.. end
module StTotal: sig
.. end
module StPartial: sig
.. end
val final_succ : BTL.final -> BTL.exit list
val final_smash : BTL.final -> bool
val traverse_iblock : (BTL.iblock -> BTL.iblock) -> BTL.iblock -> BTL.iblock
type
analyze_stats = {
|
mutable nb_stores : int ; |
|
mutable nb_override : int ; |
|
mutable nb_moved : int ; |
|
mutable nb_nodes : int ; |
|
mutable nb_iter_Delayable : int ; |
|
mutable nb_iter_Used : int ; |
|
mutable nb_limit : int ; |
}
val init_stats : int -> analyze_stats
val print_stats : Stdlib.out_channel -> analyze_stats -> unit
val write_stats : Stdlib.out_channel -> analyze_stats -> unit
type ('a, 'b)
bblock_exit =
| |
BBcont of 'a |
| |
BBfin of 'b |
module Make: