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
|
(*
* Simple minded basic block scheduling
*)
functor ClusterBasicBlockScheduler
(structure Flowgraph : FLOWGRAPH
structure BBSched : BASIC_BLOCK_SCHEDULER
sharing Flowgraph.I = BBSched.I
val cpu : string ref
) : CLUSTER_OPTIMIZATION =
struct
structure F = Flowgraph
type flowgraph = F.cluster
val name = "Basic Block Scheduling"
fun run(cluster as F.CLUSTER{blocks, annotations, ...}) =
if #contains MLRiscAnnotations.NO_OPTIMIZATION (!annotations)
then cluster
else
let val schedule = BBSched.schedule {cpu= !cpu}
fun sched(F.BBLOCK{annotations, insns, ...}) =
if #contains MLRiscAnnotations.NO_OPTIMIZATION (!annotations)
then ()
else insns := schedule(! insns)
| sched _ = ()
in app sched blocks;
cluster
end
end
|