[PATCH] D158579: [AMDGPU] Add DAG ISel support for preloaded kernel arguments
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 24 08:07:17 PDT 2023
arsenm added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUArgumentUsageInfo.cpp:63
+// TODO: Print preload kernargs?
void AMDGPUArgumentUsageInfo::print(raw_ostream &OS, const Module *M) const {
----------------
Probably should but I don't even know if this is part of debug printing anywhere, I don't know the last time I saw this
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp:463
+ if (STM.hasGFX90AInsts())
+ KernelDescriptor.kernarg_preload =
----------------
Can you move this to hasKernargPreload helper or something? Probably should make it a full subtarget feature on its own
================
Comment at: llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp:261-263
+ LLVMContext::MD_dereferenceable,
+ MDNode::get(Ctx, MDB.createConstant(ConstantInt::get(
+ Builder.getInt64Ty(), DerefBytes))));
----------------
Can you separate all the formatting changes out?
================
Comment at: llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp:5003
+ } else if (ID == ".amdhsa_user_sgpr_kernarg_preload_length") {
+ if (Val > 16)
+ return OutOfRangeError(ValRange);
----------------
arsenm wrote:
> Is the interaction with .amdhsa_user_sgpr_count checked?
Check the subtarget for the limit
================
Comment at: llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp:5003-5004
+ } else if (ID == ".amdhsa_user_sgpr_kernarg_preload_length") {
+ if (Val > 16)
+ return OutOfRangeError(ValRange);
+ PARSE_BITS_ENTRY(KD.kernarg_preload, KERNARG_PRELOAD_SPEC_LENGTH, Val,
----------------
Is the interaction with .amdhsa_user_sgpr_count checked?
================
Comment at: llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp:1949-1955
+ using namespace amdhsa;
+ TwoByteBuffer = DE.getU16(Cursor);
+ PRINT_DIRECTIVE(".amdhsa_user_sgpr_kernarg_preload_length",
+ KERNARG_PRELOAD_SPEC_LENGTH);
+ PRINT_DIRECTIVE(".amdhsa_user_sgpr_kernarg_preload_offset",
+ KERNARG_PRELOAD_SPEC_OFFSET);
+ return MCDisassembler::Success;
----------------
Can you split the assembler / MC bits into a separate patch?
================
Comment at: llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp:904-906
+ MCSymbolRefExpr::create(KernelCodeSymbol,
+ MCSymbolRefExpr::VK_AMDGPU_REL64,
+ Context),
----------------
Needs some temporary variables
================
Comment at: llvm/lib/Target/AMDGPU/SIISelLowering.cpp:2235
+
+void SITargetLowering::allocatePreloadKernArgSGPRs(
+ CCState &CCInfo, SmallVectorImpl<CCValAssign> &ArgLocs,
----------------
I do not understand this metadata system, you know directly from the IR arguments the register layout
================
Comment at: llvm/lib/Target/AMDGPU/SIISelLowering.cpp:2245
+
+ if (!dyn_cast<MDNode>(MD->operands().begin()->get()))
+ return;
----------------
unchecked dyn_caast
================
Comment at: llvm/test/MC/AMDGPU/hsa-v4.s:113
.amdhsa_system_vgpr_workitem_id 1
.amdhsa_next_free_vgpr 9
.amdhsa_next_free_sgpr 27
----------------
Need some tests with the limit exceeded diagnostic and interactions with amdhsa_user_sgpr_count
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158579/new/
https://reviews.llvm.org/D158579
More information about the llvm-commits
mailing list