[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