Skip to content

[MLIR][LLVMIR] Import unregistered intrinsics via llvm.intrinsic_call #128626

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Feb 26, 2025

Conversation

bcardosolopes
Copy link
Member

@bcardosolopes bcardosolopes commented Feb 25, 2025

Currently, the llvm importer can only cover intrinsics that have a first class representation in an MLIR dialect (arm-neon, etc). This PR introduces a fallback mechanism that allow "unregistered" intrinsics to be imported by using the generic llvm.intrinsic_call operation. This is useful in several ways:

  1. Allows round-trip the LLVM dialect output lowered from other dialects (example: ClangIR)
  2. Enables MLIR-linking tools to operate on imported LLVM IR without requiring to add new operations to dozen of different targets (cc @xlauko @smeenai).

If multiple dialects implement this interface hook, the last one to register is the one converting all unregistered intrinsics.

Currently, the llvm importer can only cover intrinsics that have a first class
representation in an MLIR dialect (arm-neon, etc). This PR introduces a
fallback mechanism that allow "unregistered" intrinsics to be imported by using
the generic `llvm.intrinsic_call` operation. This is useful in several ways:

1. Allows round-trip the LLVM dialect output lowered from other dialects
(example: ClangIR)
2. Enables MLIR-linking tools to operate on imported LLVM IR without requiring
adding new operations to dozen of different targets (cc @xlauko @smeenai).

Implemented:
- Cover intrinsics across all current supported LLVM targets and generic ones.
- Use existing LLVM tablegen files to populate intrinsic matching.
- Matches with lower priority against dialect supported intrinsic conversion.

Open question: how to add the proper include path for tablegen to find
Intrinsics.td?
@llvmbot llvmbot added mlir:core MLIR Core Infrastructure mlir:llvm mlir labels Feb 25, 2025
@bcardosolopes bcardosolopes removed mlir:core MLIR Core Infrastructure mlir labels Feb 25, 2025
@llvmbot
Copy link
Member

llvmbot commented Feb 25, 2025

@llvm/pr-subscribers-mlir-core
@llvm/pr-subscribers-mlir-llvm

@llvm/pr-subscribers-mlir

Author: Bruno Cardoso Lopes (bcardosolopes)

Changes

Currently, the llvm importer can only cover intrinsics that have a first class representation in an MLIR dialect (arm-neon, etc). This PR introduces a fallback mechanism that allow "unregistered" intrinsics to be imported by using the generic llvm.intrinsic_call operation. This is useful in several ways:

  1. Allows round-trip the LLVM dialect output lowered from other dialects (example: ClangIR)
  2. Enables MLIR-linking tools to operate on imported LLVM IR without requiring adding new operations to dozen of different targets (cc @xlauko @smeenai).

Implemented:

  • Cover intrinsics across all current supported LLVM targets and generic ones.
  • Use existing LLVM tablegen files to populate intrinsic matching.
  • Matches with lower priority against dialect supported intrinsic conversion.

Open question: how to add the proper include path for tablegen to find Intrinsics.td?


Patch is 20.23 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/128626.diff

7 Files Affected:

  • (modified) mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt (+26)
  • (modified) mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h (+23-1)
  • (modified) mlir/lib/Dialect/LLVMIR/CMakeLists.txt (+3)
  • (modified) mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp (+125)
  • (modified) mlir/test/Target/LLVMIR/Import/import-failure.ll (-12)
  • (added) mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll (+68)
  • (modified) mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp (+57)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt b/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt
index 759de745440c2..cefd1bbe4b027 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt
+++ b/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt
@@ -81,3 +81,29 @@ mlir_tablegen(VCIXConversions.inc -gen-llvmir-conversions)
 mlir_tablegen(VCIXOpsAttributes.h.inc -gen-attrdef-decls -attrdefs-dialect=vcix)
 mlir_tablegen(VCIXOpsAttributes.cpp.inc -gen-attrdef-defs -attrdefs-dialect=vcix)
 add_public_tablegen_target(MLIRVCIXConversionsIncGen)
+
+# FIXME: Should emit extra file with intrinsics_gen if MLIR is enabled? Or maybe find
+# a better way to get the path for Intrinsics.td?
+set(LLVM_TARGET_DEFINITIONS ../../../../../llvm/include/llvm/IR/Intrinsics.td)
+
+mlir_tablegen(LLVMUnregisteredLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics)
+mlir_tablegen(LLVMUnregisteredAArch64LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=aarch64)
+mlir_tablegen(LLVMUnregisteredAMDGPULLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=amdgcn)
+mlir_tablegen(LLVMUnregisteredARMLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=arm)
+mlir_tablegen(LLVMUnregisteredBPFLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=bpf)
+mlir_tablegen(LLVMUnregisteredDirectXLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=dx)
+mlir_tablegen(LLVMUnregisteredHexagonLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=hexagon)
+mlir_tablegen(LLVMUnregisteredLoongArchLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=loongarch)
+mlir_tablegen(LLVMUnregisteredMipsLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=mips)
+mlir_tablegen(LLVMUnregisteredNVPTXLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=nvvm)
+mlir_tablegen(LLVMUnregisteredPowerPCLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=ppc)
+mlir_tablegen(LLVMUnregisteredR600LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=r600)
+mlir_tablegen(LLVMUnregisteredRISCVLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=riscv)
+mlir_tablegen(LLVMUnregisteredSPIRVLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=spv)
+mlir_tablegen(LLVMUnregisteredS390LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=s390)
+mlir_tablegen(LLVMUnregisteredWebAssemblyLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=wasm)
+mlir_tablegen(LLVMUnregisteredX86LLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=x86)
+mlir_tablegen(LLVMUnregisteredXCoreLLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=xcore)
+mlir_tablegen(LLVMUnregisteredVELLVMIRIntrinsics.inc -gen-unregistered-llvmir-intrinsics -intrinsic-prefix=ve)
+
+add_public_tablegen_target(MLIRLLVMIntrinsicUnregisteredIncGen)
\ No newline at end of file
diff --git a/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h b/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h
index cc5a77ed35d2b..d122021e8586d 100644
--- a/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h
+++ b/mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h
@@ -74,6 +74,10 @@ class LLVMImportDialectInterface
   /// returns the list of supported intrinsic identifiers.
   virtual ArrayRef<unsigned> getSupportedIntrinsics() const { return {}; }
 
