예제 #1
0
        /// <summary>
        /// Определение живых и мертвых переменных
        /// в базовом блоке
        /// </summary>
        /// <param name="nodes">Фрагмент кода</param>
        private void DefineLDVars(List <Node> nodes, DVars DeadVars, LVars LiveVars)
        {
            // Построение Def цепочки по блоку
            var dList = (new DULists(nodes)).DList;

            // Обход Def цепочки
            foreach (var dVar in dList)
            {
                // Мертвая переменная (нигде не используется)
                if (dVar.UseVariables.Count == 0)
                {
                    DeadVars.Add(dVar.DefVariable);
                }
                // Живые переменные
                else
                {
                    LiveVars.Add(dVar.DefVariable);

                    foreach (var uVar in dVar.UseVariables)
                    {
                        LiveVars.Add(uVar);
                    }
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Конструктор для класса определения
 /// живых и мертвых переменных для
 /// базового блока
 /// </summary>
 /// <param name="block">Базовый блок</param>
 public LiveAndDeadVariables(BasicBlock block)
 {
     this.Block         = block;
     this.UListNotValid = (new DULists(block)).UListNotValid;
     DeadVars           = new DVars();
     LiveVars           = new LVars();
     removeVars         = new List <Guid>();
     DefineLDVars(Block.CodeList.ToList(), DeadVars, LiveVars);
 }