[llvm] [AMDGPU] MCExpr-ify MC layer kernel descriptor (PR #80855)

Janek van Oirschot via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 8 05:34:27 PST 2024


JanekvO wrote:

> > > Can you add some examples where the expression has to refer to other functions' values?
> > 
> > 
> > Currently there is no explicit tests I can add for this. I have one patch that converts AMDGPUResourceUsageAnalysis from a module level pass to a MachineFunction level pass and will include the infrastructure for resource usage information to be propagated through MCExprs and symbols. This propagation may mean that a symbol may be used before it is defined. However, I can't put a PR up for that unless I add support for the MC layer emit/parse for all (meta)data derived from resource usage.
> 
> I would expect the MC part to be decoupled from the codegen change to make use of it. I'm mostly wondering what the syntax ends up looking like

What I got so far for assembly format is emitting set directives for each resource usage info property gathered by AMDGPUResourceUsageAnalysis which are then combined with its callees' property (through a MAX/OR target specific MCExpr).
For example:
```
with_call:
    call uses_vcc
    ...

.set with_call.num_vgpr, MAX(41, uses_vcc.num_vgpr)
.set with_call.num_agpr, MAX(0, uses_vcc.num_agpr)
.set with_call.num_sgpr, MAX(34, uses_vcc.num_sgpr)
.set with_call.private_seg_size, 16+(MAX(uses_vcc.private_seg_size))
.set with_call.uses_vcc, OR(1, uses_vcc.uses_vcc)
.set with_call.uses_flat_scratch, OR(0, uses_vcc.uses_flat_scratch)
.set with_call.has_dyn_sized_stack, OR(0, uses_vcc.has_dyn_sized_stack)
.set with_call.has_recursion, OR(0, uses_vcc.has_recursion)
.set with_call.has_indirect_call, OR(0, uses_vcc.has_indirect_call)

uses_vcc:
    ...

.set uses_vcc.num_vgpr, 0
.set uses_vcc.num_agpr, 0
.set uses_vcc.num_sgpr, 32
.set uses_vcc.private_seg_size, 0
.set uses_vcc.uses_vcc, 1
.set uses_vcc.uses_flat_scratch, 0
.set uses_vcc.has_dyn_sized_stack, 0
.set uses_vcc.has_recursion, 0
.set uses_vcc.has_indirect_call, 0
```

These symbols could then be used to construct any derived fields (e.g., some of the kernel descriptor fields).

https://github.com/llvm/llvm-project/pull/80855


More information about the llvm-commits mailing list