Exemple #1
0
            void Run()
            {
                Console.WriteLine("Welcome to LoopTesterApp, C# edition");
                Console.WriteLine("Constructing Simple CFG...");

                cfg.CreateNode(0);
                BuildBaseLoop(0);
                cfg.CreateNode(1);
                BuildConnect(0, 2);

                Console.WriteLine("15000 dummy loops");
                for (int i = 0; i < 15000; ++i)
                {
                    FindHavlakLoops(cfg);
                }

                Console.WriteLine("Constructing CFG...");
                int n = 2;

                for (int parlooptrees = 0; parlooptrees < 10; ++parlooptrees)
                {
                    cfg.CreateNode(n + 1);
                    BuildConnect(2, n + 1);
                    n++;

                    for (int i = 0; i < 100; ++i)
                    {
                        int top = n;

                        n = BuildStraight(n, 1);
                        for (int j = 0; j < 25; ++j)
                        {
                            n = BuildBaseLoop(n);
                        }

                        int bottom = BuildStraight(n, 1);
                        BuildConnect(n, top);
                        n = bottom;
                    }

                    BuildConnect(n, 1);
                }

                Console.WriteLine("Performing Loop Recognition\n1 Iteration");

                int loops = FindHavlakLoops(cfg);

                Console.WriteLine("Another 50 iterations...");

                int sum = 0;

                for (int i = 0; i < 50; ++i)
                {
                    Console.Write(".");
                    sum += FindHavlakLoops(cfg);
                }
                Console.WriteLine();
                Console.WriteLine("Found {0} loops (including artificial root node) ({1})", loops, sum);
            }
Exemple #2
0
 public BasicBlockEdge(CFG cfg, int fromName, int toName)
 {
     From = cfg.CreateNode(fromName);
     To   = cfg.CreateNode(toName);
     From.OutEdges.Add(To);
     To.InEdges.Add(From);
     cfg.AddEdge(this);
 }
Exemple #3
0
 public BasicBlockEdge(CFG cfg, int fromName, int toName)
 {
     From = cfg.CreateNode(fromName);
     To = cfg.CreateNode(toName);
     From.OutEdges.Add(To);
     To.InEdges.Add(From);
     cfg.AddEdge(this);
 }