private void UpdateDominatorTree(DominatorTree dominatorTree, IfLogicalConstruct theIfConstruct) { HashSet<ISingleEntrySubGraph> ifNodes = new HashSet<ISingleEntrySubGraph>(); ifNodes.Add(theIfConstruct.Condition); ifNodes.UnionWith(theIfConstruct.Then.Children); if (theIfConstruct.Else != null) { ifNodes.UnionWith(theIfConstruct.Else.Children); } dominatorTree.MergeNodes(ifNodes, theIfConstruct.Condition, theIfConstruct); }
private void UpdateDominatorTree(DominatorTree dominatorTree, LoopLogicalConstruct theLoopConstruct) { HashSet<ISingleEntrySubGraph> loopNodes = new HashSet<ISingleEntrySubGraph>(); if (theLoopConstruct.LoopCondition != null) { loopNodes.Add(theLoopConstruct.LoopCondition); } if (theLoopConstruct.LoopBodyBlock != null) { loopNodes.UnionWith(theLoopConstruct.LoopBodyBlock.Children); } ISingleEntrySubGraph loopEntry = (theLoopConstruct.LoopType == LoopType.PreTestedLoop) ? theLoopConstruct.LoopCondition : theLoopConstruct.LoopBodyBlock.Entry; dominatorTree.MergeNodes(loopNodes, loopEntry, theLoopConstruct); }
private void UpdateDominatorTree(DominatorTree dominatorTree, SwitchLogicalConstruct theSwitchConstruct) { HashSet<ISingleEntrySubGraph> switchNodes = new HashSet<ISingleEntrySubGraph>(); switchNodes.Add(theSwitchConstruct.Entry); foreach (CaseLogicalConstruct @case in theSwitchConstruct.ConditionCases) { switchNodes.UnionWith(@case.Children); } if (theSwitchConstruct.DefaultCase != null) { switchNodes.UnionWith(theSwitchConstruct.DefaultCase.Children); } dominatorTree.MergeNodes(switchNodes, theSwitchConstruct.Entry, theSwitchConstruct); }