+  /// Returns the list of LLVM IR intrinsic identifiers that are unsupported
+  /// but dialects might have a generic way to represent them.
+  virtual ArrayRef<unsigned> getUnregisteredIntrinsics() const { return {}; }
+
   /// Hook for derived dialect interfaces to publish the supported instructions.
   /// As every LLVM IR instruction has a unique integer identifier, the function
   /// returns the list of supported instruction identifiers. These identifiers
@@ -139,6 +143,9 @@ class LLVMImportInterface
       // Add a mapping for all supported intrinsic identifiers.
       for (unsigned id : iface.getSupportedIntrinsics())
         intrinsicToDialect[id] = iface.getDialect();
+      // Add a mapping for all unregistered intrinsic identifiers.
+      for (unsigned id : iface.getUnregisteredIntrinsics())
+        unregisteredIntrinscToDialect[id] = iface.getDialect();
       // Add a mapping for all supported instruction identifiers.
       for (unsigned id : iface.getSupportedInstructions())
         instructionToDialect[id] = &iface;
@@ -155,7 +162,19 @@ class LLVMImportInterface
   LogicalResult convertIntrinsic(OpBuilder &builder, llvm::CallInst *inst,
                                  LLVM::ModuleImport &moduleImport) const {
     // Lookup the dialect interface for the given intrinsic.
-    Dialect *dialect = intrinsicToDialect.lookup(inst->getIntrinsicID());
+    llvm::Intrinsic::ID intrinId = inst->getIntrinsicID();
+    if (intrinId == llvm::Intrinsic::not_intrinsic)
+      return failure();
+
+    // First lookup intrinsic across different dialects for known
+    // supported converstions, examples include arm-neon, nvm-sve, etc
+    Dialect *dialect = intrinsicToDialect.lookup(intrinId);
+
+    // No specialized (supported) intrinsics, attempt to generate a generic
+    // version via llvm.call_intrinsic (if available).
+    if (!dialect)
+      dialect = unregisteredIntrinscToDialect.lookup(intrinId);
+
     if (!dialect)
       return failure();
 
@@ -227,6 +246,9 @@ class LLVMImportInterface
   DenseMap<unsigned, Dialect *> intrinsicToDialect;
   DenseMap<unsigned, const LLVMImportDialectInterface *> instructionToDialect;
   DenseMap<unsigned, SmallVector<Dialect *, 1>> metadataToDialect;
+
+  /// Unregistered generic and target independent intrinsics.
+  DenseMap<unsigned, Dialect *> unregisteredIntrinscToDialect;
 };
 
 } // namespace mlir
