================ @@ -5212,6 +5273,78 @@ static Function *createOutlinedFunction( return Func; } +// Create an entry point for a target task with the following. +// It'll have the following signature +// void @.omp_target_task_proxy_func(i32 %thread.id, ptr %task) +// This function is called from emitTargetTask once the +// code to launch the target kernel has been outlined already. +static Function *emitProxyTaskFunction(OpenMPIRBuilder &OMPBuilder, + IRBuilderBase &Builder, + CallInst *StaleCI) { + Module &M = OMPBuilder.M; + // CalledFunction is the target launch function, i.e. + // the function that sets up kernel arguments and calls + // __tgt_target_kernel to launch the kernel on the device. + Function *CalledFunction = StaleCI->getCalledFunction(); + OpenMPIRBuilder::InsertPointTy IP(StaleCI->getParent(), + StaleCI->getIterator()); + LLVMContext &Ctx = StaleCI->getParent()->getContext(); + Type *ThreadIDTy = Type::getInt32Ty(Ctx); + Type *TaskPtrTy = OMPBuilder.TaskPtr; + Type *TaskTy = OMPBuilder.Task; + auto ProxyFnTy = + FunctionType::get(Builder.getVoidTy(), {ThreadIDTy, TaskPtrTy}, + /* isVarArg */ false); + auto ProxyFn = Function::Create(ProxyFnTy, GlobalValue::InternalLinkage, + ".omp_target_task_proxy_func", + Builder.GetInsertBlock()->getModule()); + + BasicBlock *EntryBB = + BasicBlock::Create(Builder.getContext(), "entry", ProxyFn); + Builder.SetInsertPoint(EntryBB); + + bool HasShareds = StaleCI->arg_size() > 1; ---------------- ergawy wrote:
Can you document what `StaleCI` will look like in case there are shared values and in case there aren't? https://github.com/llvm/llvm-project/pull/93977 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits