diff --git a/llvm/include/llvm/CodeGen/LiveRegMatrix.h b/llvm/include/llvm/CodeGen/LiveRegMatrix.h index 486392ca3c49d..373f4402dd8d6 100644 --- a/llvm/include/llvm/CodeGen/LiveRegMatrix.h +++ b/llvm/include/llvm/CodeGen/LiveRegMatrix.h @@ -48,7 +48,7 @@ class LiveRegMatrix { unsigned UserTag = 0; // The matrix is represented as a LiveIntervalUnion per register unit. - LiveIntervalUnion::Allocator LIUAlloc; + std::unique_ptr LIUAlloc; LiveIntervalUnion::Array Matrix; // Cached queries per register unit. @@ -59,15 +59,12 @@ class LiveRegMatrix { unsigned RegMaskVirtReg = 0; BitVector RegMaskUsable; - LiveRegMatrix() = default; + LiveRegMatrix() + : LIUAlloc(std::make_unique()) {}; void releaseMemory(); public: - LiveRegMatrix(LiveRegMatrix &&Other) - : TRI(Other.TRI), LIS(Other.LIS), VRM(Other.VRM), UserTag(Other.UserTag), - Matrix(std::move(Other.Matrix)), Queries(std::move(Other.Queries)), - RegMaskTag(Other.RegMaskTag), RegMaskVirtReg(Other.RegMaskVirtReg), - RegMaskUsable(std::move(Other.RegMaskUsable)) {} + LiveRegMatrix(LiveRegMatrix &&Other) = default; void init(MachineFunction &MF, LiveIntervals &LIS, VirtRegMap &VRM); diff --git a/llvm/lib/CodeGen/LiveRegMatrix.cpp b/llvm/lib/CodeGen/LiveRegMatrix.cpp index 9744c47d5a851..3367171a15662 100644 --- a/llvm/lib/CodeGen/LiveRegMatrix.cpp +++ b/llvm/lib/CodeGen/LiveRegMatrix.cpp @@ -66,7 +66,7 @@ void LiveRegMatrix::init(MachineFunction &MF, LiveIntervals &pLIS, unsigned NumRegUnits = TRI->getNumRegUnits(); if (NumRegUnits != Matrix.size()) Queries.reset(new LiveIntervalUnion::Query[NumRegUnits]); - Matrix.init(LIUAlloc, NumRegUnits); + Matrix.init(*LIUAlloc, NumRegUnits); // Make sure no stale queries get reused. invalidateVirtRegs();