diff --git a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
index c9a3b97294562..030aed9cdb06a 100644
--- a/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
+++ b/mlir/lib/Dialect/LLVMIR/CMakeLists.txt
@@ -17,6 +17,9 @@ add_mlir_dialect_library(MLIRLLVMDialect
   MLIRLLVMTypesIncGen
   MLIRLLVMIntrinsicOpsIncGen
   MLIRLLVMInterfacesIncGen
+  MLIRLLVMConversionsIncGen
+  MLIRLLVMIntrinsicConversionsIncGen
+  MLIRLLVMIntrinsicUnregisteredIncGen
   MLIROpenMPOpsIncGen
   intrinsics_gen
 
diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp
index 4fd043c7c93e6..88ea2ff58434d 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp
@@ -24,6 +24,24 @@
 #include "llvm/IR/InlineAsm.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/IntrinsicInst.h"
+#include "llvm/IR/IntrinsicsAArch64.h"
+#include "llvm/IR/IntrinsicsAMDGPU.h"
+#include "llvm/IR/IntrinsicsARM.h"
+#include "llvm/IR/IntrinsicsBPF.h"
+#include "llvm/IR/IntrinsicsDirectX.h"
+#include "llvm/IR/IntrinsicsHexagon.h"
+#include "llvm/IR/IntrinsicsLoongArch.h"
+#include "llvm/IR/IntrinsicsMips.h"
+#include "llvm/IR/IntrinsicsNVPTX.h"
+#include "llvm/IR/IntrinsicsPowerPC.h"
+#include "llvm/IR/IntrinsicsR600.h"
+#include "llvm/IR/IntrinsicsRISCV.h"
+#include "llvm/IR/IntrinsicsS390.h"
+#include "llvm/IR/IntrinsicsSPIRV.h"
+#include "llvm/IR/IntrinsicsVE.h"
+#include "llvm/IR/IntrinsicsWebAssembly.h"
+#include "llvm/IR/IntrinsicsX86.h"
+#include "llvm/IR/IntrinsicsXCore.h"
 #include "llvm/Support/ModRef.h"
 
 using namespace mlir;
@@ -56,6 +74,105 @@ static ArrayRef<unsigned> getSupportedIntrinsicsImpl() {
   return convertibleIntrinsics;
 }
 
+/// Returns true if the LLVM IR intrinsic is convertible to llvm.intrinsic_call
+/// Returns false otherwise.
+static bool isConvertibleUnregisteredIntrinsic(llvm::Intrinsic::ID id) {
+  static const DenseSet<unsigned> convertibleTargetIntrinsics = {
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAArch64LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAMDGPULLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredARMLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredBPFLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredDirectXLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredHexagonLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLoongArchLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredMipsLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredNVPTXLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredPowerPCLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredR600LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredRISCVLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredS390LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredSPIRVLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredVELLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredWebAssemblyLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredX86LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredXCoreLLVMIRIntrinsics.inc"
+  };
+  return convertibleTargetIntrinsics.contains(id);
+}
+
+/// Returns the list of LLVM IR intrinsic identifiers that are not registered
+/// by any dialect but can be convertible to llvm.intrinsic_call operation.
+static ArrayRef<unsigned> getUnregisteredIntrinsicsImpl() {
+  static const SmallVector<unsigned> convertibleTargetIntrinsics = {
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAArch64LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredAMDGPULLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredARMLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredBPFLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredDirectXLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredHexagonLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredLoongArchLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredMipsLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredNVPTXLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredPowerPCLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredR600LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredRISCVLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredS390LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredSPIRVLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredVELLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredWebAssemblyLLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredX86LLVMIRIntrinsics.inc"
+#include "mlir/Dialect/LLVMIR/LLVMUnregisteredXCoreLLVMIRIntrinsics.inc"
+  };
+  return convertibleTargetIntrinsics;
+}
+
+/// Converts the LLVM intrinsic to a generic LLVM intrinsic call using
+/// llvm.intrinsic_call. Returns failure otherwise.
+static LogicalResult
+convertUnregisteredIntrinsicImpl(OpBuilder &odsBuilder, llvm::CallInst *inst,
+                                 LLVM::ModuleImport &moduleImport) {
+  llvm::Intrinsic::ID intrinsicID = inst->getIntrinsicID();
+  StringRef intrinName = inst->getCalledFunction()->getName();
+
+  // Sanity check the intrinsic ID.
+  assert(isConvertibleUnregisteredIntrinsic(intrinsicID));
+  SmallVector<llvm::Value *> args(inst->args());
+  ArrayRef<llvm::Value *> llvmOperands(args);
+
+  SmallVector<llvm::OperandBundleUse> llvmOpBundles;
+  llvmOpBundles.reserve(inst->getNumOperandBundles());
+  for (unsigned i = 0; i < inst->getNumOperandBundles(); ++i)
+    llvmOpBundles.push_back(inst->getOperandBundleAt(i));
+
+  SmallVector<Value> mlirOperands;
+  SmallVector<NamedAttribute> mlirAttrs;
+  if (failed(moduleImport.convertIntrinsicArguments(
+          llvmOperands, llvmOpBundles, false, {}, {}, mlirOperands, mlirAttrs)))
+    return failure();
+
+  mlir::Type results = moduleImport.convertType(inst->getType());
+  auto op = odsBuilder.create<::mlir::LLVM::CallIntrinsicOp>(
+      moduleImport.translateLoc(inst->getDebugLoc()), results,
+      StringAttr::get(odsBuilder.getContext(), intrinName),
+      ValueRange{mlirOperands}, FastmathFlagsAttr{});
+
+  moduleImport.setFastmathFlagsAttr(inst, op);
+
+  // Update importer tracking of results.
+  unsigned numRes = op.getNumResults();
+  if (numRes == 1)
+    moduleImport.mapValue(inst) = op.getResult(0);
+  else if (numRes == 0)
+    moduleImport.mapNoResultOp(inst);
+  else
+    return op.emitError(
+        "expected at most one result from target intrinsic call");
+
+  return success();
+}
+
 /// Converts the LLVM intrinsic to an MLIR LLVM dialect operation if a
 /// conversion exits. Returns failure otherwise.
 static LogicalResult convertIntrinsicImpl(OpBuilder &odsBuilder,
@@ -75,6 +192,8 @@ static LogicalResult convertIntrinsicImpl(OpBuilder &odsBuilder,
       llvmOpBundles.push_back(inst->getOperandBundleAt(i));
 
 #include "mlir/Dialect/LLVMIR/LLVMIntrinsicFromLLVMIRConversions.inc"
+  } else if (isConvertibleUnregisteredIntrinsic(intrinsicID)) {
+    return convertUnregisteredIntrinsicImpl(odsBuilder, inst, moduleImport);
   }
 
   return failure();
@@ -422,6 +541,12 @@ class LLVMDialectLLVMIRImportInterface : public LLVMImportDialectInterface {
     return getSupportedIntrinsicsImpl();
   }
 
+  /// Returns the list of LLVM IR intrinsic identifiers that are unsupported
+  /// by existing dialects by are convertible to generic llvm.call_intrinsic.
+  ArrayRef<unsigned> getUnregisteredIntrinsics() const final {
+    return getUnregisteredIntrinsicsImpl();
+  }
+
   /// Returns the list of LLVM IR metadata kinds that are convertible to MLIR
   /// LLVM dialect attributes.
   ArrayRef<unsigned>
diff --git a/mlir/test/Target/LLVMIR/Import/import-failure.ll b/mlir/test/Target/LLVMIR/Import/import-failure.ll
index d929a59284762..fc4ccddb756d5 100644
--- a/mlir/test/Target/LLVMIR/Import/import-failure.ll
+++ b/mlir/test/Target/LLVMIR/Import/import-failure.ll
@@ -38,18 +38,6 @@ bb1:
 
 ; // -----
 
-declare void @llvm.gcroot(ptr %arg1, ptr %arg2)
-
-; CHECK:      <unknown>
-; CHECK-SAME: error: unhandled intrinsic: call void @llvm.gcroot(ptr %arg1, ptr null)
-define void @unhandled_intrinsic() gc "example" {
-  %arg1 = alloca ptr
-  call void @llvm.gcroot(ptr %arg1, ptr null)
-  ret void
-}
-
-; // -----
-
 ; Check that debug intrinsics with an unsupported argument are dropped.
 
 declare void @llvm.dbg.value(metadata, metadata, metadata)
diff --git a/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll b/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll
new file mode 100644
index 0000000000000..0f30ce438dbaa
--- /dev/null
+++ b/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll
@@ -0,0 +1,68 @@
+; RUN: mlir-translate -import-llvm %s -split-input-file | FileCheck %s
+
+declare i64 @llvm.aarch64.ldxr.p0(ptr)
+
+define dso_local void @t0(ptr %a) {
+  %x = call i64 @llvm.aarch64.ldxr.p0(ptr elementtype(i8) %a)
+  ret void
+}
+
+; CHECK-LABEL: llvm.func @llvm.aarch64.ldxr.p0(!llvm.ptr)
+; CHECK-LABEL: llvm.func @t0
+; CHECK:   llvm.call_intrinsic "llvm.aarch64.ldxr.p0"({{.*}}) : (!llvm.ptr) -> i64
+; CHECK:   llvm.return
+; CHECK: }
+
+; -----
+
+declare <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8>, <8 x i8>)
+
+define dso_local <8 x i8> @t1(<8 x i8> %lhs, <8 x i8> %rhs) {
+  %r = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %lhs, <8 x i8> %rhs)
+  ret <8 x i8> %r
+}
+
+; CHECK: llvm.func @t1(%[[A0:.*]]: vector<8xi8>, %[[A1:.*]]: vector<8xi8>) -> vector<8xi8> {{.*}} {
+; CHECK:   %[[R:.*]] = llvm.call_intrinsic "llvm.aarch64.neon.uabd.v8i8"(%[[A0]], %[[A1]]) : (vector<8xi8>, vector<8xi8>) -> vector<8xi8>
+; CHECK:   llvm.return %[[R]] : vector<8xi8>
+; CHECK: }
+
+; -----
+
+declare void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8>, <8 x i8>, ptr)
+
+define dso_local void @t2(<8 x i8> %lhs, <8 x i8> %rhs, ptr %a) {
+  call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> %lhs, <8 x i8> %rhs, ptr %a)
+  ret void
+}
+
+; CHECK: llvm.func @t2(%[[A0:.*]]: vector<8xi8>, %[[A1:.*]]: vector<8xi8>, %[[A2:.*]]: !llvm.ptr) {{.*}} {
+; CHECK:   llvm.call_intrinsic "llvm.aarch64.neon.st2.v8i8.p0"(%[[A0]], %[[A1]], %[[A2]]) : (vector<8xi8>, vector<8xi8>, !llvm.ptr) -> !llvm.void
+; CHECK:   llvm.return
+; CHECK: }
+
+; -----
+
+declare void @llvm.gcroot(ptr %arg1, ptr %arg2)
+define void @gctest() gc "example" {
+  %arg1 = alloca ptr
+  call void @llvm.gcroot(ptr %arg1, ptr null)
+  ret void
+}
+
+; CHECK-LABEL: @gctest
+; CHECK: llvm.call_intrinsic "llvm.gcroot"({{.*}}, {{.*}}) : (!llvm.ptr, !llvm.ptr) -> !llvm.void
+
+; -----
+
+; Test we get the supported version, not the unregistered one.
+
+declare i32 @llvm.lround.i32.f32(float)
+
+; CHECK-LABEL: llvm.func @lround_test
+define void @lround_test(float %0, double %1) {
+  ; CHECK-NOT: llvm.call_intrinsic "llvm.lround
+  ; CHECK: llvm.intr.lround(%{{.*}}) : (f32) -> i32
+  %3 = call i32 @llvm.lround.i32.f32(float %0)
+  ret void
+}
\ No newline at end of file
diff --git a/mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp b/mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp
index 9e19f479d673a..c78872fa2de39 100644
--- a/mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp
+++ b/mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp
@@ -19,6 +19,7 @@
 #include "llvm/ADT/Sequence.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/Twine.h"
