[llvm] dfd74db - [ORC] Move SimpleRemoteEPCServer::Dispatcher into OrcShared.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 8 11:30:10 PDT 2021


Author: Lang Hames
Date: 2021-10-08T11:29:57-07:00
New Revision: dfd74db9813b0c7c64038c303726ba43f335e07a

URL: https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a
DIFF: https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a.diff

LOG: [ORC] Move SimpleRemoteEPCServer::Dispatcher into OrcShared.

Renames SimpleRemoteEPCServer::Dispatcher to SimpleRemoteEPCDispatcher and
moves it into OrcShared. SimpleRemoteEPCServer::ThreadDispatcher is similarly
moved and renamed to DynamicThreadPoolSimpleRemoteEPCDispatcher.

This will allow these classes to be reused by SimpleRemoteEPC on the controller
side of the connection.

Added: 
    

Modified: 
    llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
    llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
    llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
    llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
    llvm/tools/lli/ChildTarget/ChildTarget.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
index f3dcb0fd8ba62..03a6710fccda8 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
@@ -15,6 +15,7 @@
 #define LLVM_EXECUTIONENGINE_ORC_SHARED_SIMPLEREMOTEEPCUTILS_H
 
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
@@ -138,6 +139,29 @@ class FDSimpleRemoteEPCTransport : public SimpleRemoteEPCTransport {
   std::atomic<bool> Disconnected{false};
 };
 
+/// Dispatches calls to runWrapper.
+class SimpleRemoteEPCDispatcher {
+public:
+  virtual ~SimpleRemoteEPCDispatcher();
+  virtual void dispatch(unique_function<void()> Work) = 0;
+  virtual void shutdown() = 0;
+};
+
+#if LLVM_ENABLE_THREADS
+class DynamicThreadPoolSimpleRemoteEPCDispatcher
+    : public SimpleRemoteEPCDispatcher {
+public:
+  void dispatch(unique_function<void()> Work) override;
+  void shutdown() override;
+
+private:
+  std::mutex DispatchMutex;
+  bool Running = true;
+  size_t Outstanding = 0;
+  std::condition_variable OutstandingCV;
+};
+#endif
+
 struct RemoteSymbolLookupSetElement {
   std::string Name;
   bool Required;

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
index 38c413db2e947..dd721203410b4 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
@@ -37,28 +37,6 @@ class SimpleRemoteEPCServer : public SimpleRemoteEPCTransportClient {
 public:
   using ReportErrorFunction = unique_function<void(Error)>;
 
-  /// Dispatches calls to runWrapper.
-  class Dispatcher {
-  public:
-    virtual ~Dispatcher();
-    virtual void dispatch(unique_function<void()> Work) = 0;
-    virtual void shutdown() = 0;
-  };
-
-#if LLVM_ENABLE_THREADS
-  class ThreadDispatcher : public Dispatcher {
-  public:
-    void dispatch(unique_function<void()> Work) override;
-    void shutdown() override;
-
-  private:
-    std::mutex DispatchMutex;
-    bool Running = true;
-    size_t Outstanding = 0;
-    std::condition_variable OutstandingCV;
-  };
-#endif
-
   class Setup {
     friend class SimpleRemoteEPCServer;
 
@@ -68,7 +46,9 @@ class SimpleRemoteEPCServer : public SimpleRemoteEPCTransportClient {
     std::vector<std::unique_ptr<ExecutorBootstrapService>> &services() {
       return Services;
     }
-    void setDispatcher(std::unique_ptr<Dispatcher> D) { S.D = std::move(D); }
+    void setDispatcher(std::unique_ptr<SimpleRemoteEPCDispatcher> D) {
+      S.D = std::move(D);
+    }
     void setErrorReporter(unique_function<void(Error)> ReportError) {
       S.ReportError = std::move(ReportError);
     }
@@ -166,7 +146,7 @@ class SimpleRemoteEPCServer : public SimpleRemoteEPCTransportClient {
   enum { ServerRunning, ServerShuttingDown, ServerShutDown } RunState;
   Error ShutdownErr = Error::success();
   std::unique_ptr<SimpleRemoteEPCTransport> T;
-  std::unique_ptr<Dispatcher> D;
+  std::unique_ptr<SimpleRemoteEPCDispatcher> D;
   std::vector<std::unique_ptr<ExecutorBootstrapService>> Services;
   ReportErrorFunction ReportError;
 

diff  --git a/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp b/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
index 62f4ff8a34090..37d57c0d2d1bf 100644
--- a/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
@@ -241,5 +241,32 @@ void FDSimpleRemoteEPCTransport::listenLoop() {
   C.handleDisconnect(std::move(Err));
 }
 
+SimpleRemoteEPCDispatcher::~SimpleRemoteEPCDispatcher() {}
+
+#if LLVM_ENABLE_THREADS
+void DynamicThreadPoolSimpleRemoteEPCDispatcher::dispatch(
+    unique_function<void()> Work) {
+  {
+    std::lock_guard<std::mutex> Lock(DispatchMutex);
+    if (!Running)
+      return;
+    ++Outstanding;
+  }
+
+  std::thread([this, Work = std::move(Work)]() mutable {
+    Work();
+    std::lock_guard<std::mutex> Lock(DispatchMutex);
+    --Outstanding;
+    OutstandingCV.notify_all();
+  }).detach();
+}
+
+void DynamicThreadPoolSimpleRemoteEPCDispatcher::shutdown() {
+  std::unique_lock<std::mutex> Lock(DispatchMutex);
+  Running = false;
+  OutstandingCV.wait(Lock, [this]() { return Outstanding == 0; });
+}
+#endif
+
 } // end namespace orc
 } // end namespace llvm

diff  --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
index b23d5670b2509..dba46ecdb7b0c 100644
--- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
@@ -24,33 +24,6 @@ namespace orc {
 
 ExecutorBootstrapService::~ExecutorBootstrapService() {}
 
-SimpleRemoteEPCServer::Dispatcher::~Dispatcher() {}
-
-#if LLVM_ENABLE_THREADS
-void SimpleRemoteEPCServer::ThreadDispatcher::dispatch(
-    unique_function<void()> Work) {
-  {
-    std::lock_guard<std::mutex> Lock(DispatchMutex);
-    if (!Running)
-      return;
-    ++Outstanding;
-  }
-
-  std::thread([this, Work = std::move(Work)]() mutable {
-    Work();
-    std::lock_guard<std::mutex> Lock(DispatchMutex);
-    --Outstanding;
-    OutstandingCV.notify_all();
-  }).detach();
-}
-
-void SimpleRemoteEPCServer::ThreadDispatcher::shutdown() {
-  std::unique_lock<std::mutex> Lock(DispatchMutex);
-  Running = false;
-  OutstandingCV.wait(Lock, [this]() { return Outstanding == 0; });
-}
-#endif
-
 StringMap<ExecutorAddr> SimpleRemoteEPCServer::defaultBootstrapSymbols() {
   StringMap<ExecutorAddr> DBS;
   rt_bootstrap::addTo(DBS);

diff  --git a/llvm/tools/lli/ChildTarget/ChildTarget.cpp b/llvm/tools/lli/ChildTarget/ChildTarget.cpp
index cf1b03a141c5e..a9e330984ef90 100644
--- a/llvm/tools/lli/ChildTarget/ChildTarget.cpp
+++ b/llvm/tools/lli/ChildTarget/ChildTarget.cpp
@@ -54,7 +54,7 @@ int main(int argc, char *argv[]) {
       ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(
           [](SimpleRemoteEPCServer::Setup &S) -> Error {
             S.setDispatcher(
-                std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());
+                std::make_unique<DynamicThreadPoolSimpleRemoteEPCDispatcher>());
             S.bootstrapSymbols() =
                 SimpleRemoteEPCServer::defaultBootstrapSymbols();
             S.services().push_back(

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
index 7100c274b988b..b1ba6a9e6bac3 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
@@ -158,7 +158,7 @@ int main(int argc, char *argv[]) {
       ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(
           [](SimpleRemoteEPCServer::Setup &S) -> Error {
             S.setDispatcher(
-                std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());
+                std::make_unique<DynamicThreadPoolSimpleRemoteEPCDispatcher>());
             S.bootstrapSymbols() =
                 SimpleRemoteEPCServer::defaultBootstrapSymbols();
             S.services().push_back(


        


More information about the llvm-commits mailing list