[compiler-rt] 53d35c4 - Revert "[ORC-RT] Replace FnTag arg of WrapperFunction::call with generic dispatch arg."

Mikhail Goncharov via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 10 01:20:35 PDT 2024


Author: Mikhail Goncharov
Date: 2024-09-10T10:19:27+02:00
New Revision: 53d35c4e86ba85703a70b02f736bc31d3268bd34

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

LOG: Revert "[ORC-RT] Replace FnTag arg of WrapperFunction::call with generic dispatch arg."

This reverts commit 462251b80b7ba51dc6c2ef3676cf50ee92867d34.
This reverts commit 9b67c99dc5b0d669a28b714e10e257d3988d1066.

Build fails for compiler-rt/lib/orc/tests/unit/wrapper_function_utils_test.cpp

https://buildkite.com/llvm-project/upstream-bazel/builds/109731#0191da59-6710-4420-92ef-aa6e0355cb2c

Added: 
    

Modified: 
    compiler-rt/lib/orc/coff_platform.cpp
    compiler-rt/lib/orc/elfnix_platform.cpp
    compiler-rt/lib/orc/macho_platform.cpp
    compiler-rt/lib/orc/wrapper_function_utils.h

Removed: 
    compiler-rt/lib/orc/jit_dispatch.h


################################################################################
diff  --git a/compiler-rt/lib/orc/coff_platform.cpp b/compiler-rt/lib/orc/coff_platform.cpp
index 49b805a0ec7d31..346d896f6c9484 100644
--- a/compiler-rt/lib/orc/coff_platform.cpp
+++ b/compiler-rt/lib/orc/coff_platform.cpp
@@ -17,7 +17,6 @@
 
 #include "debug.h"
 #include "error.h"
-#include "jit_dispatch.h"
 #include "wrapper_function_utils.h"
 
 #include <array>
@@ -316,9 +315,9 @@ Error COFFPlatformRuntimeState::dlopenFull(JITDylibState &JDS) {
   // Call back to the JIT to push the initializers.
   Expected<COFFJITDylibDepInfoMap> DepInfoMap((COFFJITDylibDepInfoMap()));
   if (auto Err = WrapperFunction<SPSExpected<SPSCOFFJITDylibDepInfoMap>(
-          SPSExecutorAddr)>::
-          call(JITDispatch(&__orc_rt_coff_push_initializers_tag), DepInfoMap,
-               ExecutorAddr::fromPtr(JDS.Header)))
+          SPSExecutorAddr)>::call(&__orc_rt_coff_push_initializers_tag,
+                                  DepInfoMap,
+                                  ExecutorAddr::fromPtr(JDS.Header)))
     return Err;
   if (!DepInfoMap)
     return DepInfoMap.takeError();
@@ -446,9 +445,10 @@ COFFPlatformRuntimeState::lookupSymbolInJITDylib(void *header,
                                                  std::string_view Sym) {
   Expected<ExecutorAddr> Result((ExecutorAddr()));
   if (auto Err = WrapperFunction<SPSExpected<SPSExecutorAddr>(
-          SPSExecutorAddr,
-          SPSString)>::call(JITDispatch(&__orc_rt_coff_symbol_lookup_tag),
-                            Result, ExecutorAddr::fromPtr(header), Sym))
+          SPSExecutorAddr, SPSString)>::call(&__orc_rt_coff_symbol_lookup_tag,
+                                             Result,
+                                             ExecutorAddr::fromPtr(header),
+                                             Sym))
     return std::move(Err);
   return Result;
 }

diff  --git a/compiler-rt/lib/orc/elfnix_platform.cpp b/compiler-rt/lib/orc/elfnix_platform.cpp
index bd76e3ed0ece7c..dc6af65dc996a0 100644
--- a/compiler-rt/lib/orc/elfnix_platform.cpp
+++ b/compiler-rt/lib/orc/elfnix_platform.cpp
@@ -14,7 +14,6 @@
 #include "common.h"
 #include "compiler.h"
 #include "error.h"
