<div dir="ltr">Hi Arthur,<div><br></div><div>Thanks for the fix!</div><div><br></div><div>-- Lang.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Oct 8, 2021 at 11:43 AM Arthur Eubanks <<a href="mailto:aeubanks@google.com">aeubanks@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">In file included from ../../llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp:9:<br>In file included from ../../llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h:18:<br>../../llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h:161:8: error: no type named 'condition_variable' in namespace 'std'<br>  std::condition_variable OutstandingCV;<br>  ~~~~~^<br>1 error generated.<br><div><br></div><div><br></div><div><br></div><div>Fixed in dd384d28140.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Oct 8, 2021 at 11:30 AM Lang Hames via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
Author: Lang Hames<br>
Date: 2021-10-08T11:29:57-07:00<br>
New Revision: dfd74db9813b0c7c64038c303726ba43f335e07a<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a.diff</a><br>
<br>
LOG: [ORC] Move SimpleRemoteEPCServer::Dispatcher into OrcShared.<br>
<br>
Renames SimpleRemoteEPCServer::Dispatcher to SimpleRemoteEPCDispatcher and<br>
moves it into OrcShared. SimpleRemoteEPCServer::ThreadDispatcher is similarly<br>
moved and renamed to DynamicThreadPoolSimpleRemoteEPCDispatcher.<br>
<br>
This will allow these classes to be reused by SimpleRemoteEPC on the controller<br>
side of the connection.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h<br>
    llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h<br>
    llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp<br>
    llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp<br>
    llvm/tools/lli/ChildTarget/ChildTarget.cpp<br>
    llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h<br>
index f3dcb0fd8ba62..03a6710fccda8 100644<br>
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h<br>
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h<br>
@@ -15,6 +15,7 @@<br>
 #define LLVM_EXECUTIONENGINE_ORC_SHARED_SIMPLEREMOTEEPCUTILS_H<br>
<br>
 #include "llvm/ADT/ArrayRef.h"<br>
+#include "llvm/ADT/FunctionExtras.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/StringMap.h"<br>
 #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"<br>
@@ -138,6 +139,29 @@ class FDSimpleRemoteEPCTransport : public SimpleRemoteEPCTransport {<br>
   std::atomic<bool> Disconnected{false};<br>
 };<br>