+#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/TableGen/Error.h"
@@ -564,6 +565,46 @@ static bool emitConvertibleIntrinsics(const RecordKeeper &records,
   return false;
 }
 
+static void emitOneUnregisteredIntrinsic(const Record &record, raw_ostream &os,
+                                         StringRef targetName) {
+  StringRef targetPrefix = record.getValueAsString("TargetPrefix");
+
+  // Not interested in target specific intrinsics in the generic namespace.
+  if (targetName.empty() && !targetPrefix.empty())
+    return;
+
+  // Skip unknown targets.
+  if (!targetName.empty() && targetPrefix != targetName)
+    return;
+
+  StringRef defName = record.getName();
+  ArrayRef<SMLoc> defLoc = record.getLoc();
+
+  // Sanity check the input.
+  if (!defName.starts_with("int_"))
+    PrintFatalError(defLoc,
+                    "Intrinsic '" + defName + "' does not start with 'int_'!");
+
+  StringRef enumName = defName.substr(4);
+
+  os << "llvm::Intrinsic::";
+  if (!targetName.empty())
+    os << StringRef(targetName).upper() << "Intrinsics::";
+  os << enumName << ",\n";
+}
+
+// Emit the list of LLVM IR intrinsics enums, both target and generic. Those
+// are used for LLVMImporter's convenience when looking at intrinsics while
+// being up-to-date with new additions to LLVM.
+static bool emitUnregisteredIntrinsics(const RecordKeeper &records,
+                                       raw_ostream &os, StringRef targetName) {
+
+  for (const Record *def : records.getAllDerivedDefinitions("Intrinsic"))
+    emitOneUnregisteredIntrinsic(*def, os, targetName);
+
+  return false;
+}
+
 static mlir::GenRegistration
     genLLVMIRConversions("gen-llvmir-conversions",
                          "Generate LLVM IR conversions", emitBuilders);
