[llvm] [AMDGPU] Add `.amdgpu.info` section for per-function metadata (PR #192384)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 05:26:09 PDT 2026
================
@@ -6741,6 +6747,110 @@ bool AMDGPUAsmParser::ParseDirectiveAMDGPULDS() {
return false;
}
+bool AMDGPUAsmParser::ParseDirectiveAMDGPUInfo() {
+ if (getParser().checkForValidSection())
+ return true;
+
+ StringRef FuncName;
+ if (getParser().parseIdentifier(FuncName))
+ return TokError("expected symbol name after .amdgpu_info");
+
+ MCSymbol *FuncSym = getContext().getOrCreateSymbol(FuncName);
+ AMDGPU::FuncInfo FI;
+ FI.Sym = FuncSym;
+ bool HasScalarAttrs = false;
+
+ while (true) {
+ while (trySkipToken(AsmToken::EndOfStatement))
+ ;
+
+ StringRef ID;
+ SMLoc IDLoc = getLoc();
+ if (!parseId(ID, "expected directive or .end_amdgpu_info"))
+ return true;
+
+ if (ID == ".end_amdgpu_info")
+ break;
+
+ // Every per-entry directive shares the `.amdgpu_` namespace prefix; strip
+ // it once and dispatch on the distinguishing suffix below. The unstripped
+ // ID is preserved for diagnostics.
+ StringRef Dir = ID;
+ if (!Dir.consume_front(".amdgpu_"))
+ return Error(IDLoc, "unknown .amdgpu_info directive '" + ID + "'");
+
+ if (Dir == "flags") {
+ int64_t Val;
+ if (getParser().parseAbsoluteExpression(Val))
+ return true;
+ auto Flags = static_cast<AMDGPU::FuncInfoFlags>(Val);
+ FI.UsesVCC = !!(Flags & AMDGPU::FuncInfoFlags::FUNC_USES_VCC);
+ FI.UsesFlatScratch =
+ !!(Flags & AMDGPU::FuncInfoFlags::FUNC_USES_FLAT_SCRATCH);
+ FI.HasDynStack = !!(Flags & AMDGPU::FuncInfoFlags::FUNC_HAS_DYN_STACK);
+ HasScalarAttrs = true;
+ } else if (Dir == "num_sgpr") {
+ int64_t Val;
+ if (getParser().parseAbsoluteExpression(Val))
+ return true;
+ FI.NumSGPR = static_cast<uint32_t>(Val);
+ HasScalarAttrs = true;
+ } else if (Dir == "num_vgpr") {
+ int64_t Val;
+ if (getParser().parseAbsoluteExpression(Val))
+ return true;
+ FI.NumArchVGPR = static_cast<uint32_t>(Val);
----------------
arsenm wrote:
Where is it validated these resource ranges are valid for the target?
https://github.com/llvm/llvm-project/pull/192384
More information about the llvm-commits
mailing list