1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
5 #ifndef CompilerBitSetTraits_HPP_DEFINED
6 #define CompilerBitSetTraits_HPP_DEFINED 1
8 #include "compilerbitsettraits.h"
11 ///////////////////////////////////////////////////////////////////////////////
13 // CompAllocBitSetTraits
15 ///////////////////////////////////////////////////////////////////////////////
18 void* CompAllocBitSetTraits::Alloc(Compiler* comp, size_t byteSize)
20 return comp->compGetMem(byteSize, CMK_bitset);
25 void* CompAllocBitSetTraits::DebugAlloc(Compiler* comp, size_t byteSize)
27 return comp->compGetMem(byteSize, CMK_DebugOnly);
31 ///////////////////////////////////////////////////////////////////////////////
33 // TrackedVarBitSetTraits
35 ///////////////////////////////////////////////////////////////////////////////
38 unsigned TrackedVarBitSetTraits::GetSize(Compiler* comp)
40 return comp->lvaTrackedCount;
44 unsigned TrackedVarBitSetTraits::GetArrSize(Compiler* comp, unsigned elemSize)
46 assert(elemSize == sizeof(size_t));
47 return comp->lvaTrackedCountInSizeTUnits;
51 unsigned TrackedVarBitSetTraits::GetEpoch(Compiler* comp)
53 return comp->GetCurLVEpoch();
57 BitSetSupport::BitSetOpCounter* TrackedVarBitSetTraits::GetOpCounter(Compiler* comp)
60 return &Compiler::m_varsetOpCounter;
66 ///////////////////////////////////////////////////////////////////////////////
70 ///////////////////////////////////////////////////////////////////////////////
73 unsigned AllVarBitSetTraits::GetSize(Compiler* comp)
75 return min(comp->lvaCount, lclMAX_ALLSET_TRACKED);
79 unsigned AllVarBitSetTraits::GetArrSize(Compiler* comp, unsigned elemSize)
81 return unsigned(roundUp(GetSize(comp), elemSize));
85 unsigned AllVarBitSetTraits::GetEpoch(Compiler* comp)
91 BitSetSupport::BitSetOpCounter* AllVarBitSetTraits::GetOpCounter(Compiler* comp)
93 #if ALLVARSET_COUNTOPS
94 return &Compiler::m_allvarsetOpCounter;
100 ///////////////////////////////////////////////////////////////////////////////
102 // BasicBlockBitSetTraits
104 ///////////////////////////////////////////////////////////////////////////////
107 unsigned BasicBlockBitSetTraits::GetSize(Compiler* comp)
109 return comp->fgCurBBEpochSize;
113 unsigned BasicBlockBitSetTraits::GetArrSize(Compiler* comp, unsigned elemSize)
115 // Assert that the epoch has been initialized. This is a convenient place to assert this because
116 // GetArrSize() is called for every function, via IsShort().
117 assert(GetEpoch(comp) != 0);
119 assert(elemSize == sizeof(size_t));
120 return comp->fgBBSetCountInSizeTUnits; // This is precomputed to avoid doing math every time this function is called
124 unsigned BasicBlockBitSetTraits::GetEpoch(Compiler* comp)
126 return comp->GetCurBasicBlockEpoch();
130 BitSetSupport::BitSetOpCounter* BasicBlockBitSetTraits::GetOpCounter(Compiler* comp)
135 ///////////////////////////////////////////////////////////////////////////////
139 ///////////////////////////////////////////////////////////////////////////////
142 void* BitVecTraits::Alloc(BitVecTraits* b, size_t byteSize)
144 return b->comp->compGetMem(byteSize, CMK_bitset);
149 void* BitVecTraits::DebugAlloc(BitVecTraits* b, size_t byteSize)
151 return b->comp->compGetMem(byteSize, CMK_DebugOnly);
156 unsigned BitVecTraits::GetSize(BitVecTraits* b)
162 unsigned BitVecTraits::GetArrSize(BitVecTraits* b, unsigned elemSize)
164 assert(elemSize == sizeof(size_t));
165 unsigned elemBits = 8 * elemSize;
166 return (unsigned)roundUp(b->size, elemBits) / elemBits;
170 unsigned BitVecTraits::GetEpoch(BitVecTraits* b)
176 BitSetSupport::BitSetOpCounter* BitVecTraits::GetOpCounter(BitVecTraits* b)
181 #endif // CompilerBitSetTraits_HPP_DEFINED