[llvm] 5ab7bfa - [ORC] Move callWrapper and callSPSWrapper functions to ExecutorProcessControl.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 2 15:29:15 PDT 2021
Author: Lang Hames
Date: 2021-09-03T08:28:29+10:00
New Revision: 5ab7bfa4fd507862837302a77b24f82249973400
URL: https://github.com/llvm/llvm-project/commit/5ab7bfa4fd507862837302a77b24f82249973400
DIFF: https://github.com/llvm/llvm-project/commit/5ab7bfa4fd507862837302a77b24f82249973400.diff
LOG: [ORC] Move callWrapper and callSPSWrapper functions to ExecutorProcessControl.
The ExecutionSession versions now just forward to the implementations in
ExecutorProcessControl.
This allows callWrapper / callSPSWrapper to be used while bootstrapping an
ExecutorProcessControl instance.
Added:
Modified:
llvm/include/llvm/ExecutionEngine/Orc/Core.h
llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Core.h b/llvm/include/llvm/ExecutionEngine/Orc/Core.h
index e047e5ef5a45c..331a921c8abea 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Core.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Core.h
@@ -1475,12 +1475,7 @@ class ExecutionSession {
/// \endcode{.cpp}
shared::WrapperFunctionResult callWrapper(JITTargetAddress WrapperFnAddr,
ArrayRef<char> ArgBuffer) {
- std::promise<shared::WrapperFunctionResult> RP;
- auto RF = RP.get_future();
- callWrapperAsync(
- [&](shared::WrapperFunctionResult R) { RP.set_value(std::move(R)); },
- WrapperFnAddr, ArgBuffer);
- return RF.get();
+ return EPC->callWrapper(WrapperFnAddr, ArgBuffer);
}
/// Run a wrapper function using SPS to serialize the arguments and
@@ -1501,11 +1496,8 @@ class ExecutionSession {
template <typename SPSSignature, typename... WrapperCallArgTs>
Error callSPSWrapper(JITTargetAddress WrapperFnAddr,
WrapperCallArgTs &&...WrapperCallArgs) {
- return shared::WrapperFunction<SPSSignature>::call(
- [this, WrapperFnAddr](const char *ArgData, size_t ArgSize) {
- return callWrapper(WrapperFnAddr, ArrayRef<char>(ArgData, ArgSize));
- },
- std::forward<WrapperCallArgTs>(WrapperCallArgs)...);
+ return EPC->callSPSWrapper<SPSSignature, WrapperCallArgTs...>(
+ WrapperFnAddr, std::forward<WrapperCallArgTs>(WrapperCallArgs)...);
}
/// Wrap a handler that takes concrete argument types (and a sender for a
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
index 9b00369311c95..90c60162d48f0 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
@@ -189,6 +189,22 @@ class ExecutorProcessControl {
JITTargetAddress WrapperFnAddr,
ArrayRef<char> ArgBuffer) = 0;
+ /// Run a wrapper function in the executor. The wrapper function should be
+ /// callable as:
+ ///
+ /// \code{.cpp}
+ /// CWrapperFunctionResult fn(uint8_t *Data, uint64_t Size);
+ /// \endcode{.cpp}
+ shared::WrapperFunctionResult callWrapper(JITTargetAddress WrapperFnAddr,
+ ArrayRef<char> ArgBuffer) {
+ std::promise<shared::WrapperFunctionResult> RP;
+ auto RF = RP.get_future();
+ callWrapperAsync(
+ [&](shared::WrapperFunctionResult R) { RP.set_value(std::move(R)); },
+ WrapperFnAddr, ArgBuffer);
+ return RF.get();
+ }
+
/// Run a wrapper function using SPS to serialize the arguments and
/// deserialize the results.
template <typename SPSSignature, typename SendResultT, typename... ArgTs>
@@ -205,6 +221,21 @@ class ExecutorProcessControl {
std::move(SendResult), Args...);
}
+ /// Run a wrapper function using SPS to serialize the arguments and
+ /// deserialize the results.
+ ///
+ /// If SPSSignature is a non-void function signature then the second argument
+ /// (the first in the Args list) should be a reference to a return value.
+ template <typename SPSSignature, typename... WrapperCallArgTs>
+ Error callSPSWrapper(JITTargetAddress WrapperFnAddr,
+ WrapperCallArgTs &&...WrapperCallArgs) {
+ return shared::WrapperFunction<SPSSignature>::call(
+ [this, WrapperFnAddr](const char *ArgData, size_t ArgSize) {
+ return callWrapper(WrapperFnAddr, ArrayRef<char>(ArgData, ArgSize));
+ },
+ std::forward<WrapperCallArgTs>(WrapperCallArgs)...);
+ }
+
/// Disconnect from the target process.
///
/// This should be called after the JIT session is shut down.
More information about the llvm-commits
mailing list