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 34 35 36 37 38 39 40
|
(*
* This module performs critical path reduction.
* Jobs include:
* 1. Transform conditional branches into conditional moves.
* 2. Migrate branches out of loops
*
* -- Allen (leunga@cs.nyu.edu)
*)
functor SSACPR(SSA : SSA) : SSA_OPTIMIZATION =
struct
structure SSA = SSA
structure CFG = SSA.CFG
structure RTL = SSA.RTL
structure T = RTL.T
structure G = Graph
structure A = Array
type flowgraph = SSA.ssa
val name = "Critical Path Reduction"
infix ||-
fun run(SSA as G.GRAPH ssa) =
let val Dom as G.GRAPH dom = SSA.dom SSA
val CFG as G.GRAPH cfg = SSA.cfg SSA
val [ENTRY] = #entries dom ()
val {sources, phis, ops, sinks, ...} = SSA.nodes SSA
fun walk X =
let
in app walk (#succ dom X)
end
in walk ENTRY;
SSA
end
end
|