1111// ===----------------------------------------------------------------------===//
1212
1313#include " llvm/Support/AllocToken.h"
14+ #include " llvm/ADT/StringSwitch.h"
1415#include " llvm/Support/ErrorHandling.h"
1516#include " llvm/Support/SipHash.h"
1617
17- namespace llvm {
18- std::optional<uint64_t > getAllocTokenHash (AllocTokenMode Mode,
19- const AllocTokenMetadata &Metadata,
20- uint64_t MaxTokens) {
21- assert (MaxTokens && " Must provide concrete max tokens" );
18+ using namespace llvm ;
19+
20+ std::optional<AllocTokenMode>
21+ llvm::getAllocTokenModeFromString (StringRef Name) {
22+ return StringSwitch<std::optional<AllocTokenMode>>(Name)
23+ .Case (" increment" , AllocTokenMode::Increment)
24+ .Case (" random" , AllocTokenMode::Random)
25+ .Case (" typehash" , AllocTokenMode::TypeHash)
26+ .Case (" typehashpointersplit" , AllocTokenMode::TypeHashPointerSplit)
27+ .Default (std::nullopt );
28+ }
29+
30+ static uint64_t getStableHash (const AllocTokenMetadata &Metadata,
31+ uint64_t MaxTokens) {
32+ return getStableSipHash (Metadata.TypeName ) % MaxTokens;
33+ }
34+
35+ std::optional<uint64_t > llvm::getAllocToken (AllocTokenMode Mode,
36+ const AllocTokenMetadata &Metadata,
37+ uint64_t MaxTokens) {
38+ assert (MaxTokens && " Must provide non-zero max tokens" );
2239
2340 switch (Mode) {
2441 case AllocTokenMode::Increment:
2542 case AllocTokenMode::Random:
2643 // Stateful modes cannot be implemented as a pure function.
2744 return std::nullopt ;
2845
29- case AllocTokenMode::TypeHash: {
30- return getStableSipHash (Metadata.TypeName ) % MaxTokens;
31- }
46+ case AllocTokenMode::TypeHash:
47+ return getStableHash (Metadata, MaxTokens);
3248
3349 case AllocTokenMode::TypeHashPointerSplit: {
3450 if (MaxTokens == 1 )
3551 return 0 ;
3652 const uint64_t HalfTokens = MaxTokens / 2 ;
37- uint64_t Hash = getStableSipHash (Metadata. TypeName ) % HalfTokens;
53+ uint64_t Hash = getStableHash (Metadata, HalfTokens) ;
3854 if (Metadata.ContainsPointer )
3955 Hash += HalfTokens;
4056 return Hash;
@@ -43,4 +59,3 @@ std::optional<uint64_t> getAllocTokenHash(AllocTokenMode Mode,
4359
4460 llvm_unreachable (" " );
4561}
46- } // namespace llvm
0 commit comments