[PATCH] D128346: [AMDGPU] Set scratch size to 0 if is_dynamic_callstack is set

Abinav Puthan Purayil via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 11:17:40 PDT 2022


abinavpp added inline comments.


================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp:698-699
+      Info.HasDynamicallySizedStack || Info.HasRecursion;
+  ProgInfo.ScratchSize =
+      ProgInfo.DynamicCallStack ? 0 : Info.PrivateSegmentSize;
   ProgInfo.VCCUsed = Info.UsesVCC;
----------------
abinavpp wrote:
> arsenm wrote:
> > Dynamic call size does not imply 0 for the statically reported size. We still need to report the minimum statically known requirement
> Does that mean we should do the following instead?
> 
> ```
> diff --git a/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp b/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp
> index f7f93c75c870..e6a5aa989c9d 100644
> --- a/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp
> +++ b/llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp
> @@ -165,8 +151,6 @@ AMDGPUResourceUsageAnalysis::analyzeResourceUsage(
>  
>    // Assume a big number if there are any unknown sized objects.
>    Info.HasDynamicallySizedStack = FrameInfo.hasVarSizedObjects();
> -  if (Info.HasDynamicallySizedStack)
> -    Info.PrivateSegmentSize += AssumedStackSizeForDynamicSizeObjects;
>  
>    if (MFI->isStackRealigned())
>      Info.PrivateSegmentSize += FrameInfo.getMaxAlign().value();
> @@ -469,16 +453,12 @@ AMDGPUResourceUsageAnalysis::analyzeResourceUsage(
>              // directly call the tail called function. If a kernel directly
>              // calls a tail recursive function, we'll assume maximum stack size
>              // based on the regular call instruction.
> -            CalleeFrameSize =
> -              std::max(CalleeFrameSize,
> -                       static_cast<uint64_t>(AssumedStackSizeForExternalCall));
> +            CalleeFrameSize = 0;
>            }
>          }
>  
>          if (IsIndirect || I == CallGraphResourceInfo.end()) {
> -          CalleeFrameSize =
> -              std::max(CalleeFrameSize,
> -                       static_cast<uint64_t>(AssumedStackSizeForExternalCall));
> +          CalleeFrameSize = 0;
> ```
Updated the revision with the above change. Let me know if we're good with the test changes.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D128346/new/

https://reviews.llvm.org/D128346



More information about the llvm-commits mailing list