public void LoopFinder_Reg00013() { Program prog = RewriteProgramMsdos("Fragments/regressions/r00013.asm", Address.SegPtr(0x800, 0)); ProcedureStructureBuilder psb = new ProcedureStructureBuilder(prog.Procedures.Values[0]); proc = psb.Build(); psb.AnalyzeGraph(); proc.Dump(); var lf = new LoopFinder(proc.Ordering[23], proc.Ordering[0], proc.Ordering); var intervalNodes = proc.Nodes[23].Interval.FindIntervalNodes(0); var loopNodes = lf.FindNodesInLoop(intervalNodes); proc.Dump(); Loop loop = lf.DetermineLoopType(loopNodes); Assert.IsTrue(loop is TestlessLoop); }
private void RunTest(string sExp) { try { var acg = new AbsynCodeGenerator(); acg.GenerateCode(curProc, proc.Body); GenCode(proc, sb); Assert.AreEqual(sExp, sb.ToString()); } catch { curProc.Dump(); Console.WriteLine(sb.ToString()); throw; } }
public void LoopTest() { CompileTest(delegate(ProcedureBuilder m) { m.Label("loop"); m.SideEffect(m.Fn("foo", m.Int32(4))); m.BranchIf(m.LocalBool("f"), "loop"); m.Return(); }); DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc); proc.Dump(); Assert.AreEqual(4, proc.DerivedGraphs[0].Graph.Nodes.Count); Assert.AreEqual(2, proc.DerivedGraphs[0].Intervals.Count); Assert.AreEqual(2, proc.DerivedGraphs[1].Graph.Nodes.Count); Assert.AreEqual(1, proc.DerivedGraphs[1].Intervals.Count); Assert.AreEqual(1, proc.DerivedGraphs[2].Graph.Nodes.Count); Assert.AreEqual(1, proc.DerivedGraphs[2].Intervals.Count); }