[llvm-branch-commits] [clang] [AllocToken, Clang] Implement TypeHashPointerSplit mode (PR #156840)
Marco Elver via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Sep 30 14:48:04 PDT 2025
================
@@ -205,6 +231,26 @@ class TypeHashMode : public ModeBase {
}
};
+/// Implementation for TokenMode::TypeHashPointerSplit.
+class TypeHashPointerSplitMode : public TypeHashMode {
+public:
+ using TypeHashMode::TypeHashMode;
+
+ uint64_t operator()(const CallBase &CB, OptimizationRemarkEmitter &ORE) {
+ if (MaxTokens == 1)
+ return 0;
+ const uint64_t HalfTokens =
+ (MaxTokens ? MaxTokens : std::numeric_limits<uint64_t>::max()) / 2;
----------------
melver wrote:
Fixed - AllocToken base PR:
```
--- a/llvm/lib/Transforms/Instrumentation/AllocToken.cpp
+++ b/llvm/lib/Transforms/Instrumentation/AllocToken.cpp
@@ -139,11 +139,13 @@ MDNode *getAllocTokenMetadata(const CallBase &CB) {
class ModeBase {
public:
- explicit ModeBase(uint64_t MaxTokens) : MaxTokens(MaxTokens) {}
+ explicit ModeBase(const IntegerType &TokenTy, uint64_t MaxTokens)
+ : MaxTokens(MaxTokens ? MaxTokens : TokenTy.getBitMask()) {}
protected:
uint64_t boundedToken(uint64_t Val) const {
- return MaxTokens ? Val % MaxTokens : Val;
+ assert(MaxTokens != 0);
+ return Val % MaxTokens;
}
[...]
```
This PR change:
```
--- a/llvm/lib/Transforms/Instrumentation/AllocToken.cpp
+++ b/llvm/lib/Transforms/Instrumentation/AllocToken.cpp
@@ -242,8 +242,7 @@ public:
uint64_t operator()(const CallBase &CB, OptimizationRemarkEmitter &ORE) {
if (MaxTokens == 1)
return 0;
- const uint64_t HalfTokens =
- (MaxTokens ? MaxTokens : std::numeric_limits<uint64_t>::max()) / 2;
+ const uint64_t HalfTokens = MaxTokens / 2;
const auto [N, H] = getHash(CB, ORE);
if (!N) {
// Pick the fallback token (ClFallbackToken), which by default is 0,
[...]
```
https://github.com/llvm/llvm-project/pull/156840
More information about the llvm-branch-commits
mailing list