Skip to content

Commit 71caa19

Browse files
[LLVM] Fix for llvm CodeGenOpt API change (#15921)
This patch fixes the errors caused due to recent API change from LLVM for CodeGenOpt made in [this PR](llvm/llvm-project#66295)
1 parent 2afb854 commit 71caa19

7 files changed

+105
-7
lines changed

src/target/llvm/codegen_amdgpu.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,12 @@ runtime::Module BuildAMDGPU(IRModule mod, Target target) {
302302
#elif TVM_LLVM_VERSION <= 90
303303
ICHECK(tm->addPassesToEmitFile(pass, destObj, nullptr, llvm::TargetMachine::CGFT_ObjectFile) == 0)
304304
<< "Cannot emit target CGFT_ObjectFile";
305-
#else
305+
#elif TVM_LLVM_VERSION <= 170
306306
ICHECK(tm->addPassesToEmitFile(pass, destObj, nullptr, llvm::CGFT_ObjectFile) == 0)
307307
<< "Cannot emit target CGFT_ObjectFile";
308+
#else
309+
ICHECK(tm->addPassesToEmitFile(pass, destObj, nullptr, llvm::CodeGenFileType::ObjectFile) == 0)
310+
<< "Cannot emit target CodeGenFileType::ObjectFile";
308311
#endif
309312
pass.run(*mObj);
310313
std::string obj(dataObj.begin(), dataObj.end());
@@ -317,9 +320,13 @@ runtime::Module BuildAMDGPU(IRModule mod, Target target) {
317320
ICHECK(tm->addPassesToEmitFile(passAsm, destAsm, nullptr,
318321
llvm::TargetMachine::CGFT_AssemblyFile) == 0)
319322
<< "Cannot emit target CGFT_AssemblyFile";
320-
#else
323+
#elif TVM_LLVM_VERSION <= 170
321324
ICHECK(tm->addPassesToEmitFile(passAsm, destAsm, nullptr, llvm::CGFT_AssemblyFile) == 0)
322325
<< "Cannot emit target CGFT_AssemblyFile";
326+
#else
327+
ICHECK(tm->addPassesToEmitFile(passAsm, destAsm, nullptr, llvm::CodeGenFileType::AssemblyFile) ==
328+
0)
329+
<< "Cannot emit target CGFT_AssemblyFile";
323330
#endif
324331
passAsm.run(*mAsm);
325332
std::string assembly(dataAsm.begin(), dataAsm.end());

src/target/llvm/codegen_hexagon.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,8 +588,11 @@ runtime::Module BuildHexagon(IRModule mod, Target target) {
588588
#if TVM_LLVM_VERSION <= 90
589589
auto ft = cgft == Asm ? llvm::TargetMachine::CodeGenFileType::CGFT_AssemblyFile
590590
: llvm::TargetMachine::CodeGenFileType::CGFT_ObjectFile;
591-
#else
591+
#elif TVM_LLVM_VERSION <= 170
592592
auto ft = cgft == Asm ? llvm::CGFT_AssemblyFile : llvm::CGFT_ObjectFile;
593+
#else
594+
auto ft =
595+
cgft == Asm ? llvm::CodeGenFileType::AssemblyFile : llvm::CodeGenFileType::ObjectFile;
593596
#endif
594597

595598
llvm::SmallString<16384> ss; // Will grow on demand.

src/target/llvm/codegen_llvm.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ void CodeGenLLVM::Optimize() {
429429

430430
// Construct the default pass pipeline depending on the opt level.
431431
std::string pipeline;
432+
#if TVM_LLVM_VERSION <= 170
432433
switch (llvm_target_->GetOptLevel()) {
433434
case llvm::CodeGenOpt::Level::None:
434435
pipeline = "default<O0>";
@@ -444,6 +445,23 @@ void CodeGenLLVM::Optimize() {
444445
pipeline = "default<O3>";
445446
break;
446447
}
448+
#else
449+
switch (llvm_target_->GetOptLevel()) {
450+
case llvm::CodeGenOptLevel::None:
451+
pipeline = "default<O0>";
452+
break;
453+
case llvm::CodeGenOptLevel::Less:
454+
pipeline = "default<O1>";
455+
break;
456+
case llvm::CodeGenOptLevel::Default:
457+
pipeline = "default<O2>";
458+
break;
459+
default:
460+
// CodeGenOptLevel::Aggressive
461+
pipeline = "default<O3>";
462+
break;
463+
}
464+
#endif
447465

448466
llvm::StandardInstrumentations si(*llvm_target_->GetContext(), debug_logging, verify_each);
449467
#if LLVM_VERSION_MAJOR >= 17

src/target/llvm/codegen_nvptx.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,12 @@ runtime::Module BuildNVPTX(IRModule mod, Target target) {
345345
ICHECK(tm->addPassesToEmitFile(pass, dest_ptx, nullptr, llvm::TargetMachine::CGFT_AssemblyFile) ==
346346
0)
347347
<< "Cannot emit target CGFT_ObjectFile";
348-
#else
348+
#elif TVM_LLVM_VERSION <= 170
349349
ICHECK(tm->addPassesToEmitFile(pass, dest_ptx, nullptr, llvm::CGFT_AssemblyFile) == 0)
350350
<< "Cannot emit target CGFT_ObjectFile";
351+
#else
352+
ICHECK(tm->addPassesToEmitFile(pass, dest_ptx, nullptr, llvm::CodeGenFileType::AssemblyFile) == 0)
353+
<< "Cannot emit target CodeGenFileType::ObjectFile";
351354
#endif
352355
pass.run(*module);
353356
std::string ptx(data_ptx.begin(), data_ptx.end());

src/target/llvm/llvm_instance.cc

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ namespace codegen {
9494
namespace {
9595
namespace defaults {
9696
static const char* cpu = "generic";
97+
#if TVM_LLVM_VERSION <= 170
9798
static const llvm::CodeGenOpt::Level opt_level = llvm::CodeGenOpt::Aggressive;
99+
#else
100+
static const llvm::CodeGenOptLevel opt_level = llvm::CodeGenOptLevel::Aggressive;
101+
#endif
98102
} // namespace defaults
99103
} // namespace
100104

@@ -258,7 +262,7 @@ LLVMTargetInfo::LLVMTargetInfo(LLVMInstance& instance, const Target& target) {
258262
}
259263

260264
auto maybe_level = target->GetAttr<Integer>("opt-level");
261-
265+
#if TVM_LLVM_VERSION <= 170
262266
if (maybe_level.defined()) {
263267
int level = maybe_level.value()->value;
264268
if (level <= 0) {
@@ -274,6 +278,23 @@ LLVMTargetInfo::LLVMTargetInfo(LLVMInstance& instance, const Target& target) {
274278
} else {
275279
opt_level_ = defaults::opt_level;
276280
}
281+
#else
282+
if (maybe_level.defined()) {
283+
int level = maybe_level.value()->value;
284+
if (level <= 0) {
285+
opt_level_ = llvm::CodeGenOptLevel::None;
286+
} else if (level == 1) {
287+
opt_level_ = llvm::CodeGenOptLevel::Less;
288+
} else if (level == 2) {
289+
opt_level_ = llvm::CodeGenOptLevel::Default;
290+
} else {
291+
// level >= 3
292+
opt_level_ = llvm::CodeGenOptLevel::Aggressive;
293+
}
294+
} else {
295+
opt_level_ = defaults::opt_level;
296+
}
297+
#endif
277298

278299
target_options_.UseInitArray = true;
279300

@@ -338,7 +359,11 @@ static llvm::TargetMachine* CreateLLVMTargetMachine(
338359
const llvm::Target* llvm_instance, const std::string& triple, const std::string& cpu,
339360
const std::string& features, const llvm::TargetOptions& target_options,
340361
const llvm::Reloc::Model& reloc_model, const llvm::CodeModel::Model& code_model,
362+
#if TVM_LLVM_VERSION <= 170
341363
const llvm::CodeGenOpt::Level& opt_level) {
364+
#else
365+
const llvm::CodeGenOptLevel& opt_level) {
366+
#endif
342367
llvm::TargetMachine* tm = llvm_instance->createTargetMachine(
343368
triple, cpu, features, target_options, reloc_model, code_model, opt_level);
344369
ICHECK(tm != nullptr);
@@ -356,7 +381,11 @@ static const llvm::MCSubtargetInfo* GetLLVMSubtargetInfo(const std::string& trip
356381
llvm::TargetOptions target_options;
357382
auto tm = CreateLLVMTargetMachine(llvm_instance, triple, cpu_name, feats, target_options,
358383
llvm::Reloc::Static, llvm::CodeModel::Small,
384+
#if TVM_LLVM_VERSION <= 170
359385
llvm::CodeGenOpt::Level(0));
386+
#else
387+
llvm::CodeGenOptLevel(0));
388+
#endif
360389
// create subtarget info module
361390
const llvm::MCSubtargetInfo* MCInfo = tm->getMCSubtargetInfo();
362391

@@ -435,6 +464,7 @@ std::string LLVMTargetInfo::str() const {
435464
#endif
436465
}
437466

467+
#if TVM_LLVM_VERSION <= 170
438468
if (opt_level_ != defaults::opt_level) {
439469
os << " -opt-level=";
440470
switch (opt_level_) {
@@ -452,6 +482,25 @@ std::string LLVMTargetInfo::str() const {
452482
break;
453483
}
454484
}
485+
#else
486+
if (opt_level_ != defaults::opt_level) {
487+
os << " -opt-level=";
488+
switch (opt_level_) {
489+
case llvm::CodeGenOptLevel::None:
490+
os << "0";
491+
break;
492+
case llvm::CodeGenOptLevel::Less:
493+
os << "1";
494+
break;
495+
case llvm::CodeGenOptLevel::Default:
496+
os << "2";
497+
break;
498+
case llvm::CodeGenOptLevel::Aggressive:
499+
os << "3";
500+
break;
501+
}
502+
}
503+
#endif
455504

456505
if (size_t num = llvm_options_.size(); num > 0) {
457506
os << " -cl-opt=";

src/target/llvm/llvm_instance.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,11 @@ class LLVMTargetInfo {
216216
* \brief Get the LLVM optimization level
217217
* \return optimization level for this target
218218
*/
219+
#if TVM_LLVM_VERSION <= 170
219220
llvm::CodeGenOpt::Level GetOptLevel() const { return opt_level_; }
221+
#else
222+
llvm::CodeGenOptLevel GetOptLevel() const { return opt_level_; }
223+
#endif
220224

221225
/*!
222226
* \class Option
@@ -312,7 +316,11 @@ class LLVMTargetInfo {
312316
std::vector<Option> llvm_options_;
313317
llvm::TargetOptions target_options_;
314318
llvm::FastMathFlags fast_math_flags_;
319+
#if TVM_LLVM_VERSION <= 170
315320
llvm::CodeGenOpt::Level opt_level_;
321+
#else
322+
llvm::CodeGenOptLevel opt_level_;
323+
#endif
316324
llvm::Reloc::Model reloc_model_ = llvm::Reloc::PIC_;
317325
llvm::CodeModel::Model code_model_ = llvm::CodeModel::Small;
318326
std::shared_ptr<llvm::TargetMachine> target_machine_;

src/target/llvm/llvm_module.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,12 @@ std::unique_ptr<llvm::Module> CloneLLVMModule(llvm::Module* mod) { return llvm::
197197
#if TVM_LLVM_VERSION <= 90
198198
constexpr auto llvm_object_file_target = llvm::TargetMachine::CGFT_ObjectFile;
199199
constexpr auto llvm_assembly_file_target = llvm::TargetMachine::CGFT_AssemblyFile;
200-
#else
200+
#elif TVM_LLVM_VERSION <= 170
201201
constexpr auto llvm_object_file_target = llvm::CGFT_ObjectFile;
202202
constexpr auto llvm_assembly_file_target = llvm::CGFT_AssemblyFile;
203+
#else
204+
constexpr auto llvm_object_file_target = llvm::CodeGenFileType::ObjectFile;
205+
constexpr auto llvm_assembly_file_target = llvm::CodeGenFileType::AssemblyFile;
203206
#endif
204207

205208
bool LLVMAddPassesToEmitFile(llvm::TargetMachine* tm, llvm::legacy::PassManager* pm,
@@ -274,9 +277,12 @@ String LLVMModuleNode::GetSource(const String& format) {
274277
#elif TVM_LLVM_VERSION <= 90
275278
ICHECK(tm->addPassesToEmitFile(pass, rso, nullptr, llvm::TargetMachine::CGFT_AssemblyFile) == 0)
276279
<< "Cannot emit target CGFT_AssemblyFile";
277-
#else
280+
#elif TVM_LLVM_VERSION <= 170
278281
ICHECK(tm->addPassesToEmitFile(pass, rso, nullptr, llvm::CGFT_AssemblyFile) == 0)
279282
<< "Cannot emit target CGFT_AssemblyFile";
283+
#else
284+
ICHECK(tm->addPassesToEmitFile(pass, rso, nullptr, llvm::CodeGenFileType::AssemblyFile) == 0)
285+
<< "Cannot emit target CodeGenFileType::AssemblyFile";
280286
#endif
281287
pass.run(*m);
282288
return rso.str().str();
@@ -383,7 +389,11 @@ void LLVMModuleNode::LazyInitJIT() {
383389
With<LLVMTarget> llvm_target(*llvm_instance_, LLVMTarget::GetTargetMetadata(*module_));
384390
llvm::EngineBuilder builder(std::move(module_owning_ptr_));
385391
builder.setEngineKind(llvm::EngineKind::JIT);
392+
#if TVM_LLVM_VERSION <= 170
386393
builder.setOptLevel(llvm::CodeGenOpt::Aggressive);
394+
#else
395+
builder.setOptLevel(llvm::CodeGenOptLevel::Aggressive);
396+
#endif
387397
builder.setMCPU(llvm_target->GetCPU());
388398
builder.setMAttrs(llvm_target->GetTargetFeatures());
389399
builder.setTargetOptions(llvm_target->GetTargetOptions());

0 commit comments

Comments
 (0)