public void SrtSimpleLoop() { Procedure proc = BuildSimpleLoop(); var dom = proc.CreateBlockDominatorGraph(); SsaTransform ssa = new SsaTransform(new ProgramDataFlow(), proc, dom); proc.Write(false, Console.Out); LinearInductionVariableFinder lif = new LinearInductionVariableFinder(proc, ssa.SsaState.Identifiers, dom); lif.Find(); Assert.AreEqual(1, lif.InductionVariables.Count, "Should have found one induction variable"); Assert.AreEqual(1, lif.Contexts.Count); LinearInductionVariableContext ctx = lif.Contexts[lif.InductionVariables[0]]; StrengthReduction str = new StrengthReduction(ssa.SsaState,lif.InductionVariables[0], ctx); str.ClassifyUses(); Assert.AreEqual(1, str.IncrementedUses.Count); str.ModifyUses(); Assert.AreEqual("(0x00003000 0x00000004 0x00007000)", lif.InductionVariables[0].ToString()); using (FileUnitTester fut = new FileUnitTester("Analysis/SrtSimpleLoop.txt")) { proc.Write(false, fut.TextWriter); fut.AssertFilesEqual(); } }
public static void RunTest(string testOutputFile, Action<FileUnitTester> handler) { using (FileUnitTester fut = new FileUnitTester(testOutputFile)) { handler(fut); fut.AssertFilesEqual(); } }