Skip to content

Commit

Permalink
AMDGPU: Remove ability to reserve VGPRs for debugger
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D48234

llvm-svn: 335288
  • Loading branch information
kzhuravl committed Jun 21, 2018
1 parent 37e9739 commit e004b3d
Show file tree
Hide file tree
Showing 8 changed files with 2 additions and 118 deletions.
7 changes: 0 additions & 7 deletions llvm/lib/Target/AMDGPU/AMDGPU.td
Expand Up @@ -652,13 +652,6 @@ def FeatureDebuggerInsertNops : SubtargetFeature<
"Insert one nop instruction for each high level source statement"
>;

def FeatureDebuggerReserveRegs : SubtargetFeature<
"amdgpu-debugger-reserve-regs",
"DebuggerReserveRegs",
"true",
"Reserve registers for debugger usage"
>;

def FeatureDebuggerEmitPrologue : SubtargetFeature<
"amdgpu-debugger-emit-prologue",
"DebuggerEmitPrologue",
Expand Down
17 changes: 0 additions & 17 deletions llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
Expand Up @@ -474,13 +474,6 @@ bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
" NumVGPRsForWavesPerEU: " +
Twine(CurrentProgramInfo.NumVGPRsForWavesPerEU), false);

OutStreamer->emitRawComment(
" ReservedVGPRFirst: " + Twine(CurrentProgramInfo.ReservedVGPRFirst),
false);
OutStreamer->emitRawComment(
" ReservedVGPRCount: " + Twine(CurrentProgramInfo.ReservedVGPRCount),
false);

OutStreamer->emitRawComment(
" WaveLimiterHint : " + Twine(MFI->needsWaveLimiter()), false);

Expand Down Expand Up @@ -831,7 +824,6 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
// unified.
unsigned ExtraSGPRs = IsaInfo::getNumExtraSGPRs(
STM.getFeatureBits(), ProgInfo.VCCUsed, ProgInfo.FlatUsed);
unsigned ExtraVGPRs = STM.getReservedNumVGPRs(MF);