-#include "jit_dispatch.h"
 #include "wrapper_function_utils.h"
 
 #include <algorithm>
@@ -353,9 +352,10 @@ ELFNixPlatformRuntimeState::lookupSymbolInJITDylib(void *DSOHandle,
                                                    std::string_view Sym) {
   Expected<ExecutorAddr> Result((ExecutorAddr()));
   if (auto Err = WrapperFunction<SPSExpected<SPSExecutorAddr>(
-          SPSExecutorAddr,
-          SPSString)>::call(JITDispatch(&__orc_rt_elfnix_symbol_lookup_tag),
-                            Result, ExecutorAddr::fromPtr(DSOHandle), Sym))
+          SPSExecutorAddr, SPSString)>::call(&__orc_rt_elfnix_symbol_lookup_tag,
+                                             Result,
+                                             ExecutorAddr::fromPtr(DSOHandle),
+                                             Sym))
     return std::move(Err);
   return Result;
 }
@@ -368,9 +368,8 @@ ELFNixPlatformRuntimeState::getJITDylibInitializersByName(
   std::string PathStr(Path.data(), Path.size());
   if (auto Err =
           WrapperFunction<SPSExpected<SPSELFNixJITDylibInitializerSequence>(
-              SPSString)>::
-              call(JITDispatch(&__orc_rt_elfnix_get_initializers_tag), Result,
-                   Path))
+              SPSString)>::call(&__orc_rt_elfnix_get_initializers_tag, Result,
+                                Path))
     return std::move(Err);
   return Result;
 }

diff  --git a/compiler-rt/lib/orc/jit_dispatch.h b/compiler-rt/lib/orc/jit_dispatch.h
deleted file mode 100644
index 9b2329fa1e4fc7..00000000000000
--- a/compiler-rt/lib/orc/jit_dispatch.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//===------ jit_dispatch.h - Call back to an ORC controller -----*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of the ORC runtime support library.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef ORC_RT_JIT_DISPATCH_H
-#define ORC_RT_JIT_DISPATCH_H
-
-#include "common.h"
-#include "wrapper_function_utils.h"
-
-namespace orc_rt {
-
-class JITDispatch {
-public:
-  JITDispatch(const void *FnTag) : FnTag(FnTag) {}
-
-  WrapperFunctionResult operator()(const char *ArgData, size_t ArgSize) {
-    // Since the functions cannot be zero/unresolved on Windows, the following
-    // reference taking would always be non-zero, thus generating a compiler
-    // warning otherwise.
-#if !defined(_WIN32)
-    if (ORC_RT_UNLIKELY(!&__orc_rt_jit_dispatch_ctx))
-      return WrapperFunctionResult::createOutOfBandError(
-                 "__orc_rt_jit_dispatch_ctx not set")
-          .release();
-    if (ORC_RT_UNLIKELY(!&__orc_rt_jit_dispatch))
-      return WrapperFunctionResult::createOutOfBandError(
-                 "__orc_rt_jit_dispatch not set")
-          .release();
-#endif
-
-    return __orc_rt_jit_dispatch(&__orc_rt_jit_dispatch_ctx, FnTag, ArgData,
-                                 ArgSize);
-  }
-
-private:
-  const void *FnTag;
-};
-
-} // namespace orc_rt
-
-#endif // ORC_RT_JIT_DISPATCH_H

diff  --git a/compiler-rt/lib/orc/macho_platform.cpp b/compiler-rt/lib/orc/macho_platform.cpp
index c092545b2a3677..1974d3f0ef33f8 100644
--- a/compiler-rt/lib/orc/macho_platform.cpp
+++ b/compiler-rt/lib/orc/macho_platform.cpp
@@ -16,7 +16,6 @@
 #include "debug.h"
 #include "error.h"
 #include "interval_map.h"
-#include "jit_dispatch.h"
 #include "wrapper_function_utils.h"
 
 #include <algorithm>
