public static void Main(string [] args) { List <IRTuple> irstream = new List <IRTuple>(); irstream.Add(new IRTuple(IrOp.LABEL, "F$1")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "T", "R2")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "A", "R0")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "B", "R1")); irstream.Add(new IRTupleOneOpImm <int>(IrOp.STORE, "C", 0)); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "D", "A")); irstream.Add(new IRTuple(IrOp.LABEL, "L$1")); irstream.Add(new IRTupleTwoOp(IrOp.ADD, "C", "C", "B")); irstream.Add(new IRTupleOneOpImm <int>(IrOp.STORE, "T$1", 1)); irstream.Add(new IRTupleTwoOp(IrOp.SUB, "D", "D", "T$1")); irstream.Add(new IRTupleOneOpImm <int>(IrOp.STORE, "T$2", 0)); irstream.Add(new IRTupleTwoOp(IrOp.LTE, "T$3", "D", "T$2")); irstream.Add(new IRTupleOneOpIdent(IrOp.JMPF, "L$1", "T$3")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "R0", "C")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "R2", "T")); IRGraph graph = new IRGraph(irstream); List <string> livein; List <List <string> > liveouts; graph.ComputeLiveness(out livein, out liveouts); Dictionary <string, string> registerAllocation = Allocate.run(liveouts, livein); List <IRTuple> irstream_out = new List <IRTuple>(); foreach (IRTuple irt in irstream) { IRTuple translated = irt.TranslateNames(registerAllocation); irstream_out.Add(translated); } Console.WriteLine(); foreach (var kvp in registerAllocation) { Console.WriteLine("{0} : {1}", kvp.Key, kvp.Value); } Console.WriteLine(); foreach (IRTuple irt in irstream_out) { irt.Print(); Console.WriteLine(); } }
public static void Main(string [] args) { List <IRTuple> irstream = new List <IRTuple>(); irstream.Add(new IRTuple(IrOp.LABEL, "F$1")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "T", "R3")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "A", "R1")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "B", "R2")); irstream.Add(new IRTupleOneOpImm <int>(IrOp.STORE, "C", 0)); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "D", "A")); irstream.Add(new IRTuple(IrOp.LABEL, "Label")); irstream.Add(new IRTupleTwoOp(IrOp.ADD, "C", "C", "B")); irstream.Add(new IRTupleOneOpImm <int>(IrOp.STORE, "T$1", 1)); irstream.Add(new IRTupleTwoOp(IrOp.SUB, "D", "D", "T$1")); irstream.Add(new IRTupleOneOpImm <int>(IrOp.STORE, "T$2", 0)); irstream.Add(new IRTupleTwoOp(IrOp.LTE, "T$3", "D", "T$2")); irstream.Add(new IRTupleOneOpIdent(IrOp.JMPF, "Label", "T$3")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "R1", "C")); irstream.Add(new IRTupleOneOpIdent(IrOp.STORE, "R3", "T")); Allocate.run(irstream); }
public static void Main() { //test 1 List <List <string> > input = new List <List <string> >(); input.Add(new List <string>() { "T", "R1", "R2", "T" }); input.Add(new List <string>() { "A", "R2", "A", "T" }); input.Add(new List <string>() { "B", "A", "B", "T" }); input.Add(new List <string>() { "C", "A", "B", "C", "T" }); input.Add(new List <string>() { "D", "B", "C", "D", "T" }); input.Add(new List <string>() { "C", "B", "C", "D", "T" }); input.Add(new List <string>() { "D", "B", "C", "D", "T" }); input.Add(new List <string>() { "D", "B", "C", "D", "T" }); input.Add(new List <string>() { "R1", "R1", "T" }); input.Add(new List <string>() { "R3", "R1", "R3" }); List <string> livein = new List <string>() { "R0", "R1", "R2" }; Dictionary <string, string> results = Allocate.run(input, livein); Console.WriteLine(); foreach (var kvp in results) { Console.WriteLine("{0} : {1}", kvp.Key, kvp.Value); } Console.WriteLine("-----------------"); //test 2 input = new List <List <string> >(); input.Add(new List <string>() { "A", "B", "D" }); input.Add(new List <string>() { "B", "A", "C", "D", "E" }); input.Add(new List <string>() { "C", "E", "B", "F" }); input.Add(new List <string>() { "D", "A", "B", "E", "F" }); input.Add(new List <string>() { "E", "B", "E", "D", "F" }); input.Add(new List <string>() { "F", "C", "D", "E" }); livein = new List <string>(); results = Allocate.run(input, livein); Console.WriteLine(); foreach (var kvp in results) { Console.WriteLine("{0} : {1}", kvp.Key, kvp.Value); } Console.WriteLine(); }