@@ -184,15 +184,14 @@ class NodeMetadata {
184184 NodeMetadata () = default ;
185185
186186 NodeMetadata (const NodeMetadata &Other)
187- : RS(Other.RS), NumOpts(Other.NumOpts), DeniedOpts(Other.DeniedOpts),
188- OptUnsafeEdges (new unsigned [NumOpts]), VReg (Other.VReg ),
189- AllowedRegs(Other.AllowedRegs)
187+ : RS(Other.RS), DeniedOpts(Other.DeniedOpts),
188+ OptUnsafeEdges (ArrayRef< unsigned > (Other.OptUnsafeEdges) ),
189+ VReg(Other.VReg), AllowedRegs(Other.AllowedRegs)
190190#if LLVM_ENABLE_ABI_BREAKING_CHECKS
191191 ,
192192 everConservativelyAllocatable (Other.everConservativelyAllocatable)
193193#endif
194194 {
195- llvm::copy (Other.optUnsafeEdges (), &OptUnsafeEdges[0 ]);
196195 }
197196
198197 NodeMetadata (NodeMetadata &&) = default ;
@@ -207,8 +206,7 @@ class NodeMetadata {
207206 const AllowedRegVector& getAllowedRegs () const { return *AllowedRegs; }
208207
209208 void setup (const Vector& Costs) {
210- NumOpts = Costs.getLength () - 1 ;
211- OptUnsafeEdges = std::unique_ptr<unsigned []>(new unsigned [NumOpts]());
209+ OptUnsafeEdges = OwningArrayRef<unsigned >(Costs.getLength () - 1 );
212210 }
213211
214212 ReductionState getReductionState () const { return RS; }
@@ -228,20 +226,21 @@ class NodeMetadata {
228226 DeniedOpts += Transpose ? MD.getWorstRow () : MD.getWorstCol ();
229227 const bool * UnsafeOpts =
230228 Transpose ? MD.getUnsafeCols () : MD.getUnsafeRows ();
231- for (unsigned i = 0 ; i < NumOpts ; ++i)
229+ for (unsigned i = 0 ; i < OptUnsafeEdges. size () ; ++i)
232230 OptUnsafeEdges[i] += UnsafeOpts[i];
233231 }
234232
235233 void handleRemoveEdge (const MatrixMetadata& MD, bool Transpose) {
236234 DeniedOpts -= Transpose ? MD.getWorstRow () : MD.getWorstCol ();
237235 const bool * UnsafeOpts =
238236 Transpose ? MD.getUnsafeCols () : MD.getUnsafeRows ();
239- for (unsigned i = 0 ; i < NumOpts ; ++i)
237+ for (unsigned i = 0 ; i < OptUnsafeEdges. size () ; ++i)
240238 OptUnsafeEdges[i] -= UnsafeOpts[i];
241239 }
242240
243241 bool isConservativelyAllocatable () const {
244- return (DeniedOpts < NumOpts) || llvm::is_contained (optUnsafeEdges (), 0 );
242+ return (DeniedOpts < OptUnsafeEdges.size ()) ||
243+ llvm::is_contained (OptUnsafeEdges, 0 );
245244 }
246245
247246#if LLVM_ENABLE_ABI_BREAKING_CHECKS
@@ -252,16 +251,11 @@ class NodeMetadata {
252251
253252private:
254253 ReductionState RS = Unprocessed;
255- unsigned NumOpts = 0 ;
256254 unsigned DeniedOpts = 0 ;
257- std::unique_ptr <unsigned [] > OptUnsafeEdges;
255+ OwningArrayRef <unsigned > OptUnsafeEdges;
258256 Register VReg;
259257 GraphMetadata::AllowedRegVecRef AllowedRegs;
260258
261- ArrayRef<unsigned > optUnsafeEdges () const {
262- return ArrayRef<unsigned >(OptUnsafeEdges.get (), NumOpts);
263- }
264-
265259#if LLVM_ENABLE_ABI_BREAKING_CHECKS
266260 bool everConservativelyAllocatable = false ;
267261#endif
0 commit comments