/// <summary> /// Fill OUT for basic block B /// </summary> /// <param name="curBlock">Current basic block</param> /// <param name="genKillContainers">Gen/Kill container</param> public void FillOutForBasicBlock(OneBasicBlock curBlock, Dictionary <OneBasicBlock, IExpressionSetsContainer> genKillContainers) { if (genKillContainers.ContainsKey(curBlock)) { Out[curBlock] = new HashSet <TacNode>(genKillContainers[curBlock].GetFirstSet() .Union(In[curBlock] .Except(genKillContainers[curBlock].GetSecondSet()))); } else { Out[curBlock] = new HashSet <TacNode>(In[curBlock]); } }
/// <summary> /// Fill IN for basic block B /// </summary> /// <param name="curBlock">current basic block</param> /// <param name="prevBlock">previous basic block</param> public void FillInForBasicBlock(OneBasicBlock curBlock, OneBasicBlock prevBlock) { In[curBlock] = new HashSet <TacNode>(); In[curBlock].UnionWith(In[prevBlock]); In[curBlock].UnionWith(Out[prevBlock]); }