From: Matthias Braun Date: Mon, 5 Dec 2016 19:44:31 +0000 (+0000) Subject: TableGen/AsmMatcherEmitter: Bring sorting check back under EXPENSIVE_CHECKS X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8eed310f5defddec84dcf6b9328642a9c3936fd;p=platform%2Fupstream%2Fllvm.git TableGen/AsmMatcherEmitter: Bring sorting check back under EXPENSIVE_CHECKS Bring the sorting check back that I removed in r288655 but put it under EXPENSIVE_CHECKS this time. Also document that this the check isn't purely about having a sorted list but also about operator < having the correct transitive behavior. Apply the same to the other check in the file. llvm-svn: 288693 --- diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp index a8a984d..3719d88 100644 --- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp +++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp @@ -1595,15 +1595,15 @@ void AsmMatcherInfo::buildInfo() { // Reorder classes so that classes precede super classes. Classes.sort(); -#ifndef NDEBUG - // Verify that the table is now sorted +#ifdef EXPENSIVE_CHECKS + // Verify that the table is sorted and operator < works transitively. for (auto I = Classes.begin(), E = Classes.end(); I != E; ++I) { for (auto J = I; J != E; ++J) { assert(!(*J < *I)); assert(I == J || !J->isSubsetOf(*I)); } } -#endif // NDEBUG +#endif } /// buildInstructionOperandReference - The specified operand is a reference to a @@ -2719,6 +2719,16 @@ void AsmMatcherEmitter::run(raw_ostream &OS) { const std::unique_ptr &b){ return *a < *b;}); +#ifdef EXPENSIVE_CHECKS + // Verify that the table is sorted and operator < works transitively. + for (auto I = Info.Matchables.begin(), E = Info.Matchables.end(); I != E; + ++I) { + for (auto J = I; J != E; ++J) { + assert(!(**J < **I)); + } + } +#endif + DEBUG_WITH_TYPE("instruction_info", { for (const auto &MI : Info.Matchables) MI->dump();