https://github.com/vtjnash updated https://github.com/llvm/llvm-project/pull/185550
>From fd30b8a151582a435427fdcb97a844623d5b1490 Mon Sep 17 00:00:00 2001 From: Jameson Nash <[email protected]> Date: Mon, 9 Mar 2026 21:24:55 -0400 Subject: [PATCH] [clang] fix OutputSemantic list in HLSL Normally sane front-ends with the common calling-conventions avoid having multiple sret with a return value, so this is NFCI. However, multiple can be valid. This rewrites an odd looking DenseMap of one element that was needed for iteration into a more sensible vector. Noted in https://github.com/llvm/llvm-project/pull/181740 review. --- clang/lib/CodeGen/CGHLSLRuntime.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp index 7ce722c857409..2832714bec87d 100644 --- a/clang/lib/CodeGen/CGHLSLRuntime.cpp +++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp @@ -951,8 +951,7 @@ void CGHLSLRuntime::emitEntryFunction(const FunctionDecl *FD, OB.emplace_back("convergencectrl", bundleArgs); } - llvm::DenseMap<const DeclaratorDecl *, std::pair<llvm::Value *, llvm::Type *>> - OutputSemantic; + std::vector<std::pair<llvm::Value *, llvm::Type *>> OutputSemantic; unsigned SRetOffset = 0; for (const auto &Param : Fn->args()) { @@ -960,7 +959,7 @@ void CGHLSLRuntime::emitEntryFunction(const FunctionDecl *FD, SRetOffset = 1; llvm::Type *VarType = Param.getParamStructRetType(); llvm::Value *Var = B.CreateAlloca(VarType); - OutputSemantic.try_emplace(FD, std::make_pair(Var, VarType)); + OutputSemantic.push_back(std::make_pair(Var, VarType)); Args.push_back(Var); continue; } @@ -997,17 +996,17 @@ void CGHLSLRuntime::emitEntryFunction(const FunctionDecl *FD, if (Fn->getReturnType() != CGM.VoidTy) // Element type is unused, so set to dummy value (NULL). - OutputSemantic.try_emplace(FD, std::make_pair(CI, nullptr)); + OutputSemantic.push_back(std::make_pair(CI, nullptr)); - for (auto &[Decl, SourcePair] : OutputSemantic) { + for (auto &SourcePair : OutputSemantic) { llvm::Value *Source = SourcePair.first; llvm::Type *ElementType = SourcePair.second; AllocaInst *AI = dyn_cast<AllocaInst>(Source); llvm::Value *SourceValue = AI ? B.CreateLoad(ElementType, Source) : Source; - auto AttrBegin = Decl->specific_attr_begin<HLSLAppliedSemanticAttr>(); - auto AttrEnd = Decl->specific_attr_end<HLSLAppliedSemanticAttr>(); - handleSemanticStore(B, FD, SourceValue, Decl, AttrBegin, AttrEnd); + auto AttrBegin = FD->specific_attr_begin<HLSLAppliedSemanticAttr>(); + auto AttrEnd = FD->specific_attr_end<HLSLAppliedSemanticAttr>(); + handleSemanticStore(B, FD, SourceValue, FD, AttrBegin, AttrEnd); } B.CreateRetVoid(); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
