AMDGPU: Annotate functions that have stack objects
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 19 May 2020 18:32:31 +0000 (14:32 -0400)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 19 May 2020 22:51:00 +0000 (18:51 -0400)
commit21d2884a9c5b4227a3e7f3220e4398aab1e49e1c
tree593f944d03dc2a6a41a8c2241574352fc1d4dbda
parent3d0d2fefc0a18f13e45a17be04a3da8d2b1299f8
AMDGPU: Annotate functions that have stack objects

Relying on any MachineFunction state in the MachineFunctionInfo
constructor is hazardous, because the construction time is unclear and
determined by the first use. The function may be only partially
constructed, which is part of why we have many of these hacky string
attributes to track what we need for ABI lowering.

For SelectionDAG, all stack objects are created up-front before
calling convention lowering so stack objects are visible at
construction time. For GlobalISel, none of the IR function has been
visited yet and the allocas haven't been added to the MachineFrameInfo
yet. This should fix failing to set flat_scratch_init in GlobalISel
when needed.

This pass really needs to be turned into some kind of analysis, but I
haven't found a nice way use one here.
llvm/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp
llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
llvm/test/CodeGen/AMDGPU/GlobalISel/flat-scratch-init.ll [new file with mode: 0644]
llvm/test/CodeGen/AMDGPU/annotate-kernel-features-hsa.ll