functor (St : St_type) ->
sig
type btr3 = unit -> St.t * BTL.iblock
type btr2 = St.s -> StoreMotionOracle.Make.btr3
type btr1 = unit -> St.t * StoreMotionOracle.Make.btr2
type btr0 = St.t -> StoreMotionOracle.Make.btr1
type ibtr3 = unit -> BTL.iblock
type ibtr2 = St.s -> St.s * StoreMotionOracle.Make.ibtr3
type ibtr1 = unit -> StoreMotionOracle.Make.ibtr2
type ibtr0 =
St.t ->
(St.t, St.t) StoreMotionOracle.bblock_exit *
StoreMotionOracle.Make.ibtr1
type analyse_node = {
mutable an_Delayable : St.t option;
mutable an_tr1 : StoreMotionOracle.Make.btr1 option;
mutable an_Delayable_exit : St.t option;
mutable an_tr2 : StoreMotionOracle.Make.btr2;
mutable an_Used : St.s option;
mutable an_tr3 : StoreMotionOracle.Make.btr3 option;
}
type analyze_result = {
aux_tbl : (StoreMotionOracle.address, Registers.reg) Stdlib.Hashtbl.t;
an_nds : StoreMotionOracle.Make.analyse_node Maps.PTree.t;
stats : StoreMotionOracle.analyze_stats;
}
val transfer_core :
BTL.coq_function ->
BTL.code * BTL_Invariants.gluemap *
StoreMotionOracle.Make.analyze_result
val print_analysis :
Stdlib.out_channel ->
BTL.coq_function * StoreMotionOracle.Make.analyze_result -> unit
val transfer : BTL.coq_function -> BTL.code * BTL_Invariants.gluemap
end