diff --git a/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp b/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp @@ -104,6 +104,7 @@ MachineModuleInfo &MMI = getAnalysis().getMMI(); const TargetMachine &TM = TPC->getTM(); + const MCSubtargetInfo &STI = *TM.getMCSubtargetInfo(); bool HasIndirectCall = false; CallGraph CG = CallGraph(M); @@ -111,7 +112,8 @@ // By default, for code object v5 and later, track only the minimum scratch // size - if (AMDGPU::getCodeObjectVersion(M) >= AMDGPU::AMDHSA_COV5) { + if (AMDGPU::getCodeObjectVersion(M) >= AMDGPU::AMDHSA_COV5 || + STI.getTargetTriple().getOS() == Triple::AMDPAL) { if (!AssumedStackSizeForDynamicSizeObjects.getNumOccurrences()) AssumedStackSizeForDynamicSizeObjects = 0; if (!AssumedStackSizeForExternalCall.getNumOccurrences()) diff --git a/llvm/test/CodeGen/AMDGPU/resource-usage-pal.ll b/llvm/test/CodeGen/AMDGPU/resource-usage-pal.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/resource-usage-pal.ll @@ -0,0 +1,17 @@ +; RUN llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck %s + +; Check that we do not assume any default stack size for PAL code object +; indirect calls. The driver knows the max recursion depth, so it can compute +; a more accurate value. + +; CHECK: ScratchSize: 0 +; CHECK: scratch_memory_size: 0 +define amdgpu_vs void @test() { +.entry: + %0 = call i64 @llvm.amdgcn.s.getpc() + %1 = inttoptr i64 %0 to ptr + call amdgpu_gfx void %1() + ret void +} + +declare i64 @llvm.amdgcn.s.getpc()