public (List <VarsSet>, List <VarsSet>) GenerateInputOutputActiveDefs() { var In = new List <VarsSet>(); var Out = new List <VarsSet>(); var startToId = GetStartToId(_bblocks); for (int i = 0; i < _bblocks.Count(); ++i) { In.Add(new VarsSet()); Out.Add(new VarsSet()); } bool change = true; while (change) { change = false; for (int i = 0; i < _bblocks.Count(); ++i) { var st = _bblocks[i].StartLabel; Out[i] = new VarsSet(Next[st].SelectMany(p => In[startToId[p]])); int sz = In[i].Count; In[i] = ActiveDefinitions.TransferByUseAndDef(Out[i], _useByStart[st], _defByStart[st]); change |= sz != In[i].Count; } } return(In, Out); }
private void GenerateUseAndDefSets() { var bblocks = _baseBlockByStart.Select(kp => kp.Value).ToList(); var(use, def) = ActiveDefinitions.GetUseAndDefSets(bblocks); for (int i = 0; i < bblocks.Count(); ++i) { _useByStart[bblocks[i].StartLabel] = use[i]; _defByStart[bblocks[i].StartLabel] = def[i]; } }