llvm/unittests/ADT
Chandler Carruth 8682b372bb [ADT] Make the triple test 1000x faster through more focused test cases.
The current approach isn't a long-term viable pattern. Given the set of
architectures A, vendors V, operating systems O, and environments E, it
does |A| * |V| * |O| * |E| * 4! tests. As LLVM grows, this test keeps
getting slower, despite my working very hard to make it get some
"optimizations" even in -O0 builds in order to lower the constant
factors. Fundamentally, we're doing an unreasonable amount of work.i

Looking at the specific thing being tested -- the goal seems very
clearly to be testing the *permutations*, not the *combinations*. The
combinations are driving up the complexity much more than anything else.

Instead, test every possible value for a given triple entry in every
permutation of *some* triple. This really seems to cover the core goal
of the test. Every single possible triple component is tested in every
position. But because we keep the rest of the triple constant, it does
so in a dramatically more scalable amount of time. With this model we do
(|A| + |V| + |O| + |E|) * 4! tests.

For me on a debug build, this goes from running for 19 seconds to 19
milliseconds, or a 1000x improvement. This makes a world of difference
for the critical path of 'ninja check-llvm' and other extremely common
workflows.

Thanks to Renato, Dean, and David for the helpful review comments and
helping me refine the explanation of the change.

Differential Revision: https://reviews.llvm.org/D23156

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277912 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-06 06:00:50 +00:00
..
APFloatTest.cpp [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
APIntTest.cpp Remove obsolete XFAIL for a test that used to sometimes miscompile under 2016-07-26 06:49:14 +00:00
APSIntTest.cpp
ArrayRefTest.cpp [ADT] Pass ArrayRef::slice size_t instead of unsigned. 2016-06-02 17:26:03 +00:00
BitmaskEnumTest.cpp [ADT] Add LLVM_MARK_AS_BITMASK_ENUM, used to enable bitwise operations on enums without static_cast. 2016-07-13 18:23:16 +00:00
BitVectorTest.cpp Fix BitVector move ctor/assignment. 2016-06-16 21:45:13 +00:00
CMakeLists.txt [ADT] Add LLVM_MARK_AS_BITMASK_ENUM, used to enable bitwise operations on enums without static_cast. 2016-07-13 18:23:16 +00:00
DAGDeltaAlgorithmTest.cpp
DeltaAlgorithmTest.cpp
DenseMapTest.cpp [DenseMap] Add a C++17-style try_emplace method. 2016-07-21 13:37:53 +00:00
DenseSetTest.cpp
FoldingSet.cpp Adding reserve and capacity methods to FoldingSet 2016-06-03 13:54:48 +00:00
FunctionRefTest.cpp
HashingTest.cpp
ilistTest.cpp
ImmutableMapTest.cpp
ImmutableSetTest.cpp Fix warnings in ImmutableSetTest and SequenceTest. 2016-07-17 18:10:30 +00:00
IntEqClassesTest.cpp
IntervalMapTest.cpp
IntrusiveRefCntPtrTest.cpp
MakeUniqueTest.cpp
MapVectorTest.cpp
OptionalTest.cpp
PackedVectorTest.cpp
PointerEmbeddedIntTest.cpp
PointerIntPairTest.cpp
PointerSumTypeTest.cpp
PointerUnionTest.cpp
PostOrderIteratorTest.cpp
PriorityWorklistTest.cpp [ADT] Add a new data structure for managing a priority worklist where 2016-06-30 02:32:20 +00:00
RangeAdapterTest.cpp
SCCIteratorTest.cpp [ADT] NFC: Generalize GraphTraits requirement of "NodeType *" in interfaces to "NodeRef", and migrate SCCIterator.h to use NodeRef 2016-08-01 22:32:20 +00:00
SequenceTest.cpp Fix warnings in ImmutableSetTest and SequenceTest. 2016-07-17 18:10:30 +00:00
SetVectorTest.cpp
SmallPtrSetTest.cpp
SmallStringTest.cpp
SmallVectorTest.cpp
SparseBitVectorTest.cpp
SparseMultiSetTest.cpp
SparseSetTest.cpp
StringMapTest.cpp Rename StringMap::emplace_second to try_emplace. 2016-07-21 13:37:48 +00:00
StringRefTest.cpp [ADT] Add 'consume_front' and 'consume_back' methods to StringRef which 2016-07-31 02:19:13 +00:00
TinyPtrVectorTest.cpp [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
TripleTest.cpp [ADT] Make the triple test 1000x faster through more focused test cases. 2016-08-06 06:00:50 +00:00
TwineTest.cpp
VariadicFunctionTest.cpp