/// <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); } } } }
/// <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); }