SmallSet/SmallPtrSet: Refuse huge Small numbers
These sets do linear searching in small mode; It is not a good idea to use huge numbers as the small value here, save people from themselves by adding a static_assert. Differential Revision: http://reviews.llvm.org/D16706 llvm-svn: 259419
This commit is contained in:
parent
d8da15f8a9
commit
3f88eabe93
|
|
@ -329,6 +329,11 @@ public:
|
||||||
/// SmallPtrSetImplBase for details of the algorithm.
|
/// SmallPtrSetImplBase for details of the algorithm.
|
||||||
template<class PtrType, unsigned SmallSize>
|
template<class PtrType, unsigned SmallSize>
|
||||||
class SmallPtrSet : public SmallPtrSetImpl<PtrType> {
|
class SmallPtrSet : public SmallPtrSetImpl<PtrType> {
|
||||||
|
// In small mode SmallPtrSet uses linear search for the elements, so it is
|
||||||
|
// not a good idea to choose this value too high. You may consider using a
|
||||||
|
// DenseSet<> instead if you expect many elements in the set.
|
||||||
|
static_assert(SmallSize <= 32, "SmallSize should be small");
|
||||||
|
|
||||||
typedef SmallPtrSetImpl<PtrType> BaseT;
|
typedef SmallPtrSetImpl<PtrType> BaseT;
|
||||||
|
|
||||||
// Make sure that SmallSize is a power of two, round up if not.
|
// Make sure that SmallSize is a power of two, round up if not.
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,11 @@ class SmallSet {
|
||||||
typedef typename SmallVector<T, N>::const_iterator VIterator;
|
typedef typename SmallVector<T, N>::const_iterator VIterator;
|
||||||
typedef typename SmallVector<T, N>::iterator mutable_iterator;
|
typedef typename SmallVector<T, N>::iterator mutable_iterator;
|
||||||
|
|
||||||
|
// In small mode SmallPtrSet uses linear search for the elements, so it is
|
||||||
|
// not a good idea to choose this value too high. You may consider using a
|
||||||
|
// DenseSet<> instead if you expect many elements in the set.
|
||||||
|
static_assert(N <= 32, "N should be small");
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
SmallSet() {}
|
SmallSet() {}
|
||||||
|
|
|
||||||
|
|
@ -1651,8 +1651,8 @@ void CppWriter::printFunctionUses(const Function* F) {
|
||||||
|
|
||||||
// Print type definitions for every type referenced by an instruction and
|
// Print type definitions for every type referenced by an instruction and
|
||||||
// make a note of any global values or constants that are referenced
|
// make a note of any global values or constants that are referenced
|
||||||
SmallPtrSet<GlobalValue*,64> gvs;
|
SmallPtrSet<GlobalValue*,32> gvs;
|
||||||
SmallPtrSet<Constant*,64> consts;
|
SmallPtrSet<Constant*,32> consts;
|
||||||
for (Function::const_iterator BB = F->begin(), BE = F->end();
|
for (Function::const_iterator BB = F->begin(), BE = F->end();
|
||||||
BB != BE; ++BB){
|
BB != BE; ++BB){
|
||||||
for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
|
for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue