示例#1
0
    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();
        }
    }
示例#2
0
    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);
    }
示例#3
0
    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();
    }