Skip to content

Commit 36eb89a

Browse files
committed
[LLVM] Fixes for latest LLVM21
1 parent 789e0b8 commit 36eb89a

File tree

6 files changed

+47
-7
lines changed

6 files changed

+47
-7
lines changed

src/target/llvm/codegen_amdgpu.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,11 @@ runtime::Module BuildAMDGPU(IRModule mod, Target target) {
284284

285285
for (auto& bitcode_path : bitcode_files) {
286286
std::unique_ptr<llvm::Module> mlib = llvm_instance.LoadIR(bitcode_path);
287+
#if TVM_LLVM_VERSION >= 210
288+
mlib->setTargetTriple(llvm::Triple(llvm_target->GetTargetTriple()));
289+
#else
287290
mlib->setTargetTriple(llvm_target->GetTargetTriple());
291+
#endif
288292
mlib->setDataLayout(tm->createDataLayout());
289293

290294
for (llvm::Function& f : mlib->functions()) {

src/target/llvm/codegen_blob.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ std::unique_ptr<llvm::Module> CodeGenBlob(const std::string& data, bool system_l
6969
llvm::LLVMContext* ctx = llvm_target->GetContext();
7070
std::string module_name = c_symbol_prefix + "devc";
7171
auto module = std::make_unique<llvm::Module>(module_name, *ctx);
72+
#if TVM_LLVM_VERSION >= 210
7273
module->setTargetTriple(triple.str());
74+
#else
75+
module->setTargetTriple(triple);
76+
#endif
7377
llvm_target->SetTargetMetadata(module.get());
7478
module->setDataLayout(tm->createDataLayout());
7579
auto* blob_value = llvm::ConstantDataArray::getString(*ctx, data, false);

src/target/llvm/codegen_llvm.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,11 @@ void CodeGenLLVM::SetFastMathFlags(llvm::FastMathFlags fmf) { builder_->setFastM
168168

169169
void CodeGenLLVM::InitTarget() {
170170
llvm::TargetMachine* tm = llvm_target_->GetOrCreateTargetMachine();
171+
#if TVM_LLVM_VERSION >= 210
172+
module_->setTargetTriple(tm->getTargetTriple());
173+
#else
171174
module_->setTargetTriple(tm->getTargetTriple().str());
175+
#endif
172176
module_->setDataLayout(tm->createDataLayout());
173177
#if TVM_LLVM_VERSION >= 200
174178
data_layout_.reset(new llvm::DataLayout(module_.get()->getDataLayout()));
@@ -373,8 +377,11 @@ void CodeGenLLVM::HandleImport(const std::string& code) {
373377
} else {
374378
mlib = llvm_target_->GetInstance().ParseIR(code);
375379
}
376-
380+
#if TVM_LLVM_VERSION >= 210
381+
mlib->setTargetTriple(llvm::Triple(llvm_target_->GetTargetTriple()));
382+
#else
377383
mlib->setTargetTriple(llvm_target_->GetTargetTriple());
384+
#endif
378385
mlib->setDataLayout(llvm_target_->GetOrCreateTargetMachine()->createDataLayout());
379386
// mark all the functions as force inline
380387
for (llvm::Function& f : mlib->functions()) {

src/target/llvm/codegen_nvptx.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,11 @@ class CodeGenNVPTX : public CodeGenLLVM {
189189
} else if (sync == "shared" || sync == "shared.dyn") {
190190
#if TVM_LLVM_VERSION >= 200
191191
llvm::Function* f = llvm::cast<llvm::Function>(llvm::Intrinsic::getOrInsertDeclaration(
192+
#if TVM_LLVM_VERSION >= 210
193+
module_.get(), llvm::Intrinsic::nvvm_barrier_cta_sync_aligned_all, {}));
194+
#else
192195
module_.get(), llvm::Intrinsic::nvvm_barrier0, {}));
196+
#endif
193197
#else
194198
llvm::Function* f =
195199
llvm::Intrinsic::getDeclaration(module_.get(), llvm::Intrinsic::nvvm_barrier0);
@@ -335,7 +339,11 @@ runtime::Module BuildNVPTX(IRModule mod, Target target) {
335339
std::string path = (*flibdevice_path)(compute_ver).cast<std::string>();
336340
if (path.length() != 0) {
337341
std::unique_ptr<llvm::Module> mlib = llvm_instance.LoadIR(path);
342+
#if TVM_LLVM_VERSION >= 210
343+
mlib->setTargetTriple(llvm::Triple(llvm_target->GetTargetTriple()));
344+
#else
338345
mlib->setTargetTriple(llvm_target->GetTargetTriple());
346+
#endif
339347
mlib->setDataLayout(tm->createDataLayout());
340348
cg->AddLinkModule(std::move(mlib));
341349
}

src/target/llvm/llvm_instance.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -981,7 +981,7 @@ std::string LLVMTarget::GetTargetMetadata(const llvm::Module& module) {
981981
return meta.str();
982982
}
983983
}
984-
return "llvm -mtriple " + module.getTargetTriple();
984+
return "llvm -mtriple " + module.getTargetTriple().str();
985985
}
986986

987987
void LLVMTarget::SetTargetMetadata(llvm::Module* module) const {

src/target/llvm/llvm_module.cc

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ void LLVMModuleNode::InitMCJIT() {
429429
// create MCJIT
430430
mcjit_ee_ = builder.create(tm.release());
431431
ICHECK(mcjit_ee_ != nullptr) << "Failed to initialize LLVM MCJIT engine for "
432-
<< module_->getTargetTriple();
432+
<< module_->getTargetTriple().str();
433433

434434
VLOG(2) << "LLVM MCJIT execute " << module_->getModuleIdentifier() << " for triple `"
435435
<< llvm_target->GetTargetTriple() << "`"
@@ -503,21 +503,34 @@ void LLVMModuleNode::InitORCJIT() {
503503
#if TVM_LLVM_VERSION >= 130
504504
// linker
505505
const auto linkerBuilder =
506-
[&](llvm::orc::ExecutionSession& session,
507-
const llvm::Triple& triple) -> std::unique_ptr<llvm::orc::ObjectLayer> {
506+
#if TVM_LLVM_VERSION >= 210
507+
[&](llvm::orc::ExecutionSession& session)
508+
-> llvm::Expected<std::unique_ptr<llvm::orc::ObjectLayer>> {
509+
#else
510+
[&](llvm::orc::ExecutionSession& session, const llvm::Triple& triple)
511+
-> std::unique_ptr<llvm::orc::ObjectLayer> {
512+
#endif
508513
#if _WIN32
509514
auto GetMemMgr = []() { return std::make_unique<llvm::SectionMemoryManager>(); };
510515
auto ObjLinkingLayer =
511516
std::make_unique<llvm::orc::RTDyldObjectLinkingLayer>(session, std::move(GetMemMgr));
512517
#else
513518
auto ObjLinkingLayer = std::make_unique<llvm::orc::ObjectLinkingLayer>(session);
514519
#endif
520+
#if TVM_LLVM_VERSION >= 210
521+
if (tm_builder.getTargetTriple().isOSBinFormatCOFF()) {
522+
#else
515523
if (triple.isOSBinFormatCOFF()) {
524+
#endif
516525
ObjLinkingLayer->setOverrideObjectFlagsWithResponsibilityFlags(true);
517526
ObjLinkingLayer->setAutoClaimResponsibilityForObjectSymbols(true);
518527
}
528+
#if TVM_LLVM_VERSION >= 210
529+
return llvm::Expected<std::unique_ptr<llvm::orc::ObjectLayer>>(std::move(ObjLinkingLayer));
530+
#else
519531
return ObjLinkingLayer;
520-
};
532+
#endif
533+
}; // NOLINT(readability/braces)
521534
#endif
522535

523536
// create LLJIT
@@ -532,7 +545,7 @@ void LLVMModuleNode::InitORCJIT() {
532545
.create());
533546

534547
ICHECK(orcjit_ee_ != nullptr) << "Failed to initialize LLVM ORCJIT engine for "
535-
<< module_->getTargetTriple();
548+
<< module_->getTargetTriple().str();
536549

537550
// store ctors
538551
auto ctors = llvm::orc::getConstructors(*module_);
@@ -638,7 +651,11 @@ static void LLVMReflectionRegister() {
638651
// Generate a LLVM module from an input target string
639652
auto module = std::make_unique<llvm::Module>(module_name, *llvm_target->GetContext());
640653
llvm_target->SetTargetMetadata(module.get());
654+
#if TVM_LLVM_VERSION >= 210
655+
module->setTargetTriple(llvm::Triple(llvm_target->GetTargetTriple()));
656+
#else
641657
module->setTargetTriple(llvm_target->GetTargetTriple());
658+
#endif
642659
module->setDataLayout(llvm_target->GetOrCreateTargetMachine()->createDataLayout());
643660
n->Init(std::move(module), std::move(llvm_instance));
644661
n->SetJITEngine(llvm_target->GetJITEngine());

0 commit comments

Comments
 (0)