fun getInstrList filename = let val frags = Main.getfrags filename fun getInstrs (Frame.PROC{body,frame}) = let val stms = Canon.linearize body val stms' = Canon.traceSchedule(Canon.basicBlocks stms) val instrs = List.concat(map (IA32Gen.codegen frame) stms') in instrs end | getInstrs (Frame.STRING(_,_)) = nil val instrList = map getInstrs frags in instrList end fun showDef filename = let val instrs = hd(getInstrList filename) val (graph as Flow.FGRAPH{control,def,...},_) = MakeGraph.instrs2graph instrs val fgNodes = Graph.nodes(control) fun takeFromDefTable(node) = valOf(Graph.Table.look(def,node)) val defList = map takeFromDefTable fgNodes val i2s = Int.toString val n = ref 0 fun showListContents(list) = (print(i2s(!n) ^ ": "); app (fn i => print(Main.makestring(i) ^ " ")) list; print "\n"; n := !n + 1) in app showListContents defList end fun showUse filename = let val instrs = hd(getInstrList filename) val (graph as Flow.FGRAPH{control,use,...},_) = MakeGraph.instrs2graph instrs val fgNodes = Graph.nodes(control) fun takeFromUseTable(node) = valOf(Graph.Table.look(use,node)) val useList = map takeFromUseTable fgNodes val i2s = Int.toString val n = ref 0 fun showListContents(list) = (print(i2s(!n) ^ ": "); app (fn i => print(Main.makestring(i) ^ " ")) list; print "\n"; n := !n + 1) in app showListContents useList end fun showIn filename = let val instrsList = getInstrList filename val instrs = hd(instrsList) val (graph as Flow.FGRAPH{control,...},_) = MakeGraph.instrs2graph instrs val (inTable,_) = Liveness.calcLiveness graph val otSize = Liveness.Map.numItems inTable val fgNodes = Graph.nodes(control) fun takeFromInTable(node) = valOf(Graph.Table.look(inTable,node)) val inList = map takeFromInTable fgNodes val i2s = Int.toString val n = ref 0 fun showSetContents(set) = let val sList = Liveness.Set.listItems(set) in (print(i2s(!n) ^ ": "); app (fn i => print(Main.makestring(i) ^ " ")) sList; print "\n"; n := !n + 1) end in app showSetContents inList end fun showOut filename = let val instrsList = getInstrList filename val instrs = hd(instrsList) val (graph as Flow.FGRAPH{control,...},_) = MakeGraph.instrs2graph instrs val (_,outTable) = Liveness.calcLiveness graph val otSize = Liveness.Map.numItems outTable val fgNodes = Graph.nodes(control) fun takeFromOutTable(node) = valOf(Graph.Table.look(outTable,node)) val outList = map takeFromOutTable fgNodes val i2s = Int.toString val n = ref 0 fun showSetContents(set) = let val sList = Liveness.Set.listItems(set) in (print(i2s(!n) ^ ": "); app (fn i => print(Main.makestring(i) ^ " ")) sList; print "\n"; n := !n + 1) end in app showSetContents outList end