diff options
| author | Jakub Kuderski <kubakuderski@gmail.com> | 2017-10-14 03:00:56 +0000 |
|---|---|---|
| committer | Jakub Kuderski <kubakuderski@gmail.com> | 2017-10-14 03:00:56 +0000 |
| commit | 369e85a9002a368a9a37fec09761724868246296 (patch) | |
| tree | d2cd9e818d7bbcf508169035c191fc6e33a93d70 /llvm/include | |
| parent | 1963f51f14093fa036d1c6a06c4f10fc0a5e82c1 (diff) | |
| download | bcm5719-llvm-369e85a9002a368a9a37fec09761724868246296.tar.gz bcm5719-llvm-369e85a9002a368a9a37fec09761724868246296.zip | |
[Dominators] Remove the NCA check
Summary:
This patch removes the `verifyNCD` check.
The reason for this is that the other checks are sufficient to prove or disprove correctness of any DominatorTree, and that `verifyNCD` doesn't provide (in my option) better error messages then the other ones.
Additionally, this should give a (small) improvement to the total verification time, as the check is O(n), and checking the sibling property takes O(n^3).
Reviewers: dberlin, grosser, davide, brzycki
Reviewed By: brzycki
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D38802
llvm-svn: 315790
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/Support/GenericDomTreeConstruction.h | 39 |
1 files changed, 2 insertions, 37 deletions
diff --git a/llvm/include/llvm/Support/GenericDomTreeConstruction.h b/llvm/include/llvm/Support/GenericDomTreeConstruction.h index 460110eb70b..8f801662d0f 100644 --- a/llvm/include/llvm/Support/GenericDomTreeConstruction.h +++ b/llvm/include/llvm/Support/GenericDomTreeConstruction.h @@ -1461,40 +1461,6 @@ struct SemiNCAInfo { return true; } - // Checks if for every edge From -> To in the graph - // NCD(From, To) == IDom(To) or To. - bool verifyNCD(const DomTreeT &DT) { - clear(); - doFullDFSWalk(DT, AlwaysDescend); - - for (auto &BlockToInfo : NodeToInfo) { - auto &Info = BlockToInfo.second; - - const NodePtr From = NumToNode[Info.Parent]; - if (!From) continue; - - const NodePtr To = BlockToInfo.first; - const TreeNodePtr ToTN = DT.getNode(To); - assert(ToTN); - - const NodePtr NCD = DT.findNearestCommonDominator(From, To); - const TreeNodePtr NCDTN = DT.getNode(NCD); - const TreeNodePtr ToIDom = ToTN->getIDom(); - if (NCDTN != ToTN && NCDTN != ToIDom) { - errs() << "NearestCommonDominator verification failed:\n\tNCD(From:" - << BlockNamePrinter(From) << ", To:" << BlockNamePrinter(To) - << ") = " << BlockNamePrinter(NCD) - << ",\t (should be To or IDom[To]: " << BlockNamePrinter(ToIDom) - << ")\n"; - errs().flush(); - - return false; - } - } - - return true; - } - // The below routines verify the correctness of the dominator tree relative to // the CFG it's coming from. A tree is a dominator tree iff it has two // properties, called the parent property and the sibling property. Tarjan @@ -1632,9 +1598,8 @@ template <class DomTreeT> bool Verify(const DomTreeT &DT) { SemiNCAInfo<DomTreeT> SNCA(nullptr); return SNCA.verifyRoots(DT) && SNCA.verifyReachability(DT) && - SNCA.VerifyLevels(DT) && SNCA.verifyNCD(DT) && - SNCA.verifyParentProperty(DT) && SNCA.verifySiblingProperty(DT) && - SNCA.VerifyDFSNumbers(DT); + SNCA.VerifyLevels(DT) && SNCA.verifyParentProperty(DT) && + SNCA.verifySiblingProperty(DT) && SNCA.VerifyDFSNumbers(DT); } } // namespace DomTreeBuilder |

