1515#ifndef LLVM_CODEGEN_REGALLOCPBQP_H
1616#define LLVM_CODEGEN_REGALLOCPBQP_H
1717
18+ #include " llvm/ADT/ArrayRef.h"
1819#include " llvm/ADT/DenseMap.h"
1920#include " llvm/ADT/Hashing.h"
2021#include " llvm/CodeGen/PBQP/CostAllocator.h"
@@ -183,18 +184,14 @@ class NodeMetadata {
183184 NodeMetadata () = default ;
184185
185186 NodeMetadata (const NodeMetadata &Other)
186- : RS(Other.RS), NumOpts(Other.NumOpts), DeniedOpts(Other.DeniedOpts),
187- OptUnsafeEdges (new unsigned [NumOpts]), VReg (Other.VReg ),
188- AllowedRegs(Other.AllowedRegs)
187+ : RS(Other.RS), DeniedOpts(Other.DeniedOpts),
188+ OptUnsafeEdges (ArrayRef< unsigned > (Other.OptUnsafeEdges) ),
189+ VReg(Other.VReg), AllowedRegs(Other.AllowedRegs)
189190#if LLVM_ENABLE_ABI_BREAKING_CHECKS
190191 ,
191192 everConservativelyAllocatable (Other.everConservativelyAllocatable)
192193#endif
193194 {
194- if (NumOpts > 0 ) {
195- std::copy (&Other.OptUnsafeEdges [0 ], &Other.OptUnsafeEdges [NumOpts],
196- &OptUnsafeEdges[0 ]);
197- }
198195 }
199196
200197 NodeMetadata (NodeMetadata &&) = default ;
@@ -209,8 +206,7 @@ class NodeMetadata {
209206 const AllowedRegVector& getAllowedRegs () const { return *AllowedRegs; }
210207
211208 void setup (const Vector& Costs) {
212- NumOpts = Costs.getLength () - 1 ;
213- OptUnsafeEdges = std::unique_ptr<unsigned []>(new unsigned [NumOpts]());
209+ OptUnsafeEdges = OwningArrayRef<unsigned >(Costs.getLength () - 1 );
214210 }
215211
216212 ReductionState getReductionState () const { return RS; }
@@ -230,22 +226,21 @@ class NodeMetadata {
230226 DeniedOpts += Transpose ? MD.getWorstRow () : MD.getWorstCol ();
231227 const bool * UnsafeOpts =
232228 Transpose ? MD.getUnsafeCols () : MD.getUnsafeRows ();
233- for (unsigned i = 0 ; i < NumOpts ; ++i)
229+ for (unsigned i = 0 ; i < OptUnsafeEdges. size () ; ++i)
234230 OptUnsafeEdges[i] += UnsafeOpts[i];
235231 }
236232
237233 void handleRemoveEdge (const MatrixMetadata& MD, bool Transpose) {
238234 DeniedOpts -= Transpose ? MD.getWorstRow () : MD.getWorstCol ();
239235 const bool * UnsafeOpts =
240236 Transpose ? MD.getUnsafeCols () : MD.getUnsafeRows ();
241- for (unsigned i = 0 ; i < NumOpts ; ++i)
237+ for (unsigned i = 0 ; i < OptUnsafeEdges. size () ; ++i)
242238 OptUnsafeEdges[i] -= UnsafeOpts[i];
243239 }
244240
245241 bool isConservativelyAllocatable () const {
246- return (DeniedOpts < NumOpts) ||
247- (std::find (&OptUnsafeEdges[0 ], &OptUnsafeEdges[NumOpts], 0 ) !=
248- &OptUnsafeEdges[NumOpts]);
242+ return (DeniedOpts < OptUnsafeEdges.size ()) ||
243+ llvm::is_contained (OptUnsafeEdges, 0 );
249244 }
250245
251246#if LLVM_ENABLE_ABI_BREAKING_CHECKS
@@ -256,9 +251,8 @@ class NodeMetadata {
256251
257252private:
258253 ReductionState RS = Unprocessed;
259- unsigned NumOpts = 0 ;
260254 unsigned DeniedOpts = 0 ;
261- std::unique_ptr <unsigned [] > OptUnsafeEdges;
255+ OwningArrayRef <unsigned > OptUnsafeEdges;
262256 Register VReg;
263257 GraphMetadata::AllowedRegVecRef AllowedRegs;
264258
0 commit comments