File 18204_backported.patch of Package tvm

From 5cf6a84dcbb665b09a3e00947465a5381a3a7cda Mon Sep 17 00:00:00 2001
From: Balint Cristian <cristian.balint@gmail.com>
Date: Mon, 11 Aug 2025 17:56:41 +0300
Subject: [PATCH] [LLVM] Fixes up to the latest LLVM21

---
 src/target/llvm/codegen_amdgpu.cc         |  4 ++++
 src/target/llvm/codegen_blob.cc           |  4 ++++
 src/target/llvm/codegen_llvm.cc           |  8 +++++++
 src/target/llvm/codegen_nvptx.cc          |  8 +++++++
 src/target/llvm/llvm_instance.cc          |  4 ++++
 src/target/llvm/llvm_module.cc            | 27 ++++++++++++++++++++++-
 tests/cpp/target/parsers/aprofile_test.cc |  4 ++--
 7 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/src/target/llvm/codegen_amdgpu.cc b/src/target/llvm/codegen_amdgpu.cc
index ae859170d664..0cf218054320 100644
--- a/src/target/llvm/codegen_amdgpu.cc
+++ b/src/target/llvm/codegen_amdgpu.cc
@@ -284,7 +284,11 @@ runtime::Module BuildAMDGPU(IRModule mod, Target target) {
 
   for (auto& bitcode_path : bitcode_files) {
     std::unique_ptr<llvm::Module> mlib = llvm_instance.LoadIR(bitcode_path);
+#if TVM_LLVM_VERSION >= 210
+    mlib->setTargetTriple(llvm::Triple(llvm_target->GetTargetTriple()));
+#else
     mlib->setTargetTriple(llvm_target->GetTargetTriple());
+#endif
     mlib->setDataLayout(tm->createDataLayout());
 
     for (llvm::Function& f : mlib->functions()) {
diff --git a/src/target/llvm/codegen_blob.cc b/src/target/llvm/codegen_blob.cc
index 8ea964b6d2d9..3d48f57513d0 100644
--- a/src/target/llvm/codegen_blob.cc
+++ b/src/target/llvm/codegen_blob.cc
@@ -69,7 +69,11 @@ std::unique_ptr<llvm::Module> CodeGenBlob(const std::string& data, bool system_l
   llvm::LLVMContext* ctx = llvm_target->GetContext();
   std::string module_name = c_symbol_prefix + "devc";
   auto module = std::make_unique<llvm::Module>(module_name, *ctx);
+#if TVM_LLVM_VERSION >= 210
+  module->setTargetTriple(triple);
+#else
   module->setTargetTriple(triple.str());
+#endif
   llvm_target->SetTargetMetadata(module.get());
   module->setDataLayout(tm->createDataLayout());
   auto* blob_value = llvm::ConstantDataArray::getString(*ctx, data, false);
diff --git a/src/target/llvm/codegen_llvm.cc b/src/target/llvm/codegen_llvm.cc
index 21dd62efa9b7..4fe120e945b9 100644
--- a/src/target/llvm/codegen_llvm.cc
+++ b/src/target/llvm/codegen_llvm.cc
@@ -168,7 +168,11 @@ void CodeGenLLVM::SetFastMathFlags(llvm::FastMathFlags fmf) { builder_->setFastM
 
 void CodeGenLLVM::InitTarget() {
   llvm::TargetMachine* tm = llvm_target_->GetOrCreateTargetMachine();
+#if TVM_LLVM_VERSION >= 210
+  module_->setTargetTriple(tm->getTargetTriple());
+#else
   module_->setTargetTriple(tm->getTargetTriple().str());
+#endif
   module_->setDataLayout(tm->createDataLayout());
 #if TVM_LLVM_VERSION >= 200
   data_layout_.reset(new llvm::DataLayout(module_.get()->getDataLayout()));
@@ -374,7 +378,11 @@ void CodeGenLLVM::HandleImport(const std::string& code) {
     mlib = llvm_target_->GetInstance().ParseIR(code);
   }
 
+#if TVM_LLVM_VERSION >= 210
+  mlib->setTargetTriple(llvm::Triple(llvm_target_->GetTargetTriple()));
+#else
   mlib->setTargetTriple(llvm_target_->GetTargetTriple());
+#endif
   mlib->setDataLayout(llvm_target_->GetOrCreateTargetMachine()->createDataLayout());
   // mark all the functions as force inline
   for (llvm::Function& f : mlib->functions()) {
diff --git a/src/target/llvm/codegen_nvptx.cc b/src/target/llvm/codegen_nvptx.cc
index bcea45cfa70e..a6b70ad39a32 100644
--- a/src/target/llvm/codegen_nvptx.cc
+++ b/src/target/llvm/codegen_nvptx.cc
@@ -189,7 +189,11 @@ class CodeGenNVPTX : public CodeGenLLVM {
     } else if (sync == "shared" || sync == "shared.dyn") {
 #if TVM_LLVM_VERSION >= 200
       llvm::Function* f = llvm::cast<llvm::Function>(llvm::Intrinsic::getOrInsertDeclaration(
+#if TVM_LLVM_VERSION >= 210
+          module_.get(), llvm::Intrinsic::nvvm_barrier_cta_sync_aligned_all, {}));
+#else
           module_.get(), llvm::Intrinsic::nvvm_barrier0, {}));
+#endif
 #else
       llvm::Function* f =
           llvm::Intrinsic::getDeclaration(module_.get(), llvm::Intrinsic::nvvm_barrier0);
@@ -335,7 +339,11 @@ runtime::Module BuildNVPTX(IRModule mod, Target target) {
     std::string path = (*flibdevice_path)(compute_ver).cast<std::string>();
     if (path.length() != 0) {
       std::unique_ptr<llvm::Module> mlib = llvm_instance.LoadIR(path);
+#if TVM_LLVM_VERSION >= 210
+      mlib->setTargetTriple(llvm::Triple(llvm_target->GetTargetTriple()));
+#else
       mlib->setTargetTriple(llvm_target->GetTargetTriple());
+#endif
       mlib->setDataLayout(tm->createDataLayout());
       cg->AddLinkModule(std::move(mlib));
     }
diff --git a/src/target/llvm/llvm_instance.cc b/src/target/llvm/llvm_instance.cc
index ebf9a754b101..e494a2bbf9e9 100644
--- a/src/target/llvm/llvm_instance.cc
+++ b/src/target/llvm/llvm_instance.cc
@@ -981,7 +981,11 @@ std::string LLVMTarget::GetTargetMetadata(const llvm::Module& module) {
       return meta.str();
     }
   }
+#if TVM_LLVM_VERSION >= 210
+  return "llvm -mtriple " + module.getTargetTriple().str();
+#else
   return "llvm -mtriple " + module.getTargetTriple();
+#endif
 }
 
 void LLVMTarget::SetTargetMetadata(llvm::Module* module) const {
diff --git a/src/target/llvm/llvm_module.cc b/src/target/llvm/llvm_module.cc
index 924f520082fd..a9e09652eec0 100644
--- a/src/target/llvm/llvm_module.cc
+++ b/src/target/llvm/llvm_module.cc
@@ -429,7 +429,11 @@ void LLVMModuleNode::InitMCJIT() {
   // create MCJIT
   mcjit_ee_ = builder.create(tm.release());
   ICHECK(mcjit_ee_ != nullptr) << "Failed to initialize LLVM MCJIT engine for "
+#if TVM_LLVM_VERSION >= 210
+                               << module_->getTargetTriple().str();
+#else
                                << module_->getTargetTriple();
+#endif
 
   VLOG(2) << "LLVM MCJIT execute " << module_->getModuleIdentifier() << " for triple `"
           << llvm_target->GetTargetTriple() << "`"
@@ -503,8 +507,13 @@ void LLVMModuleNode::InitORCJIT() {
 #if TVM_LLVM_VERSION >= 130
   // linker
   const auto linkerBuilder =
+#if TVM_LLVM_VERSION >= 210
+      [&](llvm::orc::ExecutionSession& session)
+      -> llvm::Expected<std::unique_ptr<llvm::orc::ObjectLayer>> {
+#else
       [&](llvm::orc::ExecutionSession& session,
           const llvm::Triple& triple) -> std::unique_ptr<llvm::orc::ObjectLayer> {
+#endif
 #if _WIN32
     auto GetMemMgr = []() { return std::make_unique<llvm::SectionMemoryManager>(); };
     auto ObjLinkingLayer =
@@ -512,12 +521,20 @@ void LLVMModuleNode::InitORCJIT() {
 #else
     auto ObjLinkingLayer = std::make_unique<llvm::orc::ObjectLinkingLayer>(session);
 #endif
+#if TVM_LLVM_VERSION >= 210
+    if (tm_builder.getTargetTriple().isOSBinFormatCOFF()) {
+#else
     if (triple.isOSBinFormatCOFF()) {
+#endif
       ObjLinkingLayer->setOverrideObjectFlagsWithResponsibilityFlags(true);
       ObjLinkingLayer->setAutoClaimResponsibilityForObjectSymbols(true);
     }
+#if TVM_LLVM_VERSION >= 210
+    return llvm::Expected<std::unique_ptr<llvm::orc::ObjectLayer>>(std::move(ObjLinkingLayer));
+#else
     return ObjLinkingLayer;
-  };
+#endif
+  };  // NOLINT(readability/braces)
 #endif
 
   // create LLJIT
@@ -532,7 +549,11 @@ void LLVMModuleNode::InitORCJIT() {
                                   .create());
 
   ICHECK(orcjit_ee_ != nullptr) << "Failed to initialize LLVM ORCJIT engine for "
+#if TVM_LLVM_VERSION >= 210
+                                << module_->getTargetTriple().str();
+#else
                                 << module_->getTargetTriple();
+#endif
 
   // store ctors
   auto ctors = llvm::orc::getConstructors(*module_);
@@ -635,7 +656,11 @@ TVM_FFI_REGISTER_GLOBAL("codegen.LLVMMod
       // Generate a LLVM module from an input target string
       auto module = std::make_unique<llvm::Module>(module_name, *llvm_target->GetContext());
       llvm_target->SetTargetMetadata(module.get());
+#if TVM_LLVM_VERSION >= 210
+      module->setTargetTriple(llvm::Triple(llvm_target->GetTargetTriple()));
+#else
       module->setTargetTriple(llvm_target->GetTargetTriple());
+#endif
       module->setDataLayout(llvm_target->GetOrCreateTargetMachine()->createDataLayout());
       n->Init(std::move(module), std::move(llvm_instance));
       n->SetJITEngine(llvm_target->GetJITEngine());
openSUSE Build Service is sponsored by