[llvm] [SPIRV] Add support for pointers to functions with aggregate args/returns as global variables / constant initialisers (PR #169595)
Alex Voicu via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 3 14:38:25 PST 2025
================
@@ -518,22 +539,17 @@ SPIRVPrepareFunctions::removeAggregateTypesFromSignature(Function *F) {
Returns);
NewF->takeName(F);
- NamedMDNode *FuncMD =
- F->getParent()->getOrInsertNamedMetadata("spv.cloned_funcs");
- SmallVector<Metadata *, 2> MDArgs;
- MDArgs.push_back(MDString::get(B.getContext(), NewF->getName()));
- for (auto &ChangedTyP : ChangedTypes)
- MDArgs.push_back(MDNode::get(
- B.getContext(),
- {ConstantAsMetadata::get(B.getInt32(ChangedTyP.first)),
- ValueAsMetadata::get(Constant::getNullValue(ChangedTyP.second))}));
- MDNode *ThisFuncMD = MDNode::get(B.getContext(), MDArgs);
- FuncMD->addOperand(ThisFuncMD);
+ addFunctionTypeMutation(
+ NewF->getParent()->getOrInsertNamedMetadata("spv.cloned_funcs"),
+ std::move(ChangedTypes), NewF->getName());
for (auto *U : make_early_inc_range(F->users())) {
if (auto *CI = dyn_cast<CallInst>(U))
CI->mutateFunctionType(NewF->getFunctionType());
- U->replaceUsesOfWith(F, NewF);
+ if (auto *C = dyn_cast<Constant>(U))
+ C->handleOperandChange(F, NewF);
+ else
+ U->replaceUsesOfWith(F, NewF);
}
----------------
AlexVlx wrote:
I'm not entirely sure what you mean by the first bullet. This has to handle indirect call cases as well, where there'd be no called function, but rather a called operand; what we are interested in is mutating the call site itself. Could you say more about your concern?
As for using RAUW, I don't quite think we can do that, since it does `assert(New->getType() == getType() && "replaceAllUses of value with new value of different type!");`. Otherwise stated, it expects the type of the new value to match the type of the old, which is not quite what is happening here, I don' think. We are using the riskier forms because we're using a value with new, aggregate free type.
https://github.com/llvm/llvm-project/pull/169595
More information about the llvm-commits
mailing list