Skip to content

Commit 6d7edbb

Browse files
authored
Revert "[CodeGen] Use OwningArrayRef in NodeMetadata (NFC)" (llvm#137684)
Reverts llvm#137539 This breaks the MSan buildbot. Please either fix the build or merge this revert.
1 parent 9d77a3f commit 6d7edbb

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

llvm/include/llvm/CodeGen/RegAllocPBQP.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#ifndef LLVM_CODEGEN_REGALLOCPBQP_H
1616
#define LLVM_CODEGEN_REGALLOCPBQP_H
1717

18-
#include "llvm/ADT/ArrayRef.h"
1918
#include "llvm/ADT/DenseMap.h"
2019
#include "llvm/ADT/Hashing.h"
2120
#include "llvm/CodeGen/PBQP/CostAllocator.h"
@@ -184,14 +183,18 @@ class NodeMetadata {
184183
NodeMetadata() = default;
185184

186185
NodeMetadata(const NodeMetadata &Other)
187-
: RS(Other.RS), DeniedOpts(Other.DeniedOpts),
188-
OptUnsafeEdges(ArrayRef<unsigned>(Other.OptUnsafeEdges)),
189-
VReg(Other.VReg), AllowedRegs(Other.AllowedRegs)
186+
: RS(Other.RS), NumOpts(Other.NumOpts), DeniedOpts(Other.DeniedOpts),
187+
OptUnsafeEdges(new unsigned[NumOpts]), VReg(Other.VReg),
188+
AllowedRegs(Other.AllowedRegs)
190189
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
191190
,
192191
everConservativelyAllocatable(Other.everConservativelyAllocatable)
193192
#endif
194193
{
194+
if (NumOpts > 0) {
195+
std::copy(&Other.OptUnsafeEdges[0], &Other.OptUnsafeEdges[NumOpts],
196+
&OptUnsafeEdges[0]);
197+
}
195198
}
196199

197200
NodeMetadata(NodeMetadata &&) = default;
@@ -206,7 +209,8 @@ class NodeMetadata {
206209
const AllowedRegVector& getAllowedRegs() const { return *AllowedRegs; }
207210

208211
void setup(const Vector& Costs) {
209-
OptUnsafeEdges = OwningArrayRef<unsigned>(Costs.getLength() - 1);
212+
NumOpts = Costs.getLength() - 1;
213+
OptUnsafeEdges = std::unique_ptr<unsigned[]>(new unsigned[NumOpts]());
210214
}
211215

212216
ReductionState getReductionState() const { return RS; }
@@ -226,21 +230,22 @@ class NodeMetadata {
226230
DeniedOpts += Transpose ? MD.getWorstRow() : MD.getWorstCol();
227231
const bool* UnsafeOpts =
228232
Transpose ? MD.getUnsafeCols() : MD.getUnsafeRows();
229-
for (unsigned i = 0; i < OptUnsafeEdges.size(); ++i)
233+
for (unsigned i = 0; i < NumOpts; ++i)
230234
OptUnsafeEdges[i] += UnsafeOpts[i];
231235
}
232236

233237
void handleRemoveEdge(const MatrixMetadata& MD, bool Transpose) {
234238
DeniedOpts -= Transpose ? MD.getWorstRow() : MD.getWorstCol();
235239
const bool* UnsafeOpts =
236240
Transpose ? MD.getUnsafeCols() : MD.getUnsafeRows();
237-
for (unsigned i = 0; i < OptUnsafeEdges.size(); ++i)
241+
for (unsigned i = 0; i < NumOpts; ++i)
238242
OptUnsafeEdges[i] -= UnsafeOpts[i];
239243
}
240244

241245
bool isConservativelyAllocatable() const {
242-
return (DeniedOpts < OptUnsafeEdges.size()) ||
243-
llvm::is_contained(OptUnsafeEdges, 0);
246+
return (DeniedOpts < NumOpts) ||
247+
(std::find(&OptUnsafeEdges[0], &OptUnsafeEdges[NumOpts], 0) !=
248+
&OptUnsafeEdges[NumOpts]);
244249
}
245250

246251
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
@@ -251,8 +256,9 @@ class NodeMetadata {
251256

252257
private:
253258
ReductionState RS = Unprocessed;
259+
unsigned NumOpts = 0;
254260
unsigned DeniedOpts = 0;
255-
OwningArrayRef<unsigned> OptUnsafeEdges;
261+
std::unique_ptr<unsigned[]> OptUnsafeEdges;
256262
Register VReg;
257263
GraphMetadata::AllowedRegVecRef AllowedRegs;
258264

0 commit comments

Comments
 (0)