[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