15
15
#ifndef LLVM_CODEGEN_REGALLOCPBQP_H
16
16
#define LLVM_CODEGEN_REGALLOCPBQP_H
17
17
18
+ #include " llvm/ADT/ArrayRef.h"
18
19
#include " llvm/ADT/DenseMap.h"
19
20
#include " llvm/ADT/Hashing.h"
20
21
#include " llvm/CodeGen/PBQP/CostAllocator.h"
@@ -183,18 +184,14 @@ class NodeMetadata {
183
184
NodeMetadata () = default ;
184
185
185
186
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)
189
190
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
190
191
,
191
192
everConservativelyAllocatable (Other.everConservativelyAllocatable)
192
193
#endif
193
194
{
194
- if (NumOpts > 0 ) {
195
- std::copy (&Other.OptUnsafeEdges [0 ], &Other.OptUnsafeEdges [NumOpts],
196
- &OptUnsafeEdges[0 ]);
197
- }
198
195
}
199
196
200
197
NodeMetadata (NodeMetadata &&) = default ;
@@ -209,8 +206,7 @@ class NodeMetadata {
209
206
const AllowedRegVector& getAllowedRegs () const { return *AllowedRegs; }
210
207
211
208
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 );
214
210
}
215
211
216
212
ReductionState getReductionState () const { return RS; }
@@ -230,22 +226,21 @@ class NodeMetadata {
230
226
DeniedOpts += Transpose ? MD.getWorstRow () : MD.getWorstCol ();
231
227
const bool * UnsafeOpts =
232
228
Transpose ? MD.getUnsafeCols () : MD.getUnsafeRows ();
233
- for (unsigned i = 0 ; i < NumOpts ; ++i)
229
+ for (unsigned i = 0 ; i < OptUnsafeEdges. size () ; ++i)
234
230
OptUnsafeEdges[i] += UnsafeOpts[i];
235
231
}
236
232
237
233
void handleRemoveEdge (const MatrixMetadata& MD, bool Transpose) {
238
234
DeniedOpts -= Transpose ? MD.getWorstRow () : MD.getWorstCol ();
239
235
const bool * UnsafeOpts =
240
236
Transpose ? MD.getUnsafeCols () : MD.getUnsafeRows ();
241
- for (unsigned i = 0 ; i < NumOpts ; ++i)
237
+ for (unsigned i = 0 ; i < OptUnsafeEdges. size () ; ++i)
242
238
OptUnsafeEdges[i] -= UnsafeOpts[i];
243
239
}
244
240
245
241
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 );
249
244
}
250
245
251
246
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
@@ -256,9 +251,8 @@ class NodeMetadata {
256
251
257
252
private:
258
253
ReductionState RS = Unprocessed;
259
- unsigned NumOpts = 0 ;
260
254
unsigned DeniedOpts = 0 ;
261
- std::unique_ptr <unsigned [] > OptUnsafeEdges;
255
+ OwningArrayRef <unsigned > OptUnsafeEdges;
262
256
Register VReg;
263
257
GraphMetadata::AllowedRegVecRef AllowedRegs;
264
258
0 commit comments