[llvm] 5249f5a - [MCA] Make `ResourceSizeMask` const (#189453)

via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 1 04:27:29 PDT 2026


Author: Tomer Shafir
Date: 2026-04-01T14:27:23+03:00
New Revision: 5249f5ad4d91826507fae4b7d776d1eeabc9bb2a

URL: https://github.com/llvm/llvm-project/commit/5249f5ad4d91826507fae4b7d776d1eeabc9bb2a
DIFF: https://github.com/llvm/llvm-project/commit/5249f5ad4d91826507fae4b7d776d1eeabc9bb2a.diff

LOG: [MCA] Make `ResourceSizeMask` const (#189453)

This patch marks the already effectively constant `ResourceSizeMask` as
`const`. It adds a helper `computeResourceSizeMask()` to initialize it
in the member initializer list.

Added: 
    

Modified: 
    llvm/include/llvm/MCA/HardwareUnits/ResourceManager.h
    llvm/lib/MCA/HardwareUnits/ResourceManager.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/MCA/HardwareUnits/ResourceManager.h b/llvm/include/llvm/MCA/HardwareUnits/ResourceManager.h
index 958911d2c0f27..ff5b6b40ff93a 100644
--- a/llvm/include/llvm/MCA/HardwareUnits/ResourceManager.h
+++ b/llvm/include/llvm/MCA/HardwareUnits/ResourceManager.h
@@ -136,6 +136,7 @@ class LLVM_ABI DefaultResourceStrategy final : public ResourceStrategy {
 class ResourceState {
   /// An index to the MCProcResourceDesc entry in the processor model.
   const unsigned ProcResourceDescIndex;
+
   /// A resource mask. This is generated by the tool with the help of
   /// function `mca::computeProcResourceMasks' (see Support.h).
   ///
@@ -163,6 +164,11 @@ class ResourceState {
   /// That is because MSB(B) and MSB(C) are both contained within Group(D).
   const uint64_t ResourceMask;
 
+  /// This field is set iff this resource is a group resource. This class can
+  /// represent either a processor resource unit or a processor resource group
+  /// composition.
+  const bool IsAGroup;
+
   /// A ProcResource can have multiple units.
   ///
   /// For processor resource groups this field is a mask of contained resource
@@ -173,7 +179,7 @@ class ResourceState {
   /// For normal (i.e. non-group) resources, the number of bits set in this mask
   /// is equivalent to the number of units declared by the processor model (see
   /// field 'NumUnits' in 'ProcResourceUnits').
-  uint64_t ResourceSizeMask;
+  const uint64_t ResourceSizeMask;
 
   /// A mask of ready units.
   uint64_t ReadyMask;
@@ -204,8 +210,6 @@ class ResourceState {
   /// underlying units (i.e. pipelines) until the resource is released.
   bool Unavailable;
 
-  const bool IsAGroup;
-
   /// Checks for the availability of unit 'SubResMask' in the group.
   bool isSubResourceReady(uint64_t SubResMask) const {
     return ReadyMask & SubResMask;

diff  --git a/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp b/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp
index e45bd00f1a292..0429f7b6970d6 100644
--- a/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp
+++ b/llvm/lib/MCA/HardwareUnits/ResourceManager.cpp
@@ -62,16 +62,19 @@ void DefaultResourceStrategy::used(uint64_t Mask) {
   RemovedFromNextInSequence = 0;
 }
 
+static uint64_t computeResourceSizeMask(uint64_t Mask, bool IsAGroup,
+                                        unsigned NumUnits) {
+  if (IsAGroup)
+    return Mask ^ (1ULL << getResourceStateIndex(Mask));
+  return (1ULL << NumUnits) - 1;
+}
+
 ResourceState::ResourceState(const MCProcResourceDesc &Desc, unsigned Index,
                              uint64_t Mask)
     : ProcResourceDescIndex(Index), ResourceMask(Mask),
-      BufferSize(Desc.BufferSize), IsAGroup(llvm::popcount(ResourceMask) > 1) {
-  if (IsAGroup) {
-    ResourceSizeMask =
-        ResourceMask ^ 1ULL << getResourceStateIndex(ResourceMask);
-  } else {
-    ResourceSizeMask = (1ULL << Desc.NumUnits) - 1;
-  }
+      IsAGroup(llvm::popcount(ResourceMask) > 1),
+      ResourceSizeMask(computeResourceSizeMask(Mask, IsAGroup, Desc.NumUnits)),
+      BufferSize(Desc.BufferSize) {
   ReadyMask = ResourceSizeMask;
   AvailableSlots = BufferSize == -1 ? 0U : static_cast<unsigned>(BufferSize);
   Unavailable = false;


        


More information about the llvm-commits mailing list