@@ -916,7 +915,7 @@ Error MachOPlatformRuntimeState::requestPushSymbols(
   Error OpErr = Error::success();
   if (auto Err = WrapperFunction<SPSError(
           SPSExecutorAddr, SPSSequence<SPSTuple<SPSString, bool>>)>::
-          call(JITDispatch(&__orc_rt_macho_push_symbols_tag), OpErr,
+          call(&__orc_rt_macho_push_symbols_tag, OpErr,
                ExecutorAddr::fromPtr(JDS.Header), Symbols)) {
     cantFail(std::move(OpErr));
     return std::move(Err);
@@ -1146,9 +1145,8 @@ Error MachOPlatformRuntimeState::dlopenFull(
   // Unlock so that we can accept the initializer update.
   JDStatesLock.unlock();
   if (auto Err = WrapperFunction<SPSExpected<SPSMachOJITDylibDepInfoMap>(
-          SPSExecutorAddr)>::
-          call(JITDispatch(&__orc_rt_macho_push_initializers_tag), DepInfo,
-               ExecutorAddr::fromPtr(JDS.Header)))
+          SPSExecutorAddr)>::call(&__orc_rt_macho_push_initializers_tag,
+                                  DepInfo, ExecutorAddr::fromPtr(JDS.Header)))
     return Err;
   JDStatesLock.lock();
 

diff  --git a/compiler-rt/lib/orc/wrapper_function_utils.h b/compiler-rt/lib/orc/wrapper_function_utils.h
index d5a709a046210e..e65aac0fe4e53e 100644
--- a/compiler-rt/lib/orc/wrapper_function_utils.h
+++ b/compiler-rt/lib/orc/wrapper_function_utils.h
@@ -13,9 +13,10 @@
 #ifndef ORC_RT_WRAPPER_FUNCTION_UTILS_H
 #define ORC_RT_WRAPPER_FUNCTION_UTILS_H
 
+#include "orc_rt/c_api.h"
+#include "common.h"
 #include "error.h"
 #include "executor_address.h"
-#include "orc_rt/c_api.h"
 #include "simple_packed_serialization.h"
 #include <type_traits>
 
@@ -287,22 +288,30 @@ class WrapperFunction<SPSRetTagT(SPSTagTs...)> {
   using ResultSerializer = detail::ResultSerializer<SPSRetTagT, RetT>;
 
 public:
-  template <typename DispatchFn, typename RetT, typename... ArgTs>
-  static Error call(DispatchFn &&Dispatch, RetT &Result, const ArgTs &...Args) {
+  template <typename RetT, typename... ArgTs>
+  static Error call(const void *FnTag, RetT &Result, const ArgTs &...Args) {
 
     // RetT might be an Error or Expected value. Set the checked flag now:
     // we don't want the user to have to check the unused result if this
     // operation fails.
     detail::ResultDeserializer<SPSRetTagT, RetT>::makeSafe(Result);
 
+    // Since the functions cannot be zero/unresolved on Windows, the following
+    // reference taking would always be non-zero, thus generating a compiler
+    // warning otherwise.
+#if !defined(_WIN32)
+    if (ORC_RT_UNLIKELY(!&__orc_rt_jit_dispatch_ctx))
+      return make_error<StringError>("__orc_rt_jit_dispatch_ctx not set");
+    if (ORC_RT_UNLIKELY(!&__orc_rt_jit_dispatch))
+      return make_error<StringError>("__orc_rt_jit_dispatch not set");
+#endif
     auto ArgBuffer =
         WrapperFunctionResult::fromSPSArgs<SPSArgList<SPSTagTs...>>(Args...);
     if (const char *ErrMsg = ArgBuffer.getOutOfBandError())
       return make_error<StringError>(ErrMsg);
 
-    WrapperFunctionResult ResultBuffer =
-        Dispatch(ArgBuffer.data(), ArgBuffer.size());
-
+    WrapperFunctionResult ResultBuffer = __orc_rt_jit_dispatch(
+        &__orc_rt_jit_dispatch_ctx, FnTag, ArgBuffer.data(), ArgBuffer.size());
     if (auto ErrMsg = ResultBuffer.getOutOfBandError())
       return make_error<StringError>(ErrMsg);
 


        


More information about the llvm-commits mailing list