<br>
+/// Dispatches calls to runWrapper.<br>
+class SimpleRemoteEPCDispatcher {<br>
+public:<br>
+  virtual ~SimpleRemoteEPCDispatcher();<br>
+  virtual void dispatch(unique_function<void()> Work) = 0;<br>
+  virtual void shutdown() = 0;<br>
+};<br>
+<br>
+#if LLVM_ENABLE_THREADS<br>
+class DynamicThreadPoolSimpleRemoteEPCDispatcher<br>
+    : public SimpleRemoteEPCDispatcher {<br>
+public:<br>
+  void dispatch(unique_function<void()> Work) override;<br>
+  void shutdown() override;<br>
+<br>
+private:<br>
+  std::mutex DispatchMutex;<br>
+  bool Running = true;<br>
+  size_t Outstanding = 0;<br>
+  std::condition_variable OutstandingCV;<br>
+};<br>
+#endif<br>
+<br>
 struct RemoteSymbolLookupSetElement {<br>
   std::string Name;<br>
   bool Required;<br>
<br>
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h<br>
index 38c413db2e947..dd721203410b4 100644<br>
--- a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h<br>
+++ b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h<br>
@@ -37,28 +37,6 @@ class SimpleRemoteEPCServer : public SimpleRemoteEPCTransportClient {<br>
 public:<br>
   using ReportErrorFunction = unique_function<void(Error)>;<br>
<br>
-  /// Dispatches calls to runWrapper.<br>
-  class Dispatcher {<br>
-  public:<br>
-    virtual ~Dispatcher();<br>
-    virtual void dispatch(unique_function<void()> Work) = 0;<br>
-    virtual void shutdown() = 0;<br>
-  };<br>
-<br>
-#if LLVM_ENABLE_THREADS<br>
-  class ThreadDispatcher : public Dispatcher {<br>
-  public:<br>
-    void dispatch(unique_function<void()> Work) override;<br>
-    void shutdown() override;<br>
-<br>
-  private:<br>
-    std::mutex DispatchMutex;<br>
-    bool Running = true;<br>
-    size_t Outstanding = 0;<br>
-    std::condition_variable OutstandingCV;<br>
-  };<br>
-#endif<br>
-<br>
   class Setup {<br>
     friend class SimpleRemoteEPCServer;<br>
<br>
@@ -68,7 +46,9 @@ class SimpleRemoteEPCServer : public SimpleRemoteEPCTransportClient {<br>
     std::vector<std::unique_ptr<ExecutorBootstrapService>> &services() {<br>
       return Services;<br>
     }<br>
-    void setDispatcher(std::unique_ptr<Dispatcher> D) { S.D = std::move(D); }<br>
+    void setDispatcher(std::unique_ptr<SimpleRemoteEPCDispatcher> D) {<br>
+      S.D = std::move(D);<br>
+    }<br>
     void setErrorReporter(unique_function<void(Error)> ReportError) {<br>
       S.ReportError = std::move(ReportError);<br>
     }<br>
@@ -166,7 +146,7 @@ class SimpleRemoteEPCServer : public SimpleRemoteEPCTransportClient {<br>
   enum { ServerRunning, ServerShuttingDown, ServerShutDown } RunState;<br>
   Error ShutdownErr = Error::success();<br>
   std::unique_ptr<SimpleRemoteEPCTransport> T;<br>
-  std::unique_ptr<Dispatcher> D;<br>
+  std::unique_ptr<SimpleRemoteEPCDispatcher> D;<br>
   std::vector<std::unique_ptr<ExecutorBootstrapService>> Services;<br>
   ReportErrorFunction ReportError;<br>
<br>
<br>
diff  --git a/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp b/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp<br>
index 62f4ff8a34090..37d57c0d2d1bf 100644<br>
--- a/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp<br>
+++ b/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp<br>
@@ -241,5 +241,32 @@ void FDSimpleRemoteEPCTransport::listenLoop() {<br>
   C.handleDisconnect(std::move(Err));<br>
 }<br>
<br>
+SimpleRemoteEPCDispatcher::~SimpleRemoteEPCDispatcher() {}<br>
+<br>
+#if LLVM_ENABLE_THREADS<br>
+void DynamicThreadPoolSimpleRemoteEPCDispatcher::dispatch(<br>
+    unique_function<void()> Work) {<br>
+  {<br>
+    std::lock_guard<std::mutex> Lock(DispatchMutex);<br>
+    if (!Running)<br>
+      return;<br>
+    ++Outstanding;<br>
+  }<br>
+<br>
+  std::thread([this, Work = std::move(Work)]() mutable {<br>
+    Work();<br>
+    std::lock_guard<std::mutex> Lock(DispatchMutex);<br>
+    --Outstanding;<br>
+    OutstandingCV.notify_all();<br>
+  }).detach();<br>
+}<br>
+<br>
+void DynamicThreadPoolSimpleRemoteEPCDispatcher::shutdown() {<br>
+  std::unique_lock<std::mutex> Lock(DispatchMutex);<br>
+  Running = false;<br>
+  OutstandingCV.wait(Lock, [this]() { return Outstanding == 0; });<br>
+}<br>
+#endif<br>
+<br>
 } // end namespace orc<br>
 } // end namespace llvm<br>
<br>
diff  --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp<br>
index b23d5670b2509..dba46ecdb7b0c 100644<br>
--- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp<br>
+++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp<br>
@@ -24,33 +24,6 @@ namespace orc {<br>
<br>
 ExecutorBootstrapService::~ExecutorBootstrapService() {}<br>
<br>
-SimpleRemoteEPCServer::Dispatcher::~Dispatcher() {}<br>
-<br>
-#if LLVM_ENABLE_THREADS<br>
-void SimpleRemoteEPCServer::ThreadDispatcher::dispatch(<br>
-    unique_function<void()> Work) {<br>
-  {<br>
-    std::lock_guard<std::mutex> Lock(DispatchMutex);<br>
-    if (!Running)<br>
-      return;<br>
-    ++Outstanding;<br>
-  }<br>
-<br>
-  std::thread([this, Work = std::move(Work)]() mutable {<br>
-    Work();<br>
-    std::lock_guard<std::mutex> Lock(DispatchMutex);<br>
-    --Outstanding;<br>
-    OutstandingCV.notify_all();<br>
-  }).detach();<br>
-}<br>
-<br>
-void SimpleRemoteEPCServer::ThreadDispatcher::shutdown() {<br>
-  std::unique_lock<std::mutex> Lock(DispatchMutex);<br>
-  Running = false;<br>
-  OutstandingCV.wait(Lock, [this]() { return Outstanding == 0; });<br>
-}<br>
-#endif<br>
-<br>
 StringMap<ExecutorAddr> SimpleRemoteEPCServer::defaultBootstrapSymbols() {<br>
   StringMap<ExecutorAddr> DBS;<br>
   rt_bootstrap::addTo(DBS);<br>
<br>
diff  --git a/llvm/tools/lli/ChildTarget/ChildTarget.cpp b/llvm/tools/lli/ChildTarget/ChildTarget.cpp<br>
index cf1b03a141c5e..a9e330984ef90 100644<br>
--- a/llvm/tools/lli/ChildTarget/ChildTarget.cpp<br>
+++ b/llvm/tools/lli/ChildTarget/ChildTarget.cpp<br>
@@ -54,7 +54,7 @@ int main(int argc, char *argv[]) {<br>
       ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(<br>
           [](SimpleRemoteEPCServer::Setup &S) -> Error {<br>
             S.setDispatcher(<br>
-                std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());<br>
+                std::make_unique<DynamicThreadPoolSimpleRemoteEPCDispatcher>());<br>
             S.bootstrapSymbols() =<br>
                 SimpleRemoteEPCServer::defaultBootstrapSymbols();<br>
             S.services().push_back(<br>
<br>
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<br>
index 7100c274b988b..b1ba6a9e6bac3 100644<br>
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp<br>
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp<br>
@@ -158,7 +158,7 @@ int main(int argc, char *argv[]) {<br>
       ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(<br>
           [](SimpleRemoteEPCServer::Setup &S) -> Error {<br>
             S.setDispatcher(<br>
-                std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());<br>
+                std::make_unique<DynamicThreadPoolSimpleRemoteEPCDispatcher>());<br>
             S.bootstrapSymbols() =<br>
                 SimpleRemoteEPCServer::defaultBootstrapSymbols();<br>
             S.services().push_back(<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</blockquote></div>