public IEnumerable <string> TestLiveVariablesOptimization(string sourceCode) { var cfg = GenCFG(sourceCode); LiveVariablesOptimization.DeleteDeadCode(cfg); return(cfg.GetInstructions().Select(x => x.ToString())); }
internal static (string, string) ApplyIterativeAlgorithm(ControlFlowGraph cfg, List <string> opts) { var strReturn = new StringBuilder(); var strBefore = new StringBuilder(); foreach (var b in cfg.GetCurrentBasicBlocks()) { foreach (var inst in b.GetInstructions()) { strBefore.AppendLine(inst.ToString()); } strBefore.AppendLine("----------"); } foreach (var opt in opts) { switch (opt) { case "Доступные выражения": var inout = new AvailableExpressions().Execute(cfg); AvailableExpressionsOptimization.Execute(cfg, inout); break; case "Активные переменные": LiveVariablesOptimization.DeleteDeadCode(cfg); break; case "Достигающие определения": var reachDef = new ReachingDefinitionsOptimization(); reachDef.DeleteDeadCode(cfg); break; } } foreach (var b in cfg.GetCurrentBasicBlocks()) { foreach (var inst in b.GetInstructions()) { strReturn.AppendLine(inst.ToString()); } strReturn.AppendLine("----------"); } return(strBefore.ToString(), strReturn.ToString()); }