@@ -590,3 +631,19 @@ static mlir::GenRegistration genConvertibleLLVMIRIntrinsics(
     "gen-convertible-llvmir-intrinsics",
     "Generate list of convertible LLVM IR intrinsics",
     emitConvertibleIntrinsics);
+
+static llvm::cl::OptionCategory
+    genUnregIntrinsicCat("Options for -gen-unregistered-llvmir-intrinsics");
+static llvm::cl::opt<std::string> unregIntrinsicPrefix(
+    "intrinsic-prefix",
+    cl::desc("Specify target to generate intrinsic information"),
+    cl::value_desc("target prefix"), cl::cat(genUnregIntrinsicCat));
+
+static mlir::GenRegistration genUnregisteredLLVMIRIntrinsics(
+    "gen-unregistered-llvmir-intrinsics",
+    "Generate enum list of target specific or generic intrinsics according to "
+    "enums defined in LLVM by other tablege...
[truncated]

@bcardosolopes bcardosolopes added mlir:core MLIR Core Infrastructure mlir labels Feb 25, 2025
@bcardosolopes bcardosolopes requested a review from xlauko February 25, 2025 05:01
Copy link
Contributor

@gysit gysit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question why not just import all unsupported intrinsics using llvm.intrinsic_call? That would allow us to avoid depending on LLVM's intrinsics tablegen file. Or are there some intrinsics that we do not want to import at all?

@bcardosolopes
Copy link
Member Author

Question why not just import all unsupported intrinsics using llvm.intrinsic_call? That would allow us to avoid depending on LLVM's intrinsics tablegen file. Or are there some intrinsics that we do not want to import at all?

I have been extra cautious without necessity - just simplified by applying your suggested change

Copy link
Contributor

@gysit gysit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, much shorter!

I believe we may also be able to avoid the trick with the "last" interface translating the unregistered intrinsics by just doing it if the dialect lookup fails?

@bcardosolopes
Copy link
Member Author

I believe we may also be able to avoid the trick with the "last" interface translating the unregistered intrinsics by just doing it if the dialect lookup fails?

Also done!

Copy link
Contributor

@gysit gysit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

LGTM modulo some last nits.

@xlauko
Copy link
Contributor

xlauko commented Feb 26, 2025

Besides @gysit nits lgtm. Will try to look later today at some sources that were failing on our side, whether this fixes all intrinsic issues.

@Jezurko
Copy link
Contributor

Jezurko commented Feb 26, 2025

I've checked the fails we've seen with @xlauko in coreutils. Seems to be working fine based on quick testing

bcardosolopes and others added 4 commits February 26, 2025 10:36
Co-authored-by: Tobias Gysi <tobias.gysi@nextsilicon.com>
Co-authored-by: Tobias Gysi <tobias.gysi@nextsilicon.com>
Co-authored-by: Tobias Gysi <tobias.gysi@nextsilicon.com>
@bcardosolopes
Copy link
Member Author

Thanks for the extra checking folks! Applied last round of changes, will land as soon as it passes the tests

@bcardosolopes bcardosolopes merged commit d584d1f into llvm:main Feb 26, 2025
11 checks passed
@llvm-ci
Copy link
Collaborator

llvm-ci commented Feb 26, 2025

LLVM Buildbot has detected a new failure on builder mlir-nvidia running on mlir-nvidia while building mlir at step 6 "build-check-mlir-build-only".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/138/builds/10857

Here is the relevant piece of the build log for the reference
Step 6 (build-check-mlir-build-only) failure: build (failure)
...
33.104 [50/5/5075] Linking CXX shared library lib/libMLIRMlirOptMain.so.21.0git
33.110 [49/5/5076] Creating library symlink lib/libMLIRMlirOptMain.so
33.273 [46/7/5077] Linking CXX executable bin/transform-opt-ch3
33.273 [46/6/5078] Linking CXX executable bin/transform-opt-ch4
33.276 [46/5/5079] Linking CXX executable bin/transform-opt-ch2
36.289 [46/4/5080] Building CXX object tools/mlir/lib/Target/LLVMIR/Dialect/NVVM/CMakeFiles/obj.MLIRLLVMIRToNVVMTranslation.dir/LLVMIRToNVVMTranslation.cpp.o
38.881 [46/3/5081] Building CXX object tools/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/CMakeFiles/obj.MLIRLLVMIRToLLVMTranslation.dir/LLVMIRToLLVMTranslation.cpp.o
40.037 [46/2/5082] Building CXX object tools/mlir/test/lib/Dialect/Test/CMakeFiles/MLIRTestFromLLVMIRTranslation.dir/TestFromLLVMIRTranslation.cpp.o
40.808 [46/1/5083] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
40.893 [45/1/5084] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/clang++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Werror=mismatched-tags -Werror=global-constructors -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete -fuse-ld=lld -Wl,--color-diagnostics   -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/vol/worker/mlir-nvidia/mlir-nvidia/llvm.obj/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/vol/worker/mlir-nvidia/mlir-nvidia/llvm.obj/lib && :
ld.lld: error: undefined symbol: mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)
>>> referenced by ModuleImport.cpp
>>>               tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o:(mlir::LLVMImportInterface::convertIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&) const)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

