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); }
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); }