// Check the addressable register limit before we add ExtraSGPRs.
if (STM.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS &&
Expand All @@ -852,7 +844,6 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,

// Account for extra SGPRs and VGPRs reserved for debugger use.
ProgInfo.NumSGPR += ExtraSGPRs;
ProgInfo.NumVGPR += ExtraVGPRs;

// Ensure there are enough SGPRs and VGPRs for wave dispatch, where wave
// dispatch registers are function args.
Expand Down Expand Up @@ -918,10 +909,6 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
ProgInfo.VGPRBlocks = IsaInfo::getNumVGPRBlocks(
STM.getFeatureBits(), ProgInfo.NumVGPRsForWavesPerEU);

// Record first reserved VGPR and number of reserved VGPRs.
ProgInfo.ReservedVGPRFirst = STM.debuggerReserveRegs() ? ProgInfo.NumVGPR : 0;
ProgInfo.ReservedVGPRCount = STM.getReservedNumVGPRs(MF);

// Update DebuggerWavefrontPrivateSegmentOffsetSGPR and
// DebuggerPrivateSegmentBufferSGPR fields if "amdgpu-debugger-emit-prologue"
// attribute was requested.
Expand Down Expand Up @@ -1196,8 +1183,6 @@ void AMDGPUAsmPrinter::getAmdKernelCode(amd_kernel_code_t &Out,
Out.workitem_vgpr_count = CurrentProgramInfo.NumVGPR;
Out.workitem_private_segment_byte_size = CurrentProgramInfo.ScratchSize;
Out.workgroup_group_segment_byte_size = CurrentProgramInfo.LDSSize;
Out.reserved_vgpr_first = CurrentProgramInfo.ReservedVGPRFirst;
Out.reserved_vgpr_count = CurrentProgramInfo.ReservedVGPRCount;

// These alignment values are specified in powers of two, so alignment =
// 2^n. The minimum alignment is 2^4 = 16.
Expand Down Expand Up @@ -1248,8 +1233,6 @@ AMDGPU::HSAMD::Kernel::DebugProps::Metadata AMDGPUAsmPrinter::getHSADebugProps(

HSADebugProps.mDebuggerABIVersion.push_back(1);
HSADebugProps.mDebuggerABIVersion.push_back(0);
HSADebugProps.mReservedNumVGPRs = ProgramInfo.ReservedVGPRCount;
HSADebugProps.mReservedFirstVGPR = ProgramInfo.ReservedVGPRFirst;

if (STM.debuggerEmitPrologue()) {
HSADebugProps.mPrivateSegmentBufferSGPR =
Expand Down
7 changes: 0 additions & 7 deletions llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.h
Expand Up @@ -84,13 +84,6 @@ class AMDGPUAsmPrinter final : public AsmPrinter {
// Number of VGPRs that meets number of waves per execution unit request.
uint32_t NumVGPRsForWavesPerEU = 0;

// If ReservedVGPRCount is 0 then must be 0. Otherwise, this is the first
// fixed VGPR number reserved.
uint16_t ReservedVGPRFirst = 0;

// The number of consecutive VGPRs reserved.
uint16_t ReservedVGPRCount = 0;

// Fixed SGPR number used to hold wave scratch offset for entire kernel
// execution, or std::numeric_limits<uint16_t>::max() if the register is not
// used or not known.
Expand Down
7 changes: 1 addition & 6 deletions llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp
Expand Up @@ -124,7 +124,6 @@ AMDGPUSubtarget::AMDGPUSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
EnableXNACK(false),
TrapHandler(false),
DebuggerInsertNops(false),
DebuggerReserveRegs(false),
DebuggerEmitPrologue(false),

EnableHugePrivateBuffer(false),
Expand Down Expand Up @@ -550,10 +549,6 @@ unsigned SISubtarget::getMaxNumVGPRs(const MachineFunction &MF) const {
unsigned Requested = AMDGPU::getIntegerAttribute(
F, "amdgpu-num-vgpr", MaxNumVGPRs);

// Make sure requested value does not violate subtarget's specifications.
if (Requested && Requested <= getReservedNumVGPRs(MF))
Requested = 0;

// Make sure requested value is compatible with values implied by
// default/requested minimum/maximum number of waves per execution unit.
if (Requested && Requested > getMaxNumVGPRs(WavesPerEU.first))
Expand All @@ -566,7 +561,7 @@ unsigned SISubtarget::getMaxNumVGPRs(const MachineFunction &MF) const {
MaxNumVGPRs = Requested;
}

return MaxNumVGPRs - getReservedNumVGPRs(MF);
return MaxNumVGPRs;
}

namespace {
Expand Down
13 changes: 1 addition & 12 deletions llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
Expand Up @@ -124,7 +124,6 @@ class AMDGPUSubtarget : public AMDGPUGenSubtargetInfo {
bool EnableXNACK;
bool TrapHandler;
bool DebuggerInsertNops;
bool DebuggerReserveRegs;
bool DebuggerEmitPrologue;

// Used as options.
Expand Down Expand Up @@ -823,18 +822,13 @@ class SISubtarget final : public AMDGPUSubtarget {
}

bool debuggerSupported() const {
return debuggerInsertNops() && debuggerReserveRegs() &&
debuggerEmitPrologue();
return debuggerInsertNops() && debuggerEmitPrologue();
}

bool debuggerInsertNops() const {
return DebuggerInsertNops;
}

bool debuggerReserveRegs() const {
return DebuggerReserveRegs;
}

bool debuggerEmitPrologue() const {
return DebuggerEmitPrologue;
}
Expand Down Expand Up @@ -962,11 +956,6 @@ class SISubtarget final : public AMDGPUSubtarget {
return AMDGPU::IsaInfo::getMaxNumVGPRs(getFeatureBits(), WavesPerEU);
}

/// \returns Reserved number of VGPRs for given function \p MF.
unsigned getReservedNumVGPRs(const MachineFunction &MF) const {
return debuggerReserveRegs() ? 4 : 0;
}

/// \returns Maximum number of VGPRs that meets number of waves per execution
/// unit requirement for function \p MF, or number of VGPRs explicitly
/// requested using "amdgpu-num-vgpr" attribute attached to function \p MF.
Expand Down
1 change: 0 additions & 1 deletion llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h
Expand Up @@ -85,7 +85,6 @@ class GCNTTIImpl final : public BasicTTIImplBase<GCNTTIImpl> {
AMDGPU::FeatureAutoWaitcntBeforeBarrier,
AMDGPU::FeatureDebuggerEmitPrologue,
AMDGPU::FeatureDebuggerInsertNops,
AMDGPU::FeatureDebuggerReserveRegs,

// Property of the kernel/environment which can't actually differ.
AMDGPU::FeatureSGPRInitBug,
Expand Down
64 changes: 0 additions & 64 deletions llvm/test/CodeGen/AMDGPU/debugger-reserve-regs.ll

This file was deleted.

4 changes: 0 additions & 4 deletions llvm/test/CodeGen/AMDGPU/hsa-metadata-kernel-debug-props.ll
Expand Up @@ -13,10 +13,6 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
; CHECK: SymbolName: 'test@kd'
; CHECK: DebugProps:
; CHECK: DebuggerABIVersion: [ 1, 0 ]
; CHECK: ReservedNumVGPRs: 4
; GFX700: ReservedFirstVGPR: 8
; GFX802: ReservedFirstVGPR: 8
; GFX900: ReservedFirstVGPR: 10
; CHECK: PrivateSegmentBufferSGPR: 0
; CHECK: WavefrontPrivateSegmentOffsetSGPR: 11
define amdgpu_kernel void @test(i32 addrspace(1)* %A) #0 !dbg !7 !kernel_arg_addr_space !12 !kernel_arg_access_qual !13 !kernel_arg_type !14 !kernel_arg_base_type !14 !kernel_arg_type_qual !15 {
Expand Down

0 comments on commit e004b3d

Please sign in to comment.