protected new void RunTest(string sourceFile, string outputFile) { Program prog = RewriteFile(sourceFile); Build(prog.Procedures.Values[0], prog.Architecture); LiveCopyInserter lci = new LiveCopyInserter(proc, ssaIds); lci.Transform(); using (FileUnitTester fut = new FileUnitTester(outputFile)) { proc.Write(false, fut.TextWriter); fut.AssertFilesEqual(); } }
private void Build(Program prog) { DataFlowAnalysis dfa = new DataFlowAnalysis(prog, new FakeDecompilerEventListener()); dfa.UntangleProcedures(); foreach (Procedure proc in prog.Procedures.Values) { Aliases alias = new Aliases(proc, prog.Architecture); alias.Transform(); var gr = proc.CreateBlockDominatorGraph(); SsaTransform sst = new SsaTransform(dfa.ProgramDataFlow, proc, gr); SsaState ssa = sst.SsaState; ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa.Identifiers, prog.Platform); cce.Transform(); DeadCode.Eliminate(proc, ssa); var vp = new ValuePropagator(ssa.Identifiers, proc); vp.Transform(); DeadCode.Eliminate(proc, ssa); Coalescer coa = new Coalescer(proc, ssa); coa.Transform(); DeadCode.Eliminate(proc, ssa); LiveCopyInserter lci = new LiveCopyInserter(proc, ssa.Identifiers); lci.Transform(); WebBuilder web = new WebBuilder(proc, ssa.Identifiers, new Dictionary<Identifier,LinearInductionVariable>()); web.Transform(); ssa.ConvertBack(false); } }
public void LciLiveCopy() { Build(new LiveCopyMock().Procedure, new FakeArchitecture()); LiveCopyInserter lci = new LiveCopyInserter(proc, ssaIds); lci.Transform(); using (FileUnitTester fut = new FileUnitTester("Analysis/LciLiveCopy.txt")) { proc.Write(false, fut.TextWriter); fut.AssertFilesEqual(); } }