@llvm-ci
Copy link
Collaborator

llvm-ci commented Feb 26, 2025

LLVM Buildbot has detected a new failure on builder amdgpu-offload-rhel-9-cmake-build-only running on rocm-docker-rhel-9 while building mlir at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/205/builds/1727

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py --jobs=32' (failure)
...
[6675/7670] Linking CXX shared module lib/CheckerDependencyHandlingAnalyzerPlugin.so
[6676/7670] Linking CXX shared module lib/SampleAnalyzerPlugin.so
[6677/7670] Linking CXX shared module lib/CheckerOptionHandlingAnalyzerPlugin.so
[6678/7670] Linking CXX shared library lib/libclangInterpreter.so.21.0git
[6679/7670] Creating library symlink lib/libclangInterpreter.so
[6680/7670] Linking CXX shared library lib/libFortranParser.so.21.0git
[6681/7670] Creating library symlink lib/libFortranParser.so
[6682/7670] Linking CXX executable bin/f18-parse-demo
[6683/7670] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
[6684/7670] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib && :
/usr/bin/ld: tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o: in function `mlir::LLVM::ModuleImport::convertIntrinsic(llvm::CallInst*) [clone .localalias]':
ModuleImport.cpp:(.text._ZN4mlir4LLVM12ModuleImport16convertIntrinsicEPN4llvm8CallInstE+0x14d): undefined reference to `mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)'
collect2: error: ld returned 1 exit status
[6685/7670] Building CXX object tools/mlir/test/lib/Dialect/Test/CMakeFiles/MLIRTestFromLLVMIRTranslation.dir/TestFromLLVMIRTranslation.cpp.o
[6686/7670] Linking CXX shared library lib/libFortranEvaluate.so.21.0git
[6687/7670] Building InstCombineTables.inc...
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 45, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 36, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 58, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
@@@STEP_FAILURE@@@
Step 7 (build cmake config) failure: build cmake config (failure)
...
[6675/7670] Linking CXX shared module lib/CheckerDependencyHandlingAnalyzerPlugin.so
[6676/7670] Linking CXX shared module lib/SampleAnalyzerPlugin.so
[6677/7670] Linking CXX shared module lib/CheckerOptionHandlingAnalyzerPlugin.so
[6678/7670] Linking CXX shared library lib/libclangInterpreter.so.21.0git
[6679/7670] Creating library symlink lib/libclangInterpreter.so
[6680/7670] Linking CXX shared library lib/libFortranParser.so.21.0git
[6681/7670] Creating library symlink lib/libFortranParser.so
[6682/7670] Linking CXX executable bin/f18-parse-demo
[6683/7670] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
[6684/7670] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib && :
/usr/bin/ld: tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o: in function `mlir::LLVM::ModuleImport::convertIntrinsic(llvm::CallInst*) [clone .localalias]':
ModuleImport.cpp:(.text._ZN4mlir4LLVM12ModuleImport16convertIntrinsicEPN4llvm8CallInstE+0x14d): undefined reference to `mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)'
collect2: error: ld returned 1 exit status
[6685/7670] Building CXX object tools/mlir/test/lib/Dialect/Test/CMakeFiles/MLIRTestFromLLVMIRTranslation.dir/TestFromLLVMIRTranslation.cpp.o
[6686/7670] Linking CXX shared library lib/libFortranEvaluate.so.21.0git
[6687/7670] Building InstCombineTables.inc...
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 45, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 36, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 58, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
program finished with exit code 0
elapsedTime=51.243770

@llvm-ci
Copy link
Collaborator

llvm-ci commented Feb 26, 2025

