Index: llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h =================================================================== --- llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h +++ llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h @@ -389,9 +389,9 @@ // unit. Minimum - first, maximum - second. std::pair WavesPerEU = {0, 0}; - std::unique_ptr BufferPSV; - std::unique_ptr ImagePSV; - std::unique_ptr GWSResourcePSV; + const AMDGPUBufferPseudoSourceValue BufferPSV; + const AMDGPUImagePseudoSourceValue ImagePSV; + const AMDGPUGWSResourcePseudoSourceValue GWSResourcePSV; private: unsigned NumUserSGPRs = 0; @@ -932,27 +932,17 @@ const AMDGPUBufferPseudoSourceValue * getBufferPSV(const AMDGPUTargetMachine &TM) { - if (!BufferPSV) - BufferPSV = std::make_unique(TM); - - return BufferPSV.get(); + return &BufferPSV; } const AMDGPUImagePseudoSourceValue * getImagePSV(const AMDGPUTargetMachine &TM) { - if (!ImagePSV) - ImagePSV = std::make_unique(TM); - - return ImagePSV.get(); + return &ImagePSV; } const AMDGPUGWSResourcePseudoSourceValue * getGWSPSV(const AMDGPUTargetMachine &TM) { - if (!GWSResourcePSV) { - GWSResourcePSV = std::make_unique(TM); - } - - return GWSResourcePSV.get(); + return &GWSResourcePSV; } unsigned getOccupancy() const { Index: llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp =================================================================== --- llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp +++ llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp @@ -31,6 +31,9 @@ SIMachineFunctionInfo::SIMachineFunctionInfo(const MachineFunction &MF) : AMDGPUMachineFunction(MF), + BufferPSV(static_cast(MF.getTarget())), + ImagePSV(static_cast(MF.getTarget())), + GWSResourcePSV(static_cast(MF.getTarget())), PrivateSegmentBuffer(false), DispatchPtr(false), QueuePtr(false),