From 5cf6a84dcbb665b09a3e00947465a5381a3a7cda Mon Sep 17 00:00:00 2001 From: Balint Cristian 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 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 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(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::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(); if (path.length() != 0) { std::unique_ptr 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> { +#else [&](llvm::orc::ExecutionSession& session, const llvm::Triple& triple) -> std::unique_ptr { +#endif #if _WIN32 auto GetMemMgr = []() { return std::make_unique(); }; auto ObjLinkingLayer = @@ -512,12 +521,20 @@ void LLVMModuleNode::InitORCJIT() { #else auto ObjLinkingLayer = std::make_unique(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::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(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());