1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
(*
* Tarjan et als. idef/iuse sets.
*
* -- Allen
*)
functor IDefs
(structure Dom : DOMINATOR_TREE
structure CFG : CONTROL_FLOW_GRAPH
) : MLRISC_IDEFS =
struct
structure Dom = Dom
structure CFG = CFG
structure I = CFG.I
structure C = I.C
structure G = Graph
structure IDefs = ComputeIDefs(I.C)
fun idefs defUse cfg =
let fun compute_def_use(b,CFG.BLOCK{insns,...}) =
let fun du([],D,U) = (List.concat D,List.concat U)
| du(i::is,D,U) =
let val (d,u) = defUse i
in du(is,d::D,u::U) end
in du(!insns,[],[])
end
in
IDefs.compute_idefs {cfg=cfg,def_use=compute_def_use}
end
end
|