[lld] 1ce314c - [MLIR][GPU][lld] Use LLD bundled in ROCm, removing workaround

Krzysztof Drewniak via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 10 11:37:35 PST 2022


Author: Krzysztof Drewniak
Date: 2022-02-10T19:37:30Z
New Revision: 1ce314ce6b5e4f40bb266d7a2cb7525257d59b84

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

LOG: [MLIR][GPU][lld] Use LLD bundled in ROCm, removing workaround

Having clarified that executing the SerializeToHsaco pass can
depend on a ROCm installation, switch from calling lld as a library to
using the copy of lld guaranteed to be included in a ROCm install.

This removes the workaround introduced in D119277

Reviewed By: whchung

Differential Revision: https://reviews.llvm.org/D119463

Added: 
    

Modified: 
    lld/Common/CommonLinkerContext.cpp
    lld/include/lld/Common/Driver.h
    mlir/lib/Dialect/GPU/CMakeLists.txt
    mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp

Removed: 
    


################################################################################
diff  --git a/lld/Common/CommonLinkerContext.cpp b/lld/Common/CommonLinkerContext.cpp
index 90f0f942a38c4..50ccbb37c7966 100644
--- a/lld/Common/CommonLinkerContext.cpp
+++ b/lld/Common/CommonLinkerContext.cpp
@@ -7,7 +7,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "lld/Common/CommonLinkerContext.h"
-#include "lld/Common/Driver.h"
 #include "lld/Common/ErrorHandler.h"
 #include "lld/Common/Memory.h"
 
@@ -44,11 +43,3 @@ void CommonLinkerContext::destroy() {
     return;
   delete lctx;
 }
-
-// Temporary API that forces global state cleanup between explicit calls to
-// drivers. See discussion in https://reviews.llvm.org/D119049.
-void lld::cleanup() {
-  // Delete the global context and clear the global context pointer, so that it
-  // cannot be accessed anymore.
-  CommonLinkerContext::destroy();
-}

diff  --git a/lld/include/lld/Common/Driver.h b/lld/include/lld/Common/Driver.h
index 4420918e22ada..f3a80a86e9890 100644
--- a/lld/include/lld/Common/Driver.h
+++ b/lld/include/lld/Common/Driver.h
@@ -52,11 +52,6 @@ namespace wasm {
 bool link(llvm::ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
           llvm::raw_ostream &stderrOS, bool exitEarly, bool disableOutput);
 }
-
-// Temporary API that forces global state cleanup between explicit calls to
-// drivers above. DO NOT USE - this will be replaced by safeLldMain(). See
-// discussion in https://reviews.llvm.org/D119049.
-void cleanup();
 } // namespace lld
 
 #endif

diff  --git a/mlir/lib/Dialect/GPU/CMakeLists.txt b/mlir/lib/Dialect/GPU/CMakeLists.txt
index 69db5ca0e1b0b..1b2f884126f3e 100644
--- a/mlir/lib/Dialect/GPU/CMakeLists.txt
+++ b/mlir/lib/Dialect/GPU/CMakeLists.txt
@@ -126,11 +126,6 @@ if(MLIR_ENABLE_ROCM_RUNNER)
       "Building mlir with ROCm support requires the AMDGPU backend")
   endif()
 
-  # Ensure lld is enabled.
-  if (NOT "lld" IN_LIST LLVM_ENABLE_PROJECTS)
-    message(SEND_ERROR "lld is not enabled. Please revise LLVM_ENABLE_PROJECTS")
-  endif()
-
   set(DEFAULT_ROCM_PATH "/opt/rocm" CACHE PATH "Fallback path to search for ROCm installs")
   target_compile_definitions(obj.MLIRGPUTransforms
     PRIVATE
@@ -138,21 +133,9 @@ if(MLIR_ENABLE_ROCM_RUNNER)
     MLIR_GPU_TO_HSACO_PASS_ENABLE=1
   )
 
-  target_include_directories(obj.MLIRGPUTransforms
-    PRIVATE
-    ${MLIR_SOURCE_DIR}/../lld/include
-  )
-
   target_link_libraries(MLIRGPUOps
     PRIVATE
-    lldELF
     MLIRExecutionEngine
     MLIRROCDLToLLVMIRTranslation
   )
-
-  # Link lldELF also to libmlir.so. Create an alias that starts with LLVM
-  # because LINK_COMPONENTS elements are implicitly prefixed with LLVM.
-  add_library(LLVMAliasTolldELF ALIAS lldELF)
-  set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS AliasTolldELF)
-
 endif()

diff  --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
index d32f8ae3fbbee..8bef525ec887a 100644
--- a/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
+++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
@@ -52,8 +52,6 @@
 
 #include "llvm/Transforms/IPO/Internalize.h"
 
-#include "lld/Common/Driver.h"
-
 #include <mutex>
 
 using namespace mlir;
@@ -435,20 +433,15 @@ SerializeToHsacoPass::createHsaco(const SmallVectorImpl<char> &isaBinary) {
   }
   llvm::FileRemover cleanupHsaco(tempHsacoFilename);
 
-  {
-    static std::mutex mutex;
-    const std::lock_guard<std::mutex> lock(mutex);
-    // Invoke lld. Expect a true return value from lld.
-    bool r = lld::elf::link({"ld.lld", "-shared", tempIsaBinaryFilename.c_str(),
-                             "-o", tempHsacoFilename.c_str()},
-                            llvm::outs(), llvm::errs(), /*exitEarly=*/false,
-                            /*disableOutput=*/false);
-    // Allow for calling the driver again in the same process.
-    lld::cleanup();
-    if (!r) {
-      emitError(loc, "lld invocation error");
-      return {};
-    }
+  std::string theRocmPath = getRocmPath();
+  llvm::SmallString<32> lldPath(std::move(theRocmPath));
+  llvm::sys::path::append(lldPath, "llvm", "bin", "ld.lld");
+  int lldResult = llvm::sys::ExecuteAndWait(
+      lldPath,
+      {"ld.lld", "-shared", tempIsaBinaryFilename, "-o", tempHsacoFilename});
+  if (lldResult != 0) {
+    emitError(loc, "lld invocation error");
+    return {};
   }
 
   // Load the HSA code object.


        


More information about the llvm-commits mailing list