public IEnumerable <string> TestLiveVariablesOptimization(string sourceCode)
        {
            var cfg = GenCFG(sourceCode);

            LiveVariablesOptimization.DeleteDeadCode(cfg);
            return(cfg.GetInstructions().Select(x => x.ToString()));
        }
Esempio n. 2
0
        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());
        }