================ @@ -3889,6 +3889,215 @@ createDeviceArgumentAccessor(MapInfoData &mapData, llvm::Argument &arg, return builder.saveIP(); } +/// Follow uses of `host_eval`-defined block arguments of the given `omp.target` +/// operation and populate output variables with their corresponding host value +/// (i.e. operand evaluated outside of the target region), based on their uses +/// inside of the target region. +/// +/// Loop bounds and steps are only optionally populated, if output vectors are +/// provided. +static void extractHostEvalClauses(omp::TargetOp targetOp, Value &numThreads, + Value &numTeamsLower, Value &numTeamsUpper, + Value &threadLimit) { + auto blockArgIface = llvm::cast<omp::BlockArgOpenMPOpInterface>(*targetOp); + for (auto item : llvm::zip_equal(targetOp.getHostEvalVars(), ---------------- agozillon wrote:
Small nit: Not sure if it makes sense to do something like: `Value [hostEvalVar, blockArg] = llvm::zip_equal....` here but might save you the std::get's below https://github.com/llvm/llvm-project/pull/116052 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits