This is an automated email from the ASF dual-hosted git repository.
tlopex pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new ff29817d57 [LLVM] Bump minimum LLVM version to 15 (#18853)
ff29817d57 is described below
commit ff29817d5715d7953053732b5c24d5a3e7e5af60
Author: Tianqi Chen <[email protected]>
AuthorDate: Sat Feb 28 10:50:30 2026 -0500
[LLVM] Bump minimum LLVM version to 15 (#18853)
## Summary
Bump the minimum required LLVM version from 6.0 to 15.0, removing all
compatibility code for older LLVM versions.
- Update CMake minimum version checks in `FindLLVM.cmake` and
`LLVM.cmake`
- Remove ~90 dead `#if TVM_LLVM_VERSION` preprocessor branches across 15
source files
- Update documentation references in `from_source.rst` and
`config.cmake`
- 531 lines of dead code removed, no behavioral changes
All changes are strictly dead-code removal — no live code paths were
modified.
## Test plan
- [x] Build with LLVM 15 (`-DUSE_LLVM=ON`): passed
- [x] `test_target_codegen_llvm.py`: 40/40 passed
- [x] `pre-commit run --all-files`: passed
---
cmake/config.cmake | 2 +-
cmake/modules/LLVM.cmake | 4 +-
cmake/utils/FindLLVM.cmake | 4 +-
docs/install/from_source.rst | 2 +-
src/target/llvm/codegen_aarch64.cc | 2 -
src/target/llvm/codegen_amdgpu.cc | 57 +-------
src/target/llvm/codegen_arm.cc | 6 +-
src/target/llvm/codegen_blob.cc | 21 +--
src/target/llvm/codegen_cpu.cc | 90 +------------
src/target/llvm/codegen_hexagon.cc | 31 +----
src/target/llvm/codegen_llvm.cc | 143 +--------------------
src/target/llvm/codegen_llvm.h | 23 +---
src/target/llvm/codegen_nvptx.cc | 38 +-----
src/target/llvm/codegen_x86_64.cc | 24 +---
src/target/llvm/llvm_instance.cc | 42 ------
src/target/llvm/llvm_instance.h | 16 ---
src/target/llvm/llvm_module.cc | 50 +------
.../cpp/target/canonicalizer/arm_aprofile_test.cc | 2 -
tests/cpp/tir_scalable_datatype.cc | 2 -
19 files changed, 26 insertions(+), 533 deletions(-)
diff --git a/cmake/config.cmake b/cmake/config.cmake
index 03067fa83a..856754c3ec 100644
--- a/cmake/config.cmake
+++ b/cmake/config.cmake
@@ -122,7 +122,7 @@ set(USE_CPP_RTVM OFF)
set(USE_IOS_RPC OFF)
# Whether build with LLVM support
-# Requires LLVM version >= 4.0
+# Requires LLVM version >= 15
#
# Possible values:
# - ON: enable llvm with CMake's find search
diff --git a/cmake/modules/LLVM.cmake b/cmake/modules/LLVM.cmake
index fa1cbf6d1a..59b92fa35b 100644
--- a/cmake/modules/LLVM.cmake
+++ b/cmake/modules/LLVM.cmake
@@ -29,8 +29,8 @@ add_definitions(-DNDEBUG=1)
# It may be a boolean or a string
if(NOT ${USE_LLVM} MATCHES ${IS_FALSE_PATTERN})
find_llvm(${USE_LLVM})
- if (${TVM_LLVM_VERSION} LESS 60)
- message(FATAL_ERROR "LLVM version 6.0 or greater is required.")
+ if (${TVM_LLVM_VERSION} LESS 150)
+ message(FATAL_ERROR "LLVM version 15.0 or greater is required.")
endif()
include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
diff --git a/cmake/utils/FindLLVM.cmake b/cmake/utils/FindLLVM.cmake
index 09f4dcca7f..d35feef687 100644
--- a/cmake/utils/FindLLVM.cmake
+++ b/cmake/utils/FindLLVM.cmake
@@ -233,8 +233,8 @@ macro(find_llvm use_llvm)
message(STATUS "Found LLVM_DEFINITIONS=" "${LLVM_DEFINITIONS}")
message(STATUS "Found LLVM_LIBS=" "${LLVM_LIBS}")
message(STATUS "Found TVM_LLVM_VERSION=" ${TVM_LLVM_VERSION})
- if (${TVM_LLVM_VERSION} LESS 40)
- message(FATAL_ERROR "TVM requires LLVM 4.0 or higher.")
+ if (${TVM_LLVM_VERSION} LESS 150)
+ message(FATAL_ERROR "TVM requires LLVM 15.0 or higher.")
endif()
message(STATUS "Found TVM_LLVM_HAS_AARCH64_TARGET="
${TVM_LLVM_HAS_AARCH64_TARGET})
endmacro(find_llvm)
diff --git a/docs/install/from_source.rst b/docs/install/from_source.rst
index a016f5ab19..fd423fa7a1 100644
--- a/docs/install/from_source.rst
+++ b/docs/install/from_source.rst
@@ -320,7 +320,7 @@ Currently, ROCm is supported only on linux, so all the
instructions are written
- Set ``set(USE_ROCM ON)``, set ROCM_PATH to the correct path.
- You need to first install HIP runtime from ROCm. Make sure the installation
system has ROCm installed in it.
-- Install latest stable version of LLVM (v6.0.1), and LLD, make sure
``ld.lld`` is available via command line.
+- Install LLVM (>= 15), and LLD, make sure ``ld.lld`` is available via command
line.
.. _install-from-source-cpp-tests:
diff --git a/src/target/llvm/codegen_aarch64.cc
b/src/target/llvm/codegen_aarch64.cc
index 22e7d873b6..ced6d8dc2d 100644
--- a/src/target/llvm/codegen_aarch64.cc
+++ b/src/target/llvm/codegen_aarch64.cc
@@ -55,7 +55,6 @@ void CodeGenAArch64::AddFunction(const GlobalVar& gvar, const
PrimFunc& f) {
}
void CodeGenAArch64::SetTargetAttributes(llvm::Function* func) {
-#if TVM_LLVM_VERSION >= 130
// Add vscale_range() function attribute when appropriate.
if (llvm_target_->TargetHasCPUFeature("sve") ||
llvm_target_->TargetHasCPUFeature("sme")) {
auto kVScaleValues = arith::GetVScaleValues(Target::Current());
@@ -65,7 +64,6 @@ void CodeGenAArch64::SetTargetAttributes(llvm::Function*
func) {
llvm::Attribute::getWithVScaleRangeArgs(*llvm_target_->GetContext(),
1, max_val));
}
}
-#endif
CodeGenCPU::SetTargetAttributes(func);
}
diff --git a/src/target/llvm/codegen_amdgpu.cc
b/src/target/llvm/codegen_amdgpu.cc
index ac250982ce..43262f57e3 100644
--- a/src/target/llvm/codegen_amdgpu.cc
+++ b/src/target/llvm/codegen_amdgpu.cc
@@ -30,19 +30,15 @@
#include <llvm/IR/GlobalValue.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/Intrinsics.h>
-#include <tvm/ffi/reflection/registry.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/IR/IntrinsicsAMDGPU.h>
-#endif
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/IRReader/IRReader.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/Support/Alignment.h>
-#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/Support/raw_ostream.h>
#include <llvm/Target/TargetMachine.h>
+#include <tvm/ffi/reflection/registry.h>
#if TVM_LLVM_VERSION < 170
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
#endif
@@ -126,17 +122,9 @@ class CodeGenAMDGPU : public CodeGenLLVM {
llvm::AllocaInst* alloca = WithFunctionEntry([&]() {
return builder_->CreateAlloca(DTypeToLLVMType(op->dtype),
ConstInt32(constant_size));
});
-#if TVM_LLVM_VERSION >= 110
auto alignment = static_cast<unsigned>(alloca->getAlign().value());
-#else
- unsigned alignment = alloca->getAlignment();
-#endif
if (alignment < static_cast<unsigned>(info.alignment)) {
-#if TVM_LLVM_VERSION >= 100
alloca->setAlignment(llvm::Align(info.alignment));
-#else
- alloca->setAlignment(info.alignment);
-#endif
}
buf = alloca;
} else {
@@ -233,25 +221,11 @@ class CodeGenAMDGPU : public CodeGenLLVM {
llvm::Value* v0 = MakeValue(op->args[0]);
llvm::Value* v1 = MakeValue(op->args[1]);
if (op->args[1]->dtype.is_float()) {
-#if TVM_LLVM_VERSION >= 90
-#if TVM_LLVM_VERSION >= 130
return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::FAdd, v0, v1,
llvm::MaybeAlign(),
llvm::AtomicOrdering::Monotonic);
-#else
- return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::FAdd, v0, v1,
- llvm::AtomicOrdering::Monotonic);
-#endif
-#else
- TVM_FFI_THROW(InternalError) << "Floating point atomic requires LLVM 9
or newer";
-#endif
}
-#if TVM_LLVM_VERSION >= 130
return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::Add, v0, v1,
llvm::MaybeAlign(),
llvm::AtomicOrdering::Monotonic);
-#else
- return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::Add, v0, v1,
- llvm::AtomicOrdering::Monotonic);
-#endif
}
return CodeGenLLVM::CreateIntrinsic(op);
}
@@ -268,11 +242,6 @@ ffi::Module BuildAMDGPU(IRModule mod, Target target) {
LLVMInstance llvm_instance;
With<LLVMTarget> llvm_target(llvm_instance, target);
-#if TVM_LLVM_VERSION < 90
- TVM_FFI_THROW(InternalError) << "AMDGPU backend requires at least LLVM 9";
- // Lower versions will crash when loading the bitcode, see
- // issue #4087 for a discussion
-#endif
auto cg = std::make_unique<CodeGenAMDGPU>();
cg->Init("TVMAMDGPUModule", llvm_target.get(), std::nullopt, false, false);
@@ -305,23 +274,11 @@ ffi::Module BuildAMDGPU(IRModule mod, Target target) {
dest_ll.SetUnbuffered();
destAsm.SetUnbuffered();
module->print(dest_ll, nullptr);
-#if TVM_LLVM_VERSION <= 60
- std::unique_ptr<llvm::Module> mAsm = llvm::CloneModule(module.get());
- std::unique_ptr<llvm::Module> mObj = llvm::CloneModule(module.get());
-#else
std::unique_ptr<llvm::Module> mAsm = llvm::CloneModule(*module.get());
std::unique_ptr<llvm::Module> mObj = llvm::CloneModule(*module.get());
-#endif
llvm::legacy::PassManager pass;
-#if TVM_LLVM_VERSION <= 60
- TVM_FFI_ICHECK(tm->addPassesToEmitFile(pass, destObj,
llvm::TargetMachine::CGFT_ObjectFile) == 0)
- << "Cannot emit target CGFT_ObjectFile";
-#elif TVM_LLVM_VERSION <= 90
- TVM_FFI_ICHECK(
- tm->addPassesToEmitFile(pass, destObj, nullptr,
llvm::TargetMachine::CGFT_ObjectFile) == 0)
- << "Cannot emit target CGFT_ObjectFile";
-#elif TVM_LLVM_VERSION <= 170
+#if TVM_LLVM_VERSION <= 170
TVM_FFI_ICHECK(tm->addPassesToEmitFile(pass, destObj, nullptr,
llvm::CGFT_ObjectFile) == 0)
<< "Cannot emit target CGFT_ObjectFile";
#else
@@ -333,15 +290,7 @@ ffi::Module BuildAMDGPU(IRModule mod, Target target) {
std::string obj(dataObj.begin(), dataObj.end());
llvm::legacy::PassManager passAsm;
-#if TVM_LLVM_VERSION <= 60
- TVM_FFI_ICHECK(
- tm->addPassesToEmitFile(passAsm, destAsm,
llvm::TargetMachine::CGFT_AssemblyFile) == 0)
- << "Cannot emit target CGFT_AssemblyFile";
-#elif TVM_LLVM_VERSION <= 90
- TVM_FFI_ICHECK(tm->addPassesToEmitFile(passAsm, destAsm, nullptr,
-
llvm::TargetMachine::CGFT_AssemblyFile) == 0)
- << "Cannot emit target CGFT_AssemblyFile";
-#elif TVM_LLVM_VERSION <= 170
+#if TVM_LLVM_VERSION <= 170
TVM_FFI_ICHECK(tm->addPassesToEmitFile(passAsm, destAsm, nullptr,
llvm::CGFT_AssemblyFile) == 0)
<< "Cannot emit target CGFT_AssemblyFile";
#else
diff --git a/src/target/llvm/codegen_arm.cc b/src/target/llvm/codegen_arm.cc
index c742b2f75f..5f41bf5699 100644
--- a/src/target/llvm/codegen_arm.cc
+++ b/src/target/llvm/codegen_arm.cc
@@ -24,12 +24,10 @@
#ifdef TVM_LLVM_VERSION
#include <llvm/IR/Intrinsics.h>
-#include <tvm/ffi/function.h>
-#include <tvm/ffi/reflection/registry.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/IR/IntrinsicsARM.h>
-#endif
#include <llvm/Target/TargetMachine.h>
+#include <tvm/ffi/function.h>
+#include <tvm/ffi/reflection/registry.h>
#include "codegen_cpu.h"
diff --git a/src/target/llvm/codegen_blob.cc b/src/target/llvm/codegen_blob.cc
index 17056c3312..0bba8d492e 100644
--- a/src/target/llvm/codegen_blob.cc
+++ b/src/target/llvm/codegen_blob.cc
@@ -43,9 +43,7 @@
#include <llvm/IR/Module.h>
#include <llvm/IR/Type.h>
#include <llvm/IR/Value.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/Support/Alignment.h>
-#endif
#include <llvm/Target/TargetMachine.h>
#include <llvm/Transforms/Utils/ModuleUtils.h>
#include <tvm/runtime/module.h>
@@ -95,11 +93,7 @@ std::unique_ptr<llvm::Module> CodeGenBlob(const std::string&
data, bool system_l
tvm_ffi_library_bin->setSection(".lrodata");
}
-#if TVM_LLVM_VERSION >= 100
tvm_ffi_library_bin->setAlignment(llvm::Align(1));
-#else
- tvm_ffi_library_bin->setAlignment(1);
-#endif
if (triple.isOSWindows()) {
tvm_ffi_library_bin->setDLLStorageClass(llvm::GlobalVariable::DLLExportStorageClass);
@@ -116,17 +110,8 @@ std::unique_ptr<llvm::Module> CodeGenBlob(const
std::string& data, bool system_l
auto* tvm_ffi_library_bin_reg =
new llvm::GlobalVariable(*module, int32_ty, false,
llvm::GlobalValue::InternalLinkage,
constant_zero, mdev_blob_name + "_reg_");
- auto tvm_ffi_library_bin_reg_alignment =
-#if TVM_LLVM_VERSION >= 110
- module->getDataLayout().getABITypeAlign(int32_ty);
-#else
- module->getDataLayout().getABITypeAlignment(int32_ty);
-#endif
-#if TVM_LLVM_VERSION >= 100
+ auto tvm_ffi_library_bin_reg_alignment =
module->getDataLayout().getABITypeAlign(int32_ty);
tvm_ffi_library_bin_reg->setAlignment(llvm::Align(tvm_ffi_library_bin_reg_alignment));
-#else
- tvm_ffi_library_bin_reg->setAlignment(tvm_ffi_library_bin_reg_alignment);
-#endif
auto* tvm_ffi_library_bin_string_ty =
llvm::ArrayType::get(int8_ty, mdev_blob_name.length() + 1);
@@ -135,11 +120,7 @@ std::unique_ptr<llvm::Module> CodeGenBlob(const
std::string& data, bool system_l
auto* tvm_ffi_library_bin_string = new llvm::GlobalVariable(
*module, tvm_ffi_library_bin_string_ty, true,
llvm::GlobalValue::PrivateLinkage,
tvm_ffi_library_bin_string_value, mdev_blob_name + ".str");
-#if TVM_LLVM_VERSION >= 100
tvm_ffi_library_bin_string->setAlignment(llvm::Align(1));
-#else
- tvm_ffi_library_bin_string->setAlignment(1);
-#endif
// Global init function
llvm::Function* init_fn = llvm::Function::Create(
diff --git a/src/target/llvm/codegen_cpu.cc b/src/target/llvm/codegen_cpu.cc
index 906d79b176..8a9895f72b 100644
--- a/src/target/llvm/codegen_cpu.cc
+++ b/src/target/llvm/codegen_cpu.cc
@@ -43,13 +43,11 @@
#include <llvm/IR/MDBuilder.h>
#include <llvm/IR/Metadata.h>
#include <llvm/IR/Module.h>
-#include <tvm/ffi/reflection/registry.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/Support/Alignment.h>
-#endif
#include <llvm/Support/raw_ostream.h>
#include <llvm/Target/TargetMachine.h>
#include <llvm/Transforms/Utils/ModuleUtils.h>
+#include <tvm/ffi/reflection/registry.h>
#include <tvm/runtime/base.h>
#include <tvm/runtime/module.h>
#include <tvm/tir/analysis.h>
@@ -177,10 +175,6 @@ void CodeGenCPU::Init(const std::string& module_name,
LLVMTarget* llvm_target,
llvm::DISubprogram* CodeGenCPU::CreateDebugFunction(llvm::StringRef name,
const ffi::Array<Type>&
param_types,
const Type& return_type) {
-#if TVM_LLVM_VERSION < 50
- return nullptr;
-#else
-
llvm::SmallVector<llvm::Metadata*, 4> paramTys;
paramTys.push_back(GetDebugType(return_type));
@@ -193,12 +187,8 @@ llvm::DISubprogram*
CodeGenCPU::CreateDebugFunction(llvm::StringRef name,
bool local_to_unit =
llvm::GlobalVariable::isLocalLinkage(llvm::GlobalValue::InternalLinkage);
-#if TVM_LLVM_VERSION >= 80
auto SPFlags = llvm::DISubprogram::toSPFlags(local_to_unit,
/*IsDefinition=*/true,
/*IsOptimized=*/true);
-#else
- bool SPFlags = /*IsOptimized=*/true;
-#endif
auto* DIFunction = dbg_info_->di_builder_->createFunction(
/*Scope=*/dbg_info_->file_, /*Name=*/name, /*LinkageName=*/"",
@@ -206,8 +196,6 @@ llvm::DISubprogram*
CodeGenCPU::CreateDebugFunction(llvm::StringRef name,
/*ScopeLine=*/0, /*Flags=*/llvm::DINode::FlagPrototyped,
/*SPFlags=*/SPFlags);
return DIFunction;
-
-#endif
}
llvm::DISubprogram* CodeGenCPU::CreateDebugFunction(const GlobalVar& gvar,
const PrimFunc& func) {
@@ -426,11 +414,7 @@ llvm::Value* CodeGenCPU::CreateCallExtern(Type ret_type,
ffi::String global_symb
llvm::GlobalVariable* CodeGenCPU::InitContextPtr(llvm::Type* p_type,
std::string name) {
llvm::GlobalVariable* gv = new llvm::GlobalVariable(
*module_, p_type, false, llvm::GlobalValue::LinkOnceAnyLinkage, nullptr,
name);
-#if TVM_LLVM_VERSION >= 100
gv->setAlignment(llvm::Align(data_layout_->getTypeAllocSize(p_type)));
-#else
- gv->setAlignment(data_layout_->getTypeAllocSize(p_type));
-#endif
gv->setInitializer(llvm::Constant::getNullValue(p_type));
gv->setDLLStorageClass(llvm::GlobalValue::DLLStorageClassTypes::DLLExportStorageClass);
// comdat is needed for windows select any linking to work
@@ -445,14 +429,8 @@ llvm::GlobalVariable*
CodeGenCPU::InitContextPtr(llvm::Type* p_type, std::string
llvm::Value* CodeGenCPU::GetContextPtr(llvm::GlobalVariable* gv) {
TVM_FFI_ICHECK(gv != nullptr);
-#if TVM_LLVM_VERSION >= 110
llvm::LoadInst* faddr =
builder_->CreateAlignedLoad(gv->getValueType(), gv,
llvm::Align(gv->getAlignment()));
-#elif TVM_LLVM_VERSION >= 80
- llvm::LoadInst* faddr = builder_->CreateAlignedLoad(gv->getValueType(), gv,
gv->getAlignment());
-#else
- llvm::LoadInst* faddr = builder_->CreateAlignedLoad(gv, gv->getAlignment());
-#endif
faddr->setMetadata("tbaa",
md_builder_->createTBAAStructTagNode(md_tbaa_ctx_ptr_,
md_tbaa_ctx_ptr_, 0));
return faddr;
@@ -568,16 +546,11 @@ void CodeGenCPU::CreateComputeScope(const AttrStmtNode*
op) {
var_map_[var.get()] = v;
if (var.dtype().is_handle() && !alias_var_set_.count(var.get())) {
// set non alias.
-#if TVM_LLVM_VERSION >= 50
fcompute->addParamAttr(idx, llvm::Attribute::NoAlias);
// always not inline compute function to make the code structure clean
-#else
- fcompute->setDoesNotAlias(idx + 1);
-#endif
fcompute->addFnAttr(llvm::Attribute::NoInline);
}
// Add alignment attribute if needed.
-#if TVM_LLVM_VERSION >= 50
auto f = alloc_storage_info_.find(var.get());
if (f != alloc_storage_info_.end()) {
unsigned align = f->second.alignment;
@@ -586,7 +559,6 @@ void CodeGenCPU::CreateComputeScope(const AttrStmtNode* op)
{
fcompute->addParamAttr(idx, attr);
}
}
-#endif
}
function_ = fcompute;
@@ -650,11 +622,7 @@ void CodeGenCPU::CreateParallelLaunch(const Stmt& body,
int num_task, std::strin
ffi::Array<Var> vfields = tir::UndefinedVars(body, {});
uint64_t nbytes;
TypedPointer cdata = PackClosureData(vfields, &nbytes, "closure_" + name);
-#if TVM_LLVM_VERSION >= 90
auto launch_callee = llvm::FunctionCallee(ftype_tvm_parallel_launch_,
RuntimeTVMParallelLaunch());
-#else
- auto launch_callee = RuntimeTVMParallelLaunch();
-#endif
llvm::BasicBlock* par_launch_end = CheckCallSuccess(builder_->CreateCall(
launch_callee,
{f, builder_->CreatePointerCast(cdata.addr, t_void_p_),
ConstInt32(num_task)}));
@@ -701,11 +669,7 @@ llvm::Value* CodeGenCPU::CreateStaticHandle() {
llvm::GlobalVariable* gv =
new llvm::GlobalVariable(*module_, t_void_p_, false,
llvm::GlobalValue::PrivateLinkage,
nullptr, "__tvm_static_handle");
-#if TVM_LLVM_VERSION >= 100
gv->setAlignment(llvm::Align(data_layout_->getTypeAllocSize(t_void_p_)));
-#else
- gv->setAlignment(data_layout_->getTypeAllocSize(t_void_p_));
-#endif
gv->setInitializer(llvm::Constant::getNullValue(t_void_p_));
return gv;
}
@@ -768,11 +732,7 @@ llvm::Value* CodeGenCPU::GetPackedFuncHandle(const
std::string& fname) {
hptr =
new llvm::GlobalVariable(*module_, t_tvm_func_handle_, false,
llvm::GlobalValue::InternalLinkage, nullptr,
".tvm_func." + fname);
-#if TVM_LLVM_VERSION >= 100
hptr->setAlignment(llvm::Align(align));
-#else
- hptr->setAlignment(align);
-#endif
hptr->setInitializer(llvm::Constant::getNullValue(t_tvm_func_handle_));
func_handle_map_[fname] = hptr;
} else {
@@ -783,13 +743,7 @@ llvm::Value* CodeGenCPU::GetPackedFuncHandle(const
std::string& fname) {
llvm::BasicBlock* pre_block = builder_->GetInsertBlock();
auto* init_block = llvm::BasicBlock::Create(*ctx, "handle_init", function_);
auto* end_block = llvm::BasicBlock::Create(*ctx, "handle_init_end",
function_);
-#if TVM_LLVM_VERSION >= 110
llvm::Value* handle = builder_->CreateAlignedLoad(hptr->getValueType(),
hptr, llvm::Align(align));
-#elif TVM_LLVM_VERSION >= 80
- llvm::Value* handle = builder_->CreateAlignedLoad(hptr->getValueType(),
hptr, align);
-#else
- llvm::Value* handle = builder_->CreateAlignedLoad(hptr, align);
-#endif
llvm::Value* handle_not_null =
builder_->CreateICmpNE(handle,
llvm::Constant::getNullValue(t_tvm_func_handle_));
builder_->CreateCondBr(handle_not_null, end_block, init_block,
md_very_likely_branch_);
@@ -797,32 +751,15 @@ llvm::Value* CodeGenCPU::GetPackedFuncHandle(const
std::string& fname) {
builder_->SetInsertPoint(init_block);
llvm::Value* out =
WithFunctionEntry([&]() { return
builder_->CreateAlloca(t_tvm_func_handle_); });
-#if TVM_LLVM_VERSION >= 110
llvm::LoadInst* ctx_load =
builder_->CreateAlignedLoad(gv_mod_ctx_->getValueType(), gv_mod_ctx_,
llvm::Align(gv_mod_ctx_->getAlignment()));
-#elif TVM_LLVM_VERSION >= 80
- llvm::LoadInst* ctx_load =
builder_->CreateAlignedLoad(gv_mod_ctx_->getValueType(), gv_mod_ctx_,
-
gv_mod_ctx_->getAlignment());
-#else
- llvm::LoadInst* ctx_load = builder_->CreateAlignedLoad(gv_mod_ctx_,
gv_mod_ctx_->getAlignment());
-#endif
ctx_load->setMetadata(
"tbaa", md_builder_->createTBAAStructTagNode(md_tbaa_ctx_ptr_,
md_tbaa_ctx_ptr_, 0));
-#if TVM_LLVM_VERSION >= 90
auto env_callee = llvm::FunctionCallee(ftype_tvm_get_func_from_env_,
RuntimeTVMGetFuncFromEnv());
-#else
- auto env_callee = RuntimeTVMGetFuncFromEnv();
-#endif
llvm::Value* retcode = builder_->CreateCall(env_callee, {ctx_load,
GetConstString(fname), out});
init_block = CheckCallSuccess(retcode);
-#if TVM_LLVM_VERSION >= 110
llvm::Value* loaded_handle =
builder_->CreateAlignedLoad(t_tvm_func_handle_, out, llvm::Align(align));
-#elif TVM_LLVM_VERSION >= 80
- llvm::Value* loaded_handle = builder_->CreateAlignedLoad(t_tvm_func_handle_,
out, align);
-#else
- llvm::Value* loaded_handle = builder_->CreateAlignedLoad(out, align);
-#endif
// Store the handle
builder_->CreateStore(loaded_handle, hptr);
builder_->CreateBr(end_block);
@@ -876,12 +813,7 @@ CodeGenCPU::PackedCall
CodeGenCPU::MakeCallPackedLowered(const ffi::Array<PrimEx
call_args.push_back(llvm::ConstantPointerNull::get(t_void_p_));
call_args.insert(call_args.end(), {packed_args, ConstInt32(nargs),
result});
}
-#if TVM_LLVM_VERSION >= 90
auto call_callee = llvm::FunctionCallee(callee_ftype, callee_value);
-#else
- (void)callee_ftype; // use callee_ftype to avoid unused variable warning
when using older LLVM.
- auto call_callee = callee_value;
-#endif
llvm::Value* call = builder_->CreateCall(call_callee, call_args);
llvm::BasicBlock* end_block = CheckCallSuccess(call);
@@ -896,26 +828,14 @@ CodeGenCPU::PackedCall
CodeGenCPU::MakeCallPackedLowered(const ffi::Array<PrimEx
builder_->CreateInBoundsGEP(t_tvm_ffi_any_, result, {ConstInt32(0),
ConstInt32(2)});
llvm::Value* load_ptr =
builder_->CreatePointerCast(result_value,
llvmGetPointerTo(llvm_r_api_type, 0));
-#if TVM_LLVM_VERSION >= 110
llvm::Value* rvalue = builder_->CreateAlignedLoad(llvm_r_api_type,
load_ptr, llvm::Align(8));
-#elif TVM_LLVM_VERSION >= 80
- llvm::Value* rvalue = builder_->CreateAlignedLoad(llvm_r_api_type,
load_ptr, 8);
-#else
- llvm::Value* rvalue = builder_->CreateAlignedLoad(load_ptr, 8);
-#endif
pc.ret_value = CreateCast(r_api_type, r_type, rvalue);
llvm::Value* result_type_index =
builder_->CreateInBoundsGEP(t_tvm_ffi_any_, result, {ConstInt32(0),
ConstInt32(0)});
// Load the return type code.
-#if TVM_LLVM_VERSION >= 110
pc.ret_type_index = builder_->CreateAlignedLoad(t_int32_,
result_type_index, llvm::Align(4));
-#elif TVM_LLVM_VERSION >= 80
- pc.ret_type_index = builder_->CreateAlignedLoad(t_int32_,
result_type_index, 8);
-#else
- pc.ret_type_index = builder_->CreateAlignedLoad(result_type_index, 8);
-#endif
}
pc.end_block = end_block;
@@ -1095,12 +1015,8 @@ void CodeGenCPU::VisitStmt_(const AssertStmtNode* op) {
// fail condition.
builder_->SetInsertPoint(fail_block);
-#if TVM_LLVM_VERSION >= 90
auto err_callee =
llvm::FunctionCallee(ftype_tvm_ffi_error_set_raised_by_c_str_,
RuntimeTVMFFIErrorSetRaisedFromCStr());
-#else
- auto err_callee = RuntimeTVMFFIErrorSetRaisedFromCStr();
-#endif
builder_->CreateCall(err_callee, {GetConstString("RuntimeError"), msg});
builder_->CreateRet(ConstInt32(-1));
// otherwise set it to be new end.
@@ -1131,12 +1047,8 @@ void CodeGenCPU::VisitStmt_(const AttrStmtNode* op) {
<< "Cannot not place within parallel loop as the workload may
differ, "
<< " place it between parallel and parallel_launch_point";
this->VisitStmt(op->body);
-#if TVM_LLVM_VERSION >= 90
auto bar_callee =
llvm::FunctionCallee(ftype_tvm_parallel_barrier_,
RuntimeTVMParallelBarrier());
-#else
- auto bar_callee = RuntimeTVMParallelBarrier();
-#endif
builder_->CreateCall(bar_callee, {MakeValue(parallel_env_.task_id),
parallel_env_.penv});
} else if (op->attr_key == tir::attr::pragma_import_llvm) {
const StringImmNode* value = op->value.as<StringImmNode>();
diff --git a/src/target/llvm/codegen_hexagon.cc
b/src/target/llvm/codegen_hexagon.cc
index 61922a6342..489cbd04e0 100644
--- a/src/target/llvm/codegen_hexagon.cc
+++ b/src/target/llvm/codegen_hexagon.cc
@@ -17,7 +17,7 @@
* under the License.
*/
-#if defined(TVM_LLVM_VERSION) && TVM_LLVM_VERSION >= 70
+#ifdef TVM_LLVM_VERSION
#include <llvm/ADT/ArrayRef.h>
#include <llvm/ADT/SmallString.h>
@@ -29,23 +29,19 @@
#include <llvm/IR/GlobalVariable.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/Intrinsics.h>
-#include <tvm/ffi/reflection/registry.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/IR/IntrinsicsHexagon.h>
-#endif
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/IR/MDBuilder.h>
#include <llvm/IR/Module.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/Support/Alignment.h>
-#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Support/CommandLine.h>
#include <llvm/Support/FileSystem.h>
#include <llvm/Support/raw_ostream.h>
#include <llvm/Target/TargetMachine.h>
#include <llvm/Transforms/Utils/Cloning.h>
+#include <tvm/ffi/reflection/registry.h>
#include <tvm/runtime/module.h>
#include <tvm/target/codegen.h>
#include <tvm/tir/analysis.h>
@@ -89,10 +85,8 @@ class CodeGenHexagon final : public CodeGenCPU {
uint64_t GetTypeSizeInBits(llvm::Type* type) const {
#if TVM_LLVM_VERSION >= 160
return data_layout_->getTypeSizeInBits(type).getFixedValue();
-#elif TVM_LLVM_VERSION >= 100
- return data_layout_->getTypeSizeInBits(type).getFixedSize();
#else
- return data_layout_->getTypeSizeInBits(type);
+ return data_layout_->getTypeSizeInBits(type).getFixedSize();
#endif
}
@@ -171,11 +165,7 @@ llvm::Value* CodeGenHexagon::CreateCallExternQHL(Type
ret_type, ffi::String glob
f = llvm::Function::Create(ftype, llvm::Function::ExternalLinkage,
MakeStringRef(global_symbol), module_.get());
}
-#if TVM_LLVM_VERSION >= 90
auto ext_callee = llvm::FunctionCallee(f);
-#else
- auto ext_callee = f;
-#endif
vect_split.push_back(builder_->CreateCall(ext_callee, sub_vect_val));
}
return CodeGenCPU::CreateVecConcat(vect_split);
@@ -208,7 +198,6 @@ llvm::Value* CodeGenHexagon::VisitExpr_(const
BufferLoadNode* op) {
}
llvm::Value* CodeGenHexagon::CreateIntrinsic(const CallNode* op) {
-#if TVM_LLVM_VERSION >= 150
if (op->op.same_as(builtin::start_profile_intrinsic()) ||
op->op.same_as(builtin::end_profile_intrinsic())) {
llvm::Value* id = MakeValue(op->args[0]);
@@ -230,7 +219,6 @@ llvm::Value* CodeGenHexagon::CreateIntrinsic(const
CallNode* op) {
llvm::Type* t_int8_p_ = llvmGetPointerTo(t_int8_, 0);
return builder_->CreateCall(func,
{llvm::ConstantExpr::getBitCast(name_var, t_int8_p_), id});
}
-#endif
return CodeGenCPU::CreateIntrinsic(op);
}
@@ -303,11 +291,7 @@ llvm::Value* CodeGenHexagon::Intrinsic(llvm::Intrinsic::ID
IntID,
#else
llvm::Function* intf = llvm::Intrinsic::getDeclaration(module_.get(), IntID);
#endif
-#if TVM_LLVM_VERSION >= 90
auto intf_callee = llvm::FunctionCallee(intf);
-#else
- auto intf_callee = intf;
-#endif
std::vector<llvm::Value*> conv_args;
llvm::FunctionType* intf_type = intf->getFunctionType();
TVM_FFI_ICHECK(args.size() == intf_type->getNumParams());
@@ -400,11 +384,7 @@ llvm::Value* CodeGenHexagon::VectorLookupLoad(Buffer
buffer, DataType buffer_typ
int ret_bits = GetTypeSizeInBits(ret_type);
TVM_FFI_ICHECK_GE(res_bits, ret_bits);
if (ret_bits < res_bits) {
-#if TVM_LLVM_VERSION >= 110
llvm::Type* res_byte_type = llvm::VectorType::get(t_int8_, res_bits / 8,
/*Scalable*/ false);
-#else
- llvm::Type* res_byte_type = llvm::VectorType::get(t_int8_, res_bits / 8);
-#endif
result = CreateVecSlice(builder_->CreateBitCast(result, res_byte_type), 0,
ret_bits / 8);
}
if (result->getType() != ret_type) {
@@ -525,10 +505,7 @@ ffi::Module BuildHexagon(IRModule mod, Target target) {
else
llvm::WriteBitcodeToFile(m, os);
} else if (cgft == Asm || cgft == Obj) {
-#if TVM_LLVM_VERSION <= 90
- auto ft = cgft == Asm ?
llvm::TargetMachine::CodeGenFileType::CGFT_AssemblyFile
- :
llvm::TargetMachine::CodeGenFileType::CGFT_ObjectFile;
-#elif TVM_LLVM_VERSION <= 170
+#if TVM_LLVM_VERSION <= 170
auto ft = cgft == Asm ? llvm::CGFT_AssemblyFile : llvm::CGFT_ObjectFile;
#else
auto ft =
diff --git a/src/target/llvm/codegen_llvm.cc b/src/target/llvm/codegen_llvm.cc
index 472567efc7..6daa2d49a6 100644
--- a/src/target/llvm/codegen_llvm.cc
+++ b/src/target/llvm/codegen_llvm.cc
@@ -34,16 +34,8 @@
#include <llvm/ADT/Triple.h>
#endif
#include <llvm/Analysis/TargetTransformInfo.h>
-#if TVM_LLVM_VERSION >= 50
#include <llvm/BinaryFormat/Dwarf.h>
-#else
-#include <llvm/Support/Dwarf.h>
-#endif
-#if TVM_LLVM_VERSION >= 60
#include <llvm/CodeGen/TargetSubtargetInfo.h>
-#else
-#include <llvm/Target/TargetSubtargetInfo.h>
-#endif
#include <llvm/IR/Argument.h>
#include <llvm/IR/Attributes.h>
#include <llvm/IR/BasicBlock.h>
@@ -53,11 +45,7 @@
#include <llvm/IR/DataLayout.h>
#include <llvm/IR/DebugInfoMetadata.h>
#include <llvm/IR/DerivedTypes.h>
-#if TVM_LLVM_VERSION >= 150
#include <llvm/IR/FMF.h>
-#else
-#include <llvm/IR/Operator.h>
-#endif
#include <llvm/IR/Function.h>
#include <llvm/IR/GlobalVariable.h>
#include <llvm/IR/Instructions.h>
@@ -81,13 +69,11 @@
#include <llvm/Support/Host.h>
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
#endif
-#if TVM_LLVM_VERSION >= 100
#include <llvm/Support/Alignment.h>
-#include <llvm/Support/TypeSize.h>
-#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/Support/SourceMgr.h>
+#include <llvm/Support/TypeSize.h>
#include <llvm/Target/TargetMachine.h>
#include <llvm/Transforms/IPO.h>
#include <llvm/Transforms/Utils/ModuleUtils.h>
@@ -183,9 +169,7 @@ void CodeGenLLVM::InitTarget() {
if (native_vector_bits_ == 0) {
native_vector_bits_ = llvm_target_->GetVectorWidth();
}
-#if TVM_LLVM_VERSION >= 60
bool use_float16_abi = false;
-#if TVM_LLVM_VERSION >= 150
// For conversions between _Float16 and float, LLVM uses runtime functions
// __extendhfsf2 and __truncsfhf2. On X86 up until version 14, LLVM used
// "uint16_t" for representing _Float16. Starting with LLVM 15,
half-precision
@@ -215,12 +199,10 @@ void CodeGenLLVM::InitTarget() {
TVM_FFI_ICHECK(test_sse2 != nullptr) << "Module creation error";
use_float16_abi = tm->getSubtargetImpl(*test_sse2)->checkFeatures("+sse2");
}
-#endif // TVM_LLVM_VERSION >= 150
// Call this function only with LLVM >= 6.0. The code it emits uses
"dso_local"
// which was introduced in LLVM 6.
EmitFloat16ConversionBuiltins(use_float16_abi);
-#endif // TVM_LLVM_VERSION >= 60
}
llvm::Function* CodeGenLLVM::DeclareFunction(const GlobalVar& gvar, const
PrimFunc& f) {
@@ -306,11 +288,7 @@ void CodeGenLLVM::AddFunctionInternal(const GlobalVar&
gvar, const PrimFunc& f)
if (is_restricted_) {
if (var.dtype().is_handle() && !alias_var_set_.count(var.get())) {
// set non alias.
-#if TVM_LLVM_VERSION >= 50
function_->addParamAttr(i, llvm::Attribute::NoAlias);
-#else
- function_->setDoesNotAlias(i + 1);
-#endif
}
}
}
@@ -320,7 +298,6 @@ void CodeGenLLVM::AddFunctionInternal(const GlobalVar&
gvar, const PrimFunc& f)
this->VisitStmt(f->body);
// Add alignment attribute if needed.
-#if TVM_LLVM_VERSION >= 50
for (size_t i = 0; i < f->params.size(); ++i) {
const Var& var = f->params[i];
auto f = alloc_storage_info_.find(var.get());
@@ -332,7 +309,6 @@ void CodeGenLLVM::AddFunctionInternal(const GlobalVar&
gvar, const PrimFunc& f)
}
}
}
-#endif
EmitDebugLocation(f->span);
@@ -491,7 +467,7 @@ void CodeGenLLVM::Optimize() {
mpass.run(*module_, mam);
}
-#else // TVM_LLVM_VERSION
+#else // TVM_LLVM_VERSION
class FPassManager : public llvm::legacy::FunctionPassManager {
public:
@@ -539,18 +515,12 @@ void CodeGenLLVM::Optimize() {
builder.OptLevel = 3;
}
-#if TVM_LLVM_VERSION >= 50
builder.Inliner = llvm::createFunctionInliningPass(builder.OptLevel, 0,
false);
-#else
- builder.Inliner = llvm::createFunctionInliningPass(builder.OptLevel, 0);
-#endif
builder.LoopVectorize = true;
builder.SLPVectorize = true;
this->InitPassManagerBuilder(&builder);
-#if TVM_LLVM_VERSION >= 50
tm->adjustPassManager(builder);
-#endif
builder.populateFunctionPassManager(fpass);
builder.populateModulePassManager(mpass);
@@ -611,18 +581,11 @@ llvm::Type* CodeGenLLVM::DTypeToLLVMType(const DataType&
dtype) const {
etype = llvm::Type::getIntNTy(*ctx, 4);
}
if (!dtype.is_scalar()) {
-#if TVM_LLVM_VERSION >= 110
if (dtype.is_scalable_vector()) {
return llvm::VectorType::get(etype, dtype.vscale_factor(), true);
} else {
return llvm::FixedVectorType::get(etype, dtype.lanes());
}
-#else
- TVM_FFI_ICHECK(!dtype.is_scalable_vector())
- << "Versions of LLVM < 11 do not support scalable vectors. Please
upgrade to a later "
- "version.";
- return llvm::VectorType::get(etype, dtype.lanes());
-#endif
} else {
return etype;
}
@@ -756,22 +719,13 @@ llvm::GlobalVariable*
CodeGenLLVM::AllocateSharedMemory(DataType dtype, size_t s
llvm::GlobalVariable* global =
new llvm::GlobalVariable(*module_, type, false, linkage,
llvm::UndefValue::get(type), "shmem",
nullptr, llvm::GlobalValue::NotThreadLocal,
shared_address_space);
-#if TVM_LLVM_VERSION >= 100
global->setAlignment(llvm::MaybeAlign(alignment));
-#else
- global->setAlignment(alignment);
-#endif
return global;
}
std::unique_ptr<CodeGenLLVM::DebugInfo>
CodeGenLLVM::CreateDebugInfo(llvm::Module* module) {
-#if TVM_LLVM_VERSION >= 100
auto debug_info = std::make_unique<CodeGenLLVM::DebugInfo>();
debug_info->di_builder_ = std::make_unique<llvm::DIBuilder>(*module);
-#else
- auto debug_info = llvm::make_unique<CodeGenLLVM::DebugInfo>();
- debug_info->di_builder_ = llvm::make_unique<llvm::DIBuilder>(*module);
-#endif
// TODO(tulloch): pass this information through Span classes to the IRModule
instance?
debug_info->file_ =
debug_info->di_builder_->createFile("IRModule.CodeGenLLVM", ".");
const int runtime_version = 0;
@@ -807,11 +761,7 @@ llvm::Value* CodeGenLLVM::CreateVecSlice(llvm::Value* vec,
int begin, int extent
llvm::Value* CodeGenLLVM::CreateVecFlip(llvm::Value* vec) {
int num_elems = GetVectorNumElements(vec);
-#if TVM_LLVM_VERSION >= 110
std::vector<int> indices;
-#else
- std::vector<unsigned> indices;
-#endif
for (int i = 0; i < num_elems; ++i) {
indices.push_back(num_elems - i - 1);
}
@@ -835,11 +785,7 @@ llvm::Value*
CodeGenLLVM::CreateVecConcat(std::vector<llvm::Value*> vecs) {
for (size_t i = 0, e = vecs.size(); i != e; ++i) {
llvm::Value* v = vecs[i];
if (!v->getType()->isVectorTy()) {
-#if TVM_LLVM_VERSION >= 110
llvm::Type* vec_ty = llvm::FixedVectorType::get(v->getType(), 1);
-#else
- llvm::Type* vec_ty = llvm::VectorType::get(v->getType(), 1);
-#endif
vecs[i] = builder_->CreateInsertElement(llvm::UndefValue::get(vec_ty),
v, ConstInt32(0));
}
}
@@ -863,11 +809,7 @@ llvm::Value*
CodeGenLLVM::CreateVecConcat(std::vector<llvm::Value*> vecs) {
rhs = CreateVecPad(rhs, lhs_lanes);
}
const size_t shared_lanes = std::max(lhs_lanes, rhs_lanes);
-#if TVM_LLVM_VERSION >= 110
std::vector<int> mask;
-#else
- std::vector<unsigned> mask;
-#endif
for (size_t i = 0; i < lhs_lanes; ++i) {
mask.push_back(i);
}
@@ -964,11 +906,7 @@ llvm::Constant*
CodeGenLLVM::GetGlobalConstant(llvm::Constant* const_data, const
llvm::Type* ty = const_data->getType();
llvm::GlobalVariable* global =
new llvm::GlobalVariable(*module_, ty, true, linkage_type, const_data,
name);
-#if TVM_LLVM_VERSION >= 100
global->setAlignment(llvm::Align(1));
-#else
- global->setAlignment(1);
-#endif
llvm::Constant* zero = ConstInt32(0);
llvm::Constant* indices[] = {zero, zero};
llvm::Constant* ptr = llvm::ConstantExpr::getGetElementPtr(ty, global,
indices);
@@ -1115,7 +1053,6 @@ llvm::Function*
CodeGenLLVM::GetIntrinsicDecl(llvm::Intrinsic::ID id, llvm::Type
llvm::Intrinsic::getIntrinsicInfoTableEntries(id, infos);
llvm::SmallVector<llvm::Type*, 4> overload_types;
-#if TVM_LLVM_VERSION >= 90
auto try_match = [&](llvm::FunctionType* f_ty, bool var_arg) {
overload_types.clear();
llvm::ArrayRef<llvm::Intrinsic::IITDescriptor> ref(infos);
@@ -1163,25 +1100,6 @@ llvm::Function*
CodeGenLLVM::GetIntrinsicDecl(llvm::Intrinsic::ID id, llvm::Type
}
// Failed to identify the type.
return nullptr;
-
-#else // TVM_LLVM_VERSION
- llvm::ArrayRef<llvm::Intrinsic::IITDescriptor> ref(infos);
- // matchIntrinsicType returns true on error.
- if (llvm::Intrinsic::matchIntrinsicType(ret_type, ref, overload_types)) {
- return nullptr;
- }
- for (llvm::Type* t : arg_types) {
- if (llvm::Intrinsic::matchIntrinsicType(t, ref, overload_types)) {
- return nullptr;
- }
- }
-#if TVM_LLVM_VERSION >= 200
- return llvm::cast<llvm::Function>(
- llvm::Intrinsic::getOrInsertDeclaration(module, id, overload_types));
-#else
- return llvm::Intrinsic::getDeclaration(module, id, overload_types);
-#endif
-#endif // TVM_LLVM_VERSION
}
void CodeGenLLVM::SetTargetAttributes(llvm::Function* func) {
@@ -1527,11 +1445,7 @@ llvm::Value* CodeGenLLVM::CreateIntrinsic(const
CallNode* op) {
llvm::Value* v0 = MakeValue(op->args[0]);
llvm::Value* v1 = MakeValue(op->args[1]);
int num_elems = GetVectorNumElements(v0) * 2;
-#if TVM_LLVM_VERSION >= 110
std::vector<int> indices;
-#else
- std::vector<unsigned> indices;
-#endif
for (int i = 0; i < num_elems; ++i) {
indices.push_back(i);
}
@@ -1548,7 +1462,6 @@ llvm::Value* CodeGenLLVM::CreateIntrinsic(const CallNode*
op) {
return builder_->CreateAssumption(cond);
} else if (op->op.same_as(builtin::tvm_thread_invariant())) {
return MakeValue(op->args[0]);
-#if TVM_LLVM_VERSION >= 110
} else if (op->op.same_as(builtin::vscale())) {
llvm::Intrinsic::ID id = llvm::Intrinsic::vscale;
llvm::Function* f = GetIntrinsicDecl(id, builder_->getInt32Ty(), {});
@@ -1558,7 +1471,6 @@ llvm::Value* CodeGenLLVM::CreateIntrinsic(const CallNode*
op) {
llvm::Function* f = GetIntrinsicDecl(id, DTypeToLLVMType(op->dtype),
{builder_->getInt32Ty(),
builder_->getInt32Ty()});
return builder_->CreateCall(f, {MakeValue(op->args[0]),
MakeValue(op->args[1])});
-#endif
} else {
TVM_FFI_THROW(InternalError) << "unknown intrinsic " << op->op;
}
@@ -1852,23 +1764,11 @@ llvm::Value* CodeGenLLVM::VisitExpr_(const
BufferLoadNode* op) {
if (predicate != nullptr) {
TVM_FFI_ICHECK(!is_volatile)
<< "The masked load intrinsic does not support declaring load as
volatile.";
-#if TVM_LLVM_VERSION >= 130
load = builder_->CreateMaskedLoad(buffer_ptr.type, buffer_ptr.addr,
llvm::Align(alignment),
predicate);
-#elif TVM_LLVM_VERSION >= 110
- load = builder_->CreateMaskedLoad(buffer_ptr.addr,
llvm::Align(alignment), predicate);
-#else
- load = builder_->CreateMaskedLoad(buffer_ptr.addr, alignment, predicate);
-#endif
} else {
-#if TVM_LLVM_VERSION >= 110
load = builder_->CreateAlignedLoad(buffer_ptr.type, buffer_ptr.addr,
llvm::Align(alignment),
is_volatile);
-#elif TVM_LLVM_VERSION >= 80
- load = builder_->CreateAlignedLoad(buffer_ptr.type, buffer_ptr.addr,
alignment, is_volatile);
-#else
- load = builder_->CreateAlignedLoad(buffer_ptr.addr, alignment,
is_volatile);
-#endif
}
loads.push_back(load);
@@ -1970,20 +1870,9 @@ llvm::Value* CodeGenLLVM::VisitExpr_(const
BroadcastNode* op) {
llvm::Constant* undef = llvm::UndefValue::get(type);
llvm::Constant* zero = ConstInt32(0);
value = builder_->CreateInsertElement(undef, value, zero);
-#if TVM_LLVM_VERSION >= 110
llvm::ElementCount ec =
-#if TVM_LLVM_VERSION >= 120
llvm::ElementCount::get(dtype.get_lanes_or_vscale_factor(),
dtype.is_scalable_vector());
-#else
- llvm::ElementCount(dtype.get_lanes_or_vscale_factor(),
dtype.is_scalable_vector());
-#endif
llvm::Constant* mask = llvm::ConstantVector::getSplat(ec, zero);
-#else
- TVM_FFI_ICHECK(!dtype.is_scalable_vector())
- << "Versions of LLVM < 11 do not support scalable vectors. Please
upgrade to a later "
- "version.";
- llvm::Constant* mask = llvm::ConstantVector::getSplat(dtype.lanes(), zero);
-#endif
return builder_->CreateShuffleVector(value, undef, mask);
}
@@ -2006,19 +1895,11 @@ void CodeGenLLVM::VisitStmt_(const BufferStoreNode* op)
{
if (predicate != nullptr) {
TVM_FFI_ICHECK(!is_volatile)
<< "The masked store intrinsic does not support declaring store as
volatile.";
-#if TVM_LLVM_VERSION >= 110
store =
builder_->CreateMaskedStore(to_store, buffer_ptr.addr,
llvm::Align(alignment), predicate);
-#else
- store = builder_->CreateMaskedStore(to_store, buffer_ptr.addr,
alignment, predicate);
-#endif
} else {
-#if TVM_LLVM_VERSION >= 110
store = builder_->CreateAlignedStore(to_store, buffer_ptr.addr,
llvm::Align(alignment),
is_volatile);
-#else
- store = builder_->CreateAlignedStore(to_store, buffer_ptr.addr,
alignment, is_volatile);
-#endif
}
return store;
};
@@ -2108,23 +1989,11 @@ void CodeGenLLVM::VisitStmt_(const AllocateNode* op) {
llvm::AllocaInst* alloca = WithFunctionEntry([&]() {
return builder_->CreateAlloca(DTypeToLLVMType(op->dtype),
ConstInt32(constant_size));
});
-#if TVM_LLVM_VERSION >= 110
auto alignment = static_cast<unsigned>(alloca->getAlign().value());
-#else
- unsigned alignment = alloca->getAlignment();
-#endif
if (alignment < static_cast<unsigned>(info.alignment)) {
-#if TVM_LLVM_VERSION >= 100
alloca->setAlignment(llvm::Align(info.alignment));
-#else
- alloca->setAlignment(info.alignment);
-#endif
}
-#if TVM_LLVM_VERSION >= 110
info.alignment = static_cast<unsigned>(alloca->getAlign().value());
-#else
- info.alignment = alloca->getAlignment();
-#endif
buf = alloca;
@@ -2224,7 +2093,6 @@ void CodeGenLLVM::VisitStmt_(const EvaluateNode* op) {
}
void CodeGenLLVM::EmitDebugLocation(const ffi::Optional<Span>& span) {
-#if TVM_LLVM_VERSION >= 50
if (di_subprogram_ == nullptr) {
// debug info is not always generated outside of CPU codegen
return;
@@ -2241,7 +2109,6 @@ void CodeGenLLVM::EmitDebugLocation(const
ffi::Optional<Span>& span) {
auto loc = llvm::DebugLoc(llvm::DILocation::get(*ctx, line, column,
di_subprogram_));
builder_->SetCurrentDebugLocation(loc);
-#endif
}
void CodeGenLLVM::EmitDebugLocation() {
builder_->SetCurrentDebugLocation(nullptr); }
@@ -2250,7 +2117,6 @@ void CodeGenLLVM::EmitDebugLocation(const StmtNode* op) {
EmitDebugLocation(op->
// Following Glow |DebugInfo::generateFunctionDebugInfo|, https://git.io/fjadv
void CodeGenLLVM::AddDebugInformation(llvm::Function* f_llvm,
const ffi::Array<Type>& tvm_param_types)
{
-#if TVM_LLVM_VERSION >= 50
TVM_FFI_ICHECK(di_subprogram_);
f_llvm->setSubprogram(di_subprogram_);
TVM_FFI_ICHECK_EQ(f_llvm->getSubprogram(), di_subprogram_);
@@ -2300,14 +2166,12 @@ void CodeGenLLVM::AddDebugInformation(llvm::Function*
f_llvm,
I.setDebugLoc(llvm::DebugLoc(di_loc));
}
}
-#endif
}
void CodeGenLLVM::AddDebugInformation(llvm::Value* llvm_value, const Var&
tir_var,
llvm::Instruction* insert_before) {
llvm_value->setName(tir_var->name_hint.c_str());
-#if TVM_LLVM_VERSION >= 50
if (!di_subprogram_) return;
auto dbg_dtype = GetDebugType(GetType(tir_var));
@@ -2318,7 +2182,6 @@ void CodeGenLLVM::AddDebugInformation(llvm::Value*
llvm_value, const Var& tir_va
auto* di_loc = llvm::DILocation::get(*llvm_target_->GetContext(), 0, 0,
di_subprogram_);
-#if TVM_LLVM_VERSION >= 150
// LLVM 15+ requires dbg_declare to reference pointer or integer types only.
// For non-pointer types (floats, vectors), use dbg_value instead to track
// the SSA value directly rather than a memory location.
@@ -2342,7 +2205,6 @@ void CodeGenLLVM::AddDebugInformation(llvm::Value*
llvm_value, const Var& tir_va
}
return;
}
-#endif
if (insert_before) {
#if TVM_LLVM_VERSION >= 200
@@ -2359,7 +2221,6 @@ void CodeGenLLVM::AddDebugInformation(llvm::Value*
llvm_value, const Var& tir_va
dbg_info_->di_builder_->createExpression(),
llvm::DebugLoc(di_loc),
builder_->GetInsertBlock());
}
-#endif
}
llvm::DIType* CodeGenLLVM::GetDebugType(const Type& ty_tir) {
diff --git a/src/target/llvm/codegen_llvm.h b/src/target/llvm/codegen_llvm.h
index e682581702..a14342db37 100644
--- a/src/target/llvm/codegen_llvm.h
+++ b/src/target/llvm/codegen_llvm.h
@@ -31,24 +31,15 @@
#include <llvm/IR/BasicBlock.h>
#include <llvm/IR/ConstantFolder.h>
#include <llvm/IR/Constants.h>
+#include <llvm/IR/DebugInfoMetadata.h>
#include <llvm/IR/DerivedTypes.h>
-#if TVM_LLVM_VERSION >= 150
#include <llvm/IR/FMF.h>
-#else
-#include <llvm/IR/Operator.h>
-#endif
-#include <llvm/IR/DebugInfoMetadata.h>
#include <llvm/IR/GlobalValue.h>
#include <llvm/IR/IRBuilder.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/Intrinsics.h>
-#include <llvm/Support/Casting.h>
-#if TVM_LLVM_VERSION >= 140
#include <llvm/MC/TargetRegistry.h>
-#else
-#include <llvm/Support/TargetRegistry.h>
-#endif
-
+#include <llvm/Support/Casting.h>
#include <tvm/arith/analyzer.h>
#include <tvm/ir/module.h>
#include <tvm/target/codegen.h>
@@ -509,13 +500,7 @@ class CodeGenLLVM : public ExprFunctor<llvm::Value*(const
PrimExpr&)>,
* \return The retrieved argument.
*/
llvm::Argument* GetArg(const llvm::Function* function, int i) const {
-#if TVM_LLVM_VERSION >= 100
return function->getArg(i);
-#elif TVM_LLVM_VERSION >= 50
- return const_cast<llvm::Argument*>(&function->arg_begin()[i]);
-#else
- return const_cast<llvm::Argument*>(&*std::next(function->arg_begin(), i));
-#endif
}
// The IRBuilder.
@@ -627,11 +612,7 @@ class CodeGenLLVM : public ExprFunctor<llvm::Value*(const
PrimExpr&)>,
};
inline int CodeGenLLVM::GetVectorNumElements(llvm::Value* vec) {
-#if TVM_LLVM_VERSION >= 120
return llvm::cast<llvm::FixedVectorType>(vec->getType())->getNumElements();
-#else
- return llvm::cast<llvm::VectorType>(vec->getType())->getNumElements();
-#endif
}
template <typename IterType, typename ConvType>
diff --git a/src/target/llvm/codegen_nvptx.cc b/src/target/llvm/codegen_nvptx.cc
index 4069f20d74..1b38ce1b75 100644
--- a/src/target/llvm/codegen_nvptx.cc
+++ b/src/target/llvm/codegen_nvptx.cc
@@ -30,22 +30,18 @@
#include <llvm/IR/InlineAsm.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/Intrinsics.h>
-#include <tvm/ffi/reflection/registry.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/IR/IntrinsicsNVPTX.h>
-#endif
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/IR/Metadata.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/Type.h>
#include <llvm/IRReader/IRReader.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/Support/Alignment.h>
-#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/Support/raw_ostream.h>
#include <llvm/Target/TargetMachine.h>
+#include <tvm/ffi/reflection/registry.h>
#if TVM_LLVM_VERSION < 170
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
#endif
@@ -110,17 +106,9 @@ class CodeGenNVPTX : public CodeGenLLVM {
llvm::AllocaInst* alloca = WithFunctionEntry([&]() {
return builder_->CreateAlloca(DTypeToLLVMType(op->dtype),
ConstInt32(constant_size));
});
-#if TVM_LLVM_VERSION >= 110
auto alignment = static_cast<unsigned>(alloca->getAlign().value());
-#else
- unsigned alignment = alloca->getAlignment();
-#endif
if (alignment < static_cast<unsigned>(info.alignment)) {
-#if TVM_LLVM_VERSION >= 100
alloca->setAlignment(llvm::Align(info.alignment));
-#else
- alloca->setAlignment(info.alignment);
-#endif
}
buf = alloca;
} else {
@@ -293,25 +281,11 @@ llvm::Value* CodeGenNVPTX::CreateIntrinsic(const
CallNode* op) {
llvm::Value* v0 = MakeValue(op->args[0]);
llvm::Value* v1 = MakeValue(op->args[1]);
if (op->args[1]->dtype.is_float()) {
-#if TVM_LLVM_VERSION >= 90
-#if TVM_LLVM_VERSION >= 130
return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::FAdd, v0, v1,
llvm::MaybeAlign(),
llvm::AtomicOrdering::Monotonic);
-#else
- return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::FAdd, v0, v1,
- llvm::AtomicOrdering::Monotonic);
-#endif
-#else
- TVM_FFI_THROW(InternalError) << "Floating point atomic requires LLVM 9
or newer";
-#endif
}
-#if TVM_LLVM_VERSION >= 130
return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::Add, v0, v1,
llvm::MaybeAlign(),
llvm::AtomicOrdering::Monotonic);
-#else
- return builder_->CreateAtomicRMW(llvm::AtomicRMWInst::Add, v0, v1,
- llvm::AtomicOrdering::Monotonic);
-#endif
}
return CodeGenLLVM::CreateIntrinsic(op);
}
@@ -359,15 +333,7 @@ ffi::Module BuildNVPTX(IRModule mod, Target target) {
std::string ll(data_ll.begin(), data_ll.end());
// emit ptx
llvm::legacy::PassManager pass;
-#if TVM_LLVM_VERSION <= 60
- TVM_FFI_ICHECK(tm->addPassesToEmitFile(pass, dest_ptx,
llvm::TargetMachine::CGFT_AssemblyFile) ==
- 0)
- << "Cannot emit target CGFT_ObjectFile";
-#elif TVM_LLVM_VERSION <= 90
- TVM_FFI_ICHECK(
- tm->addPassesToEmitFile(pass, dest_ptx, nullptr,
llvm::TargetMachine::CGFT_AssemblyFile) == 0)
- << "Cannot emit target CGFT_ObjectFile";
-#elif TVM_LLVM_VERSION <= 170
+#if TVM_LLVM_VERSION <= 170
TVM_FFI_ICHECK(tm->addPassesToEmitFile(pass, dest_ptx, nullptr,
llvm::CGFT_AssemblyFile) == 0)
<< "Cannot emit target CGFT_ObjectFile";
#else
diff --git a/src/target/llvm/codegen_x86_64.cc
b/src/target/llvm/codegen_x86_64.cc
index cd280d2ddc..dd54c511fb 100644
--- a/src/target/llvm/codegen_x86_64.cc
+++ b/src/target/llvm/codegen_x86_64.cc
@@ -26,12 +26,10 @@
#include <llvm/IR/DerivedTypes.h>
#include <llvm/IR/Function.h>
#include <llvm/IR/Intrinsics.h>
-#include <tvm/ffi/reflection/registry.h>
-#if TVM_LLVM_VERSION >= 100
#include <llvm/IR/IntrinsicsX86.h>
-#endif
#include <llvm/Support/Casting.h>
#include <tvm/ffi/function.h>
+#include <tvm/ffi/reflection/registry.h>
#include <string>
#include <vector>
@@ -74,18 +72,6 @@ llvm::Value* CodeGenX86_64::VisitExpr_(const CastNode* op) {
/*rounding-mode=*/MakeValue(IntImm(DataType::Int(32), 4)),
});
}
-
-#if TVM_LLVM_VERSION <= 100
- // The intrinsic x86_vcvtph2ps_256 was removed in LLVM 11.
- const auto has_f16c = llvm_target_->TargetHasCPUFeature("f16c");
-
- if (from.lanes() >= 8 && has_f16c) {
- return CallVectorIntrin(llvm::Intrinsic::x86_vcvtph2ps_256, 8,
- DTypeToLLVMType(DataType::Float(32,
from.lanes())),
- {MakeValue(tir::Call(DataType::Int(16,
from.lanes()),
-
tir::builtin::reinterpret(), {op->value}))});
- }
-#endif
}
return CodeGenCPU::VisitExpr_(op);
@@ -100,11 +86,7 @@ llvm::Value*
CodeGenX86_64::CallVectorIntrin(llvm::Intrinsic::ID id, size_t intr
#else
llvm::Function* f = llvm::Intrinsic::getDeclaration(module_.get(), id);
#endif
-#if TVM_LLVM_VERSION >= 120
size_t num_elems =
llvm::cast<llvm::FixedVectorType>(result_ty)->getNumElements();
-#else
- size_t num_elems = llvm::cast<llvm::VectorType>(result_ty)->getNumElements();
-#endif
if (intrin_lanes == num_elems) {
return builder_->CreateCall(f, args);
}
@@ -123,11 +105,7 @@ llvm::Value*
CodeGenX86_64::CallVectorIntrin(llvm::Intrinsic::ID id, size_t intr
split_args.push_back(v);
}
}
-#if TVM_LLVM_VERSION >= 110
llvm::Type* type = llvm::FixedVectorType::get(result_ty->getScalarType(),
intrin_lanes);
-#else
- llvm::Type* type = llvm::VectorType::get(result_ty->getScalarType(),
intrin_lanes);
-#endif
split_results.push_back(CallVectorIntrin(id, intrin_lanes, type,
split_args));
}
return CreateVecSlice(CreateVecConcat(split_results), 0, num_elems);
diff --git a/src/target/llvm/llvm_instance.cc b/src/target/llvm/llvm_instance.cc
index 12edafd6f0..48fa1de406 100644
--- a/src/target/llvm/llvm_instance.cc
+++ b/src/target/llvm/llvm_instance.cc
@@ -23,21 +23,13 @@
#include <llvm/ADT/ArrayRef.h>
#include <llvm/ADT/StringRef.h>
-#if TVM_LLVM_VERSION >= 150
#include <llvm/IR/FMF.h>
-#else
-#include <llvm/IR/Operator.h>
-#endif
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/Metadata.h>
#include <llvm/IR/Module.h>
#include <llvm/IRReader/IRReader.h>
#include <llvm/MC/MCSubtargetInfo.h>
-#if TVM_LLVM_VERSION >= 140
#include <llvm/MC/TargetRegistry.h>
-#else
-#include <llvm/Support/TargetRegistry.h>
-#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Support/CommandLine.h>
#include <llvm/Support/ErrorOr.h>
@@ -293,7 +285,6 @@ LLVMTargetInfo::LLVMTargetInfo(LLVMInstance& instance,
if (arch == llvm::Triple::riscv32 || arch == llvm::Triple::riscv64) {
// code model
code_model_ = llvm::CodeModel::Medium;
-#if TVM_LLVM_VERSION >= 140
// get VLEN from the LLVM backend (zvlXXXb)
ffi::Map<ffi::String, ffi::String> features = GetAllLLVMCpuFeatures();
// check vector ISA
@@ -312,13 +303,9 @@ LLVMTargetInfo::LLVMTargetInfo(LLVMInstance& instance,
}
}
}
-#endif
}
// Target options
-#if TVM_LLVM_VERSION < 50
- target_options_.LessPreciseFPMADOption = true;
-#endif
// In clang, these are fed from LangOpts which describe language specific
features
// TODO(AndrewZhaoLuo): figure out how these relate to fast math flags
target_options_.AllowFPOpFusion = llvm::FPOpFusion::Fast;
@@ -379,18 +366,11 @@ LLVMTargetInfo::LLVMTargetInfo(LLVMInstance& instance,
}
};
if (GetBoolFlag("fast-math")) {
-#if TVM_LLVM_VERSION >= 60
fast_math_flags_.setFast();
-#else
- fast_math_flags_.setUnsafeAlgebra();
-#endif
} else {
-#if TVM_LLVM_VERSION >= 50
// This option was added in 5.x, and has a boolean argument,
// unlike the rest of options at the time.
fast_math_flags_.setAllowContract(GetBoolFlag("fast-math-contract"));
-#endif
-#if TVM_LLVM_VERSION >= 70
fast_math_flags_.setNoNaNs(GetBoolFlag("fast-math-nnan"));
fast_math_flags_.setNoInfs(GetBoolFlag("fast-math-ninf"));
fast_math_flags_.setNoSignedZeros(GetBoolFlag("fast-math-nsz"));
@@ -398,17 +378,6 @@ LLVMTargetInfo::LLVMTargetInfo(LLVMInstance& instance,
fast_math_flags_.setAllowContract(GetBoolFlag("fast-math-contract"));
fast_math_flags_.setAllowReassoc(GetBoolFlag("fast-math-reassoc"));
fast_math_flags_.setApproxFunc(GetBoolFlag("fast-math-afn"));
-#else
- // LLVM 4.x, 5.x, and 6.x
- if (GetBoolFlag("fast-math-nnan")) fast_math_flags_.setNoNaNs();
- if (GetBoolFlag("fast-math-ninf")) fast_math_flags_.setNoInfs();
- if (GetBoolFlag("fast-math-nsz")) fast_math_flags_.setNoSignedZeros();
- if (GetBoolFlag("fast-math-arcp")) fast_math_flags_.setAllowReciprocal();
-#if TVM_LLVM_VERSION >= 60
- if (GetBoolFlag("fast-math-reassoc")) fast_math_flags_.setAllowReassoc();
- if (GetBoolFlag("fast-math-afn")) fast_math_flags_.setApproxFunc();
-#endif
-#endif
}
}
@@ -511,30 +480,19 @@ std::string LLVMTargetInfo::str() const {
}
bool do_individual = true;
-#if TVM_LLVM_VERSION >= 60
if (fast_math_flags_.isFast()) {
obj.Set(ffi::String("fast-math"), true);
do_individual = false;
}
-#else
- if (fast_math_flags_.unsafeAlgebra()) {
- obj.Set(ffi::String("fast-math"), true);
- do_individual = false;
- }
-#endif
if (do_individual) {
if (fast_math_flags_.noNaNs()) obj.Set(ffi::String("fast-math-nnan"),
true);
if (fast_math_flags_.noInfs()) obj.Set(ffi::String("fast-math-ninf"),
true);
if (fast_math_flags_.noSignedZeros())
obj.Set(ffi::String("fast-math-nsz"), true);
if (fast_math_flags_.allowReciprocal())
obj.Set(ffi::String("fast-math-arcp"), true);
-#if TVM_LLVM_VERSION >= 50
if (fast_math_flags_.allowContract())
obj.Set(ffi::String("fast-math-contract"), true);
-#endif
-#if TVM_LLVM_VERSION >= 60
if (fast_math_flags_.allowReassoc())
obj.Set(ffi::String("fast-math-reassoc"), true);
if (fast_math_flags_.approxFunc()) obj.Set(ffi::String("fast-math-afn"),
true);
-#endif
}
#if TVM_LLVM_VERSION <= 170
diff --git a/src/target/llvm/llvm_instance.h b/src/target/llvm/llvm_instance.h
index 7185475116..9fec366712 100644
--- a/src/target/llvm/llvm_instance.h
+++ b/src/target/llvm/llvm_instance.h
@@ -25,11 +25,7 @@
#ifdef TVM_LLVM_VERSION
#include <llvm/ADT/ArrayRef.h>
-#if TVM_LLVM_VERSION >= 150
#include <llvm/IR/FMF.h>
-#else
-#include <llvm/IR/Operator.h>
-#endif
#include <llvm/Support/CodeGen.h>
#include <llvm/Target/TargetOptions.h>
#include <tvm/ffi/container/array.h>
@@ -51,20 +47,8 @@
#define llvmGetPointerTo(arg, offset) (arg->getPointerTo(offset))
#endif
-#if TVM_LLVM_VERSION >= 130
#define llvmGetIntrinName(id) \
std::string(llvm::Intrinsic::getBaseName(static_cast<llvm::Intrinsic::ID>(id)))
-#elif TVM_LLVM_VERSION >= 40
-// This is the version of Intrinsic::getName that works for overloaded
-// intrinsics. Helpfully, if we provide no types to this function, it
-// will give us the overloaded name without the types appended. This
-// should be enough information for most uses.
-#define llvmGetIntrinName(id) \
- std::string(llvm::Intrinsic::getName(static_cast<llvm::Intrinsic::ID>(id),
{}))
-#else
-// Nothing to do, just return the intrinsic id number
-#define llvmGetIntrinName(id) std::to_string(id)
-#endif
namespace llvm {
class LLVMContext;
diff --git a/src/target/llvm/llvm_module.cc b/src/target/llvm/llvm_module.cc
index 4294c77c7e..ef10daff69 100644
--- a/src/target/llvm/llvm_module.cc
+++ b/src/target/llvm/llvm_module.cc
@@ -201,22 +201,11 @@ ffi::Optional<ffi::Function>
LLVMModuleNode::GetFunction(const ffi::String& name
}
namespace {
-#if TVM_LLVM_VERSION <= 70
-constexpr auto llvm_open_output_flag = llvm::sys::fs::F_None;
-#else
constexpr auto llvm_open_output_flag = llvm::sys::fs::OF_None;
-#endif
-#if TVM_LLVM_VERSION <= 60
-std::unique_ptr<llvm::Module> CloneLLVMModule(llvm::Module* mod) { return
llvm::CloneModule(mod); }
-#else
std::unique_ptr<llvm::Module> CloneLLVMModule(llvm::Module* mod) { return
llvm::CloneModule(*mod); }
-#endif
-#if TVM_LLVM_VERSION <= 90
-constexpr auto llvm_object_file_target = llvm::TargetMachine::CGFT_ObjectFile;
-constexpr auto llvm_assembly_file_target =
llvm::TargetMachine::CGFT_AssemblyFile;
-#elif TVM_LLVM_VERSION <= 170
+#if TVM_LLVM_VERSION <= 170
constexpr auto llvm_object_file_target = llvm::CGFT_ObjectFile;
constexpr auto llvm_assembly_file_target = llvm::CGFT_AssemblyFile;
#else
@@ -227,11 +216,7 @@ constexpr auto llvm_assembly_file_target =
llvm::CodeGenFileType::AssemblyFile;
bool LLVMAddPassesToEmitFile(llvm::TargetMachine* tm,
llvm::legacy::PassManager* pm,
llvm::raw_fd_ostream* dest,
decltype(llvm_object_file_target)
llvm_file_target) {
-#if TVM_LLVM_VERSION <= 60
- return tm->addPassesToEmitFile(*pm, *dest, llvm_file_target);
-#else
return tm->addPassesToEmitFile(*pm, *dest, nullptr, llvm_file_target);
-#endif
}
} // namespace
@@ -261,11 +246,7 @@ void LLVMModuleNode::WriteToFile(const ffi::String&
file_name_str,
} else if (fmt == "ll") {
module_->print(dest, nullptr);
} else if (fmt == "bc") {
-#if TVM_LLVM_VERSION <= 60
- llvm::WriteBitcodeToFile(module_, dest);
-#else
llvm::WriteBitcodeToFile(*module_, dest);
-#endif
} else {
TVM_FFI_THROW(InternalError) << "Do not know how to save file " <<
file_name
<< " with format=\'" << format << "\'";
@@ -285,21 +266,10 @@ ffi::String LLVMModuleNode::InspectSource(const
ffi::String& format) const {
if (fmt == "s" || fmt == "asm") {
With<LLVMTarget> llvm_target(*llvm_instance_,
LLVMTarget::GetTargetMetadata(*module_));
-#if TVM_LLVM_VERSION <= 60
- std::unique_ptr<llvm::Module> m = llvm::CloneModule(module_);
-#else
std::unique_ptr<llvm::Module> m = llvm::CloneModule(*module_);
-#endif
llvm::legacy::PassManager pass;
llvm::TargetMachine* tm = llvm_target->GetOrCreateTargetMachine();
-#if TVM_LLVM_VERSION <= 60
- TVM_FFI_ICHECK(tm->addPassesToEmitFile(pass, rso,
llvm::TargetMachine::CGFT_AssemblyFile) == 0)
- << "Cannot emit target CGFT_AssemblyFile";
-#elif TVM_LLVM_VERSION <= 90
- TVM_FFI_ICHECK(
- tm->addPassesToEmitFile(pass, rso, nullptr,
llvm::TargetMachine::CGFT_AssemblyFile) == 0)
- << "Cannot emit target CGFT_AssemblyFile";
-#elif TVM_LLVM_VERSION <= 170
+#if TVM_LLVM_VERSION <= 170
TVM_FFI_ICHECK(tm->addPassesToEmitFile(pass, rso, nullptr,
llvm::CGFT_AssemblyFile) == 0)
<< "Cannot emit target CGFT_AssemblyFile";
#else
@@ -512,7 +482,6 @@ void LLVMModuleNode::InitORCJIT() {
return std::make_unique<llvm::orc::TMOwningSimpleCompiler>(std::move(tm));
};
-#if TVM_LLVM_VERSION >= 130
// linker
const auto linkerBuilder =
#if TVM_LLVM_VERSION >= 210
@@ -549,17 +518,12 @@ void LLVMModuleNode::InitORCJIT() {
return ObjLinkingLayer;
#endif
}; // NOLINT(readability/braces)
-#endif
// create LLJIT
orcjit_ee_ = llvm::cantFail(llvm::orc::LLJITBuilder()
-#if TVM_LLVM_VERSION >= 110
.setDataLayout(layout)
-#endif
.setCompileFunctionCreator(compilerBuilder)
-#if TVM_LLVM_VERSION >= 130
.setObjectLinkingLayerCreator(linkerBuilder)
-#endif
.create());
TVM_FFI_ICHECK(orcjit_ee_ != nullptr) << "Failed to initialize LLVM ORCJIT
engine for "
@@ -626,11 +590,7 @@ void* LLVMModuleNode::GetGlobalAddr(const std::string&
name, const LLVMTarget& l
if (jit_engine_ == "mcjit") {
return reinterpret_cast<void*>(mcjit_ee_->getGlobalValueAddress(name));
} else if (jit_engine_ == "orcjit") {
-#if TVM_LLVM_VERSION >= 150
auto addr = llvm::cantFail(orcjit_ee_->lookup(name)).getValue();
-#else
- auto addr = llvm::cantFail(orcjit_ee_->lookup(name)).getAddress();
-#endif
return reinterpret_cast<void*>(addr);
} else {
TVM_FFI_THROW(InternalError) << "Either `mcjit` or `orcjit` are not
initialized.";
@@ -646,11 +606,7 @@ void* LLVMModuleNode::GetFunctionAddr(const std::string&
name,
if (jit_engine_ == "mcjit") {
return reinterpret_cast<void*>(mcjit_ee_->getFunctionAddress(name));
} else if (jit_engine_ == "orcjit") {
-#if TVM_LLVM_VERSION >= 150
auto addr = llvm::cantFail(orcjit_ee_->lookup(name)).getValue();
-#else
- auto addr = llvm::cantFail(orcjit_ee_->lookup(name)).getAddress();
-#endif
return reinterpret_cast<void*>(addr);
} else {
TVM_FFI_THROW(InternalError) << "Either `mcjit` or `orcjit` are not
initialized.";
@@ -698,7 +654,6 @@ static void LLVMReflectionRegister() {
[](int64_t id) -> ffi::String { return llvmGetIntrinName(id); })
.def("target.llvm_get_system_x86_vendor",
[]() -> ffi::String {
-#if TVM_LLVM_VERSION >= 120
#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) ||
defined(_M_X64)
using namespace llvm::sys::detail::x86;
const auto x86_sign = getVendorSignature();
@@ -708,7 +663,6 @@ static void LLVMReflectionRegister() {
return "amd";
else if (x86_sign == VendorSignatures::UNKNOWN)
return "unknown";
-#endif
#endif
return "unimplemented";
})
diff --git a/tests/cpp/target/canonicalizer/arm_aprofile_test.cc
b/tests/cpp/target/canonicalizer/arm_aprofile_test.cc
index 73c0e6c291..89dd0f7a3b 100644
--- a/tests/cpp/target/canonicalizer/arm_aprofile_test.cc
+++ b/tests/cpp/target/canonicalizer/arm_aprofile_test.cc
@@ -42,7 +42,6 @@ static float optionalDotProd[] = {8.2, 8.3};
static float optionalSME[] = {9.2, 9.3};
static bool CheckArchitectureAvailability() {
-#if TVM_LLVM_VERSION > 120
auto llvm_instance = std::make_unique<codegen::LLVMInstance>();
codegen::LLVMTargetInfo llvm_backend(*llvm_instance, "llvm");
ffi::Array<ffi::String> targets = llvm_backend.GetAllLLVMTargets();
@@ -55,7 +54,6 @@ static bool CheckArchitectureAvailability() {
if (expected_target_count >= 2) {
return true;
}
-#endif
return false;
}
static bool has_aarch64_and_arm_targets = CheckArchitectureAvailability();
diff --git a/tests/cpp/tir_scalable_datatype.cc
b/tests/cpp/tir_scalable_datatype.cc
index f8f453bdbc..19e94e2677 100644
--- a/tests/cpp/tir_scalable_datatype.cc
+++ b/tests/cpp/tir_scalable_datatype.cc
@@ -184,7 +184,6 @@ TEST(ScalableDataType, TestScalableUInt) {
// -----------
// Integration
// -----------
-#if TVM_LLVM_VERSION >= 130
TEST(ScalableDataType, TestScalableIntrinCall) {
tvm::DataType scalable_type = tvm::DataType(kDLInt, 32, 4, true);
tvm::tir::Call call =
@@ -203,7 +202,6 @@ TEST(ScalableDataType, TestScalableIntrinCall) {
"T.call_llvm_intrin(\"int32xvscalex4\",
\"llvm.experimental.stepvector\")");
#endif
}
-#endif
TEST(ScalableDataType, TestTIRScriptScalableDtype2Str) {
tvm::DataType scalable_type = tvm::DataType(kDLInt, 32, 4, true);