LLVM Buildbot has detected a new failure on builder amdgpu-offload-ubuntu-22-cmake-build-only running on rocm-docker-ubu-22 while building mlir at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/203/builds/2936

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py --jobs=32' (failure)
...
[6660/7670] Linking CXX executable bin/verify-uselistorder
[6661/7670] Linking CXX executable bin/obj2yaml
[6662/7670] Linking CXX executable bin/llvm-readobj
[6663/7670] Generating ../../bin/llvm-readelf
[6664/7670] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
[6665/7670] Linking CXX shared library lib/libLLVMExegesisX86.so.21.0git
[6666/7670] Creating library symlink lib/libLLVMExegesisX86.so
[6667/7670] Building CXX object tools/flang/lib/Support/CMakeFiles/FortranSupport.dir/Version.cpp.o
[6668/7670] Linking CXX shared library lib/libFortranSupport.so.21.0git
[6669/7670] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib && :
/usr/bin/ld: tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o: in function `mlir::LLVM::ModuleImport::convertIntrinsic(llvm::CallInst*) [clone .localalias]':
ModuleImport.cpp:(.text._ZN4mlir4LLVM12ModuleImport16convertIntrinsicEPN4llvm8CallInstE+0x155): undefined reference to `mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)'
collect2: error: ld returned 1 exit status
[6670/7670] Linking CXX shared library lib/libclangStaticAnalyzerCheckers.so.21.0git
[6671/7670] Creating library symlink lib/libFortranSupport.so
[6672/7670] Linking CXX executable bin/llvm-exegesis
[6673/7670] Building InstCombineTables.inc...
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 45, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 36, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 58, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
@@@STEP_FAILURE@@@
Step 7 (build cmake config) failure: build cmake config (failure)
...
[6660/7670] Linking CXX executable bin/verify-uselistorder
[6661/7670] Linking CXX executable bin/obj2yaml
[6662/7670] Linking CXX executable bin/llvm-readobj
[6663/7670] Generating ../../bin/llvm-readelf
[6664/7670] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
[6665/7670] Linking CXX shared library lib/libLLVMExegesisX86.so.21.0git
[6666/7670] Creating library symlink lib/libLLVMExegesisX86.so
[6667/7670] Building CXX object tools/flang/lib/Support/CMakeFiles/FortranSupport.dir/Version.cpp.o
[6668/7670] Linking CXX shared library lib/libFortranSupport.so.21.0git
[6669/7670] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib && :
/usr/bin/ld: tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o: in function `mlir::LLVM::ModuleImport::convertIntrinsic(llvm::CallInst*) [clone .localalias]':
ModuleImport.cpp:(.text._ZN4mlir4LLVM12ModuleImport16convertIntrinsicEPN4llvm8CallInstE+0x155): undefined reference to `mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)'
collect2: error: ld returned 1 exit status
[6670/7670] Linking CXX shared library lib/libclangStaticAnalyzerCheckers.so.21.0git
[6671/7670] Creating library symlink lib/libFortranSupport.so
[6672/7670] Linking CXX executable bin/llvm-exegesis
[6673/7670] Building InstCombineTables.inc...
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 45, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 36, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 58, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
program finished with exit code 0
elapsedTime=58.423136

@llvm-ci
Copy link
Collaborator

llvm-ci commented Feb 26, 2025

LLVM Buildbot has detected a new failure on builder amdgpu-offload-rhel-8-cmake-build-only running on rocm-docker-rhel-8 while building mlir at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/204/builds/1746

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py --jobs=32' (failure)
...
[6686/7670] Creating library symlink lib/libFortranSemantics.so
[6687/7670] Linking CXX executable tools/flang/unittests/Evaluate/logical.test
[6688/7670] Linking CXX executable tools/flang/unittests/Evaluate/integer.test
[6689/7670] Linking CXX executable tools/flang/unittests/Evaluate/real.test
[6690/7670] Linking CXX executable tools/flang/unittests/Evaluate/intrinsics.test
[6691/7670] Linking CXX executable tools/flang/unittests/Evaluate/expression.test
[6692/7670] Linking CXX executable tools/flang/unittests/Evaluate/folding.test
[6693/7670] Building CXX object tools/mlir/test/lib/Dialect/Test/CMakeFiles/MLIRTestFromLLVMIRTranslation.dir/TestFromLLVMIRTranslation.cpp.o
[6694/7670] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
[6695/7670] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -Wno-misleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -lpthread  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib && :
tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o: In function `mlir::LLVM::ModuleImport::convertIntrinsic(llvm::CallInst*) [clone .localalias.13]':
ModuleImport.cpp:(.text._ZN4mlir4LLVM12ModuleImport16convertIntrinsicEPN4llvm8CallInstE+0x232): undefined reference to `mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)'
collect2: error: ld returned 1 exit status
[6696/7670] Building InstCombineTables.inc...
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 45, in step
    yield
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 36, in main
    run_command(["ninja"])
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 58, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
@@@STEP_FAILURE@@@
Step 7 (build cmake config) failure: build cmake config (failure)
...
[6686/7670] Creating library symlink lib/libFortranSemantics.so
[6687/7670] Linking CXX executable tools/flang/unittests/Evaluate/logical.test
[6688/7670] Linking CXX executable tools/flang/unittests/Evaluate/integer.test
[6689/7670] Linking CXX executable tools/flang/unittests/Evaluate/real.test
[6690/7670] Linking CXX executable tools/flang/unittests/Evaluate/intrinsics.test
[6691/7670] Linking CXX executable tools/flang/unittests/Evaluate/expression.test
[6692/7670] Linking CXX executable tools/flang/unittests/Evaluate/folding.test
[6693/7670] Building CXX object tools/mlir/test/lib/Dialect/Test/CMakeFiles/MLIRTestFromLLVMIRTranslation.dir/TestFromLLVMIRTranslation.cpp.o
[6694/7670] Building CXX object tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o
[6695/7670] Linking CXX shared library lib/libMLIRTargetLLVMIRImport.so.21.0git
FAILED: lib/libMLIRTargetLLVMIRImport.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -Wno-misleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libMLIRTargetLLVMIRImport.so.21.0git -o lib/libMLIRTargetLLVMIRImport.so.21.0git tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DataLayoutImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/DebugImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/LoopAnnotationImporter.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/TypeFromLLVM.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib:"  lib/libMLIRDLTIDialect.so.21.0git  lib/libMLIRLLVMDialect.so.21.0git  lib/libMLIRTranslateLib.so.21.0git  lib/libMLIRDataLayoutInterfaces.so.21.0git  lib/libMLIRControlFlowInterfaces.so.21.0git  lib/libMLIRFunctionInterfaces.so.21.0git  lib/libMLIRCallInterfaces.so.21.0git  lib/libMLIRInferTypeOpInterface.so.21.0git  lib/libMLIRMemorySlotInterfaces.so.21.0git  lib/libMLIRSideEffectInterfaces.so.21.0git  lib/libLLVMBitWriter.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libMLIRParser.so.21.0git  lib/libMLIRBytecodeReader.so.21.0git  lib/libMLIRAsmParser.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMSupport.so.21.0git  -lpthread  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib && :
tools/mlir/lib/Target/LLVMIR/CMakeFiles/obj.MLIRTargetLLVMIRImport.dir/ModuleImport.cpp.o: In function `mlir::LLVM::ModuleImport::convertIntrinsic(llvm::CallInst*) [clone .localalias.13]':
ModuleImport.cpp:(.text._ZN4mlir4LLVM12ModuleImport16convertIntrinsicEPN4llvm8CallInstE+0x232): undefined reference to `mlir::LLVMImportInterface::convertUnregisteredIntrinsic(mlir::OpBuilder&, llvm::CallInst*, mlir::LLVM::ModuleImport&)'
collect2: error: ld returned 1 exit status
[6696/7670] Building InstCombineTables.inc...
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 45, in step
    yield
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 36, in main
    run_command(["ninja"])
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 58, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
program finished with exit code 0
elapsedTime=56.971352

bcardosolopes added a commit that referenced this pull request Feb 27, 2025
…sic_call" (#128973)

Reverts #128626

Looks like the static definition broke some bots!

Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Feb 27, 2025
…llvm.intrinsic_call" (#128973)

Reverts llvm/llvm-project#128626

Looks like the static definition broke some bots!

Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
bcardosolopes added a commit to bcardosolopes/llvm-project that referenced this pull request Feb 28, 2025
…sic_call

Original introduced in llvm#128626,
reverted in llvm#128973

Reproduced the issue on a shared lib build locally on Linux, moved content
arround to statisfy both static and shared lib builds.

Currently, the llvm importer can only cover intrinsics that have a first
class representation in an MLIR dialect (arm-neon, etc). This PR
introduces a fallback mechanism that allow "unregistered" intrinsics to
be imported by using the generic `llvm.intrinsic_call` operation. This
is useful in several ways:

1. Allows round-trip the LLVM dialect output lowered from other dialects
(example: ClangIR)
2. Enables MLIR-linking tools to operate on imported LLVM IR without
requiring to add new operations to dozen of different targets (cc
@xlauko @smeenai).

If multiple dialects implement this interface hook, the last one to
register is the one converting all unregistered intrinsics.
bcardosolopes added a commit that referenced this pull request Mar 3, 2025
#129174)

…sic_call

Original introduced in #128626,
reverted in #128973

Reproduced the issue on a shared lib build locally on Linux, moved
content around to satisfy both static and shared lib builds.

### Original commit message

Currently, the llvm importer can only cover intrinsics that have a first
class representation in an MLIR dialect (arm-neon, etc). This PR
introduces a fallback mechanism that allow "unregistered" intrinsics to
be imported by using the generic `llvm.intrinsic_call` operation. This
is useful in several ways:

1. Allows round-trip the LLVM dialect output lowered from other dialects
(example: ClangIR)
2. Enables MLIR-linking tools to operate on imported LLVM IR without
requiring to add new operations to dozen of different targets.

If multiple dialects implement this interface hook, the last one to
register is the one converting all unregistered intrinsics.

---------

Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Mar 3, 2025
…llvm.intrin… (#129174)

…sic_call

Original introduced in llvm/llvm-project#128626,
reverted in llvm/llvm-project#128973

Reproduced the issue on a shared lib build locally on Linux, moved
content around to satisfy both static and shared lib builds.

### Original commit message

Currently, the llvm importer can only cover intrinsics that have a first
class representation in an MLIR dialect (arm-neon, etc). This PR
introduces a fallback mechanism that allow "unregistered" intrinsics to
be imported by using the generic `llvm.intrinsic_call` operation. This
is useful in several ways:

1. Allows round-trip the LLVM dialect output lowered from other dialects
(example: ClangIR)
2. Enables MLIR-linking tools to operate on imported LLVM IR without
requiring to add new operations to dozen of different targets.

If multiple dialects implement this interface hook, the last one to
register is the one converting all unregistered intrinsics.

---------

Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
joaosaffran pushed a commit to joaosaffran/llvm-project that referenced this pull request Mar 3, 2025
…sic_call" (llvm#128973)

Reverts llvm#128626

Looks like the static definition broke some bots!

Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
jph-13 pushed a commit to jph-13/llvm-project that referenced this pull request Mar 21, 2025
llvm#129174)

…sic_call

Original introduced in llvm#128626,
reverted in llvm#128973

Reproduced the issue on a shared lib build locally on Linux, moved
content around to satisfy both static and shared lib builds.

### Original commit message

Currently, the llvm importer can only cover intrinsics that have a first
class representation in an MLIR dialect (arm-neon, etc). This PR
introduces a fallback mechanism that allow "unregistered" intrinsics to
be imported by using the generic `llvm.intrinsic_call` operation. This
is useful in several ways:

1. Allows round-trip the LLVM dialect output lowered from other dialects
(example: ClangIR)
2. Enables MLIR-linking tools to operate on imported LLVM IR without
requiring to add new operations to dozen of different targets.

If multiple dialects implement this interface hook, the last one to
register is the one converting all unregistered intrinsics.

---------

Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
mlir:core MLIR Core Infrastructure mlir:llvm mlir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants