[llvm] [llvm] Add NodeMetadata::optUnsafeEdges (NFC) (PR #137539)

Kazu Hirata via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 27 13:35:03 PDT 2025


https://github.com/kazutakahirata updated https://github.com/llvm/llvm-project/pull/137539

>From 5643a676619e0bf8f2b788786a7c3c4675dd3ad0 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sun, 27 Apr 2025 10:31:58 -0700
Subject: [PATCH 1/3] [llvm] Add NodeMetadata::optUnsafeEdges (NFC)

NodeMetadata::optUnsafeEdges returns ArrayRef, packaging
OptUnsafeEdges and NumOpts.  This in turn allows use of llvm::copy and
llvm::is_contained elsewhere in the class.
---
 llvm/include/llvm/CodeGen/RegAllocPBQP.h | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/RegAllocPBQP.h b/llvm/include/llvm/CodeGen/RegAllocPBQP.h
index 234f1c6ff115a..c161f2ebd69ee 100644
--- a/llvm/include/llvm/CodeGen/RegAllocPBQP.h
+++ b/llvm/include/llvm/CodeGen/RegAllocPBQP.h
@@ -15,6 +15,7 @@
 #ifndef LLVM_CODEGEN_REGALLOCPBQP_H
 #define LLVM_CODEGEN_REGALLOCPBQP_H
 
+#include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/Hashing.h"
 #include "llvm/CodeGen/PBQP/CostAllocator.h"
@@ -191,10 +192,8 @@ class NodeMetadata {
         everConservativelyAllocatable(Other.everConservativelyAllocatable)
 #endif
   {
-    if (NumOpts > 0) {
-      std::copy(&Other.OptUnsafeEdges[0], &Other.OptUnsafeEdges[NumOpts],
-                &OptUnsafeEdges[0]);
-    }
+    if (NumOpts > 0)
+      llvm::copy(Other.optUnsafeEdges(), &OptUnsafeEdges[0]);
   }
 
   NodeMetadata(NodeMetadata &&) = default;
@@ -243,9 +242,7 @@ class NodeMetadata {
   }
 
   bool isConservativelyAllocatable() const {
-    return (DeniedOpts < NumOpts) ||
-      (std::find(&OptUnsafeEdges[0], &OptUnsafeEdges[NumOpts], 0) !=
-       &OptUnsafeEdges[NumOpts]);
+    return (DeniedOpts < NumOpts) || llvm::is_contained(optUnsafeEdges(), 0);
   }
 
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
@@ -262,6 +259,10 @@ class NodeMetadata {
   Register VReg;
   GraphMetadata::AllowedRegVecRef AllowedRegs;
 
+  ArrayRef<unsigned> optUnsafeEdges() const {
+    return ArrayRef<unsigned>(OptUnsafeEdges.get(), NumOpts);
+  }
+
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
   bool everConservativelyAllocatable = false;
 #endif

>From 61a2c2d0a31dfe262ef01e5177e897bda898a738 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sun, 27 Apr 2025 13:05:06 -0700
Subject: [PATCH 2/3] Address a comment.

---
 llvm/include/llvm/CodeGen/RegAllocPBQP.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/RegAllocPBQP.h b/llvm/include/llvm/CodeGen/RegAllocPBQP.h
index c161f2ebd69ee..8578423ea5667 100644
--- a/llvm/include/llvm/CodeGen/RegAllocPBQP.h
+++ b/llvm/include/llvm/CodeGen/RegAllocPBQP.h
@@ -192,8 +192,7 @@ class NodeMetadata {
         everConservativelyAllocatable(Other.everConservativelyAllocatable)
 #endif
   {
-    if (NumOpts > 0)
-      llvm::copy(Other.optUnsafeEdges(), &OptUnsafeEdges[0]);
+    llvm::copy(Other.optUnsafeEdges(), &OptUnsafeEdges[0]);
   }
 
   NodeMetadata(NodeMetadata &&) = default;

>From 6cfceb232f9f16aaf6f3f50b79e6fe8f1e02375f Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sun, 27 Apr 2025 13:28:57 -0700
Subject: [PATCH 3/3] Use OwningArrayRef.

---
 llvm/include/llvm/CodeGen/RegAllocPBQP.h | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/RegAllocPBQP.h b/llvm/include/llvm/CodeGen/RegAllocPBQP.h
index 8578423ea5667..9c74cd2ebc0b1 100644
--- a/llvm/include/llvm/CodeGen/RegAllocPBQP.h
+++ b/llvm/include/llvm/CodeGen/RegAllocPBQP.h
@@ -184,15 +184,14 @@ class NodeMetadata {
   NodeMetadata() = default;
 
   NodeMetadata(const NodeMetadata &Other)
-      : RS(Other.RS), NumOpts(Other.NumOpts), DeniedOpts(Other.DeniedOpts),
-        OptUnsafeEdges(new unsigned[NumOpts]), VReg(Other.VReg),
-        AllowedRegs(Other.AllowedRegs)
+      : RS(Other.RS), DeniedOpts(Other.DeniedOpts),
+        OptUnsafeEdges(ArrayRef<unsigned>(Other.OptUnsafeEdges)),
+        VReg(Other.VReg), AllowedRegs(Other.AllowedRegs)
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
         ,
         everConservativelyAllocatable(Other.everConservativelyAllocatable)
 #endif
   {
-    llvm::copy(Other.optUnsafeEdges(), &OptUnsafeEdges[0]);
   }
 
   NodeMetadata(NodeMetadata &&) = default;
@@ -207,8 +206,7 @@ class NodeMetadata {
   const AllowedRegVector& getAllowedRegs() const { return *AllowedRegs; }
 
   void setup(const Vector& Costs) {
-    NumOpts = Costs.getLength() - 1;
-    OptUnsafeEdges = std::unique_ptr<unsigned[]>(new unsigned[NumOpts]());
+    OptUnsafeEdges = OwningArrayRef<unsigned>(Costs.getLength() - 1);
   }
 
   ReductionState getReductionState() const { return RS; }
@@ -228,7 +226,7 @@ class NodeMetadata {
     DeniedOpts += Transpose ? MD.getWorstRow() : MD.getWorstCol();
     const bool* UnsafeOpts =
       Transpose ? MD.getUnsafeCols() : MD.getUnsafeRows();
-    for (unsigned i = 0; i < NumOpts; ++i)
+    for (unsigned i = 0; i < OptUnsafeEdges.size(); ++i)
       OptUnsafeEdges[i] += UnsafeOpts[i];
   }
 
@@ -236,12 +234,13 @@ class NodeMetadata {
     DeniedOpts -= Transpose ? MD.getWorstRow() : MD.getWorstCol();
     const bool* UnsafeOpts =
       Transpose ? MD.getUnsafeCols() : MD.getUnsafeRows();
-    for (unsigned i = 0; i < NumOpts; ++i)
+    for (unsigned i = 0; i < OptUnsafeEdges.size(); ++i)
       OptUnsafeEdges[i] -= UnsafeOpts[i];
   }
 
   bool isConservativelyAllocatable() const {
-    return (DeniedOpts < NumOpts) || llvm::is_contained(optUnsafeEdges(), 0);
+    return (DeniedOpts < OptUnsafeEdges.size()) ||
+           llvm::is_contained(OptUnsafeEdges, 0);
   }
 
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
@@ -252,16 +251,11 @@ class NodeMetadata {
 
 private:
   ReductionState RS = Unprocessed;
-  unsigned NumOpts = 0;
   unsigned DeniedOpts = 0;
-  std::unique_ptr<unsigned[]> OptUnsafeEdges;
+  OwningArrayRef<unsigned> OptUnsafeEdges;
   Register VReg;
   GraphMetadata::AllowedRegVecRef AllowedRegs;
 
-  ArrayRef<unsigned> optUnsafeEdges() const {
-    return ArrayRef<unsigned>(OptUnsafeEdges.get(), NumOpts);
-  }
-
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
   bool everConservativelyAllocatable = false;
 #endif



More information about the llvm-commits mailing list