public HashSet <VariableDescriptor> DependsOn(SCC <VariableDescriptor> vSCC)
 {
     if (!DependsOnCache.ContainsKey(vSCC))
     {
         HashSet <VariableDescriptor> result = new HashSet <VariableDescriptor>();
         if (vSCC.Count() > 0)
         {
             result.UnionWith(vSCC);
             foreach (var wSCC in DependsOnSCCsDAG.Successors(vSCC))
             {
                 result.UnionWith(DependsOn(wSCC));
             }
         }
         DependsOnCache[vSCC] = result;
     }
     return(DependsOnCache[vSCC]);
 }
 private HashSet <Block> ReachableFrom(SCC <Block> scc)
 {
     if (!MayReachCache.ContainsKey(scc))
     {
         HashSet <Block> result = new HashSet <Block>();
         if (scc.Count() > 0)
         {
             result.UnionWith(scc);
             foreach (var nextSCC in ReachabilityGraphSCCsDAG.Successors(scc))
             {
                 result.UnionWith(ReachableFrom(nextSCC));
             }
         }
         MayReachCache[scc] = result;
     }
     return(MayReachCache[scc]);
 }
 private HashSet<Block> ReachableFrom(SCC<Block> scc)
 {
     if (!MayReachCache.ContainsKey(scc)) {
     HashSet<Block> result = new HashSet<Block>();
     if (scc.Count() > 0) {
       result.UnionWith(scc);
       foreach (var nextSCC in ReachabilityGraphSCCsDAG.Successors(scc)) {
     result.UnionWith(ReachableFrom(nextSCC));
       }
     }
     MayReachCache[scc] = result;
       }
       return MayReachCache[scc];
 }
 public HashSet<VariableDescriptor> DependsOn(SCC<VariableDescriptor> vSCC)
 {
     if (!DependsOnCache.ContainsKey(vSCC)) {
     HashSet<VariableDescriptor> result = new HashSet<VariableDescriptor>();
     if (vSCC.Count() > 0) {
       result.UnionWith(vSCC);
       foreach (var wSCC in DependsOnSCCsDAG.Successors(vSCC)) {
     result.UnionWith(DependsOn(wSCC));
       }
     }
     DependsOnCache[vSCC] = result;
       }
       return DependsOnCache[vSCC];
 }