Skip to content

Commit

Permalink
[LLVM] VectorType::get with two parameters is deprecated in LLVM 11+ (a…
Browse files Browse the repository at this point in the history
…pache#5984)

In LLVM 11+ the distinction between fixed and scalable vector types
has become more explicit. Before the introduction of scalable vector
types VectorType::get(e,n) created what is now a fixed vector type.
With the addition of scalable types, it is recommended to use
FixedVectorType and ScalableVectorType classes directly. Alternatively,
there is a VectorType::get that accepts a 3rd parameter indicating
whether the type should be fixed or scalable.
Using the older VectorType::get that implicitly assumes the fixed type
is deprecated and LLVM now generates a warning.

Change calls to VectorType::get to FixedVectorType::get to avoid
compilation warnings.
  • Loading branch information
Krzysztof Parzyszek authored and Trevor Morris committed Jul 14, 2020
1 parent 395313a commit 37ca901
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
11 changes: 10 additions & 1 deletion src/target/llvm/codegen_llvm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,11 @@ llvm::Type* CodeGenLLVM::DTypeToLLVMType(const DataType& dtype) const {
}
}
if (dtype.lanes() != 1) {
#if TVM_LLVM_VERSION >= 110
return llvm::FixedVectorType::get(etype, dtype.lanes());
#else
return llvm::VectorType::get(etype, dtype.lanes());
#endif
} else {
return etype;
}
Expand Down Expand Up @@ -453,7 +457,12 @@ std::unique_ptr<CodeGenLLVM::DebugInfo> CodeGenLLVM::CreateDebugInfo(llvm::Modul
}

llvm::Value* CodeGenLLVM::CreateBroadcast(llvm::Value* value, int lanes) {
llvm::Constant* undef = llvm::UndefValue::get(llvm::VectorType::get(value->getType(), lanes));
#if TVM_LLVM_VERSION >= 110
llvm::Type* type = llvm::FixedVectorType::get(value->getType(), lanes);
#else
llvm::Type* type = llvm::VectorType::get(value->getType(), lanes);
#endif
llvm::Constant* undef = llvm::UndefValue::get(type);
llvm::Constant* zero = ConstInt32(0);
value = builder_->CreateInsertElement(undef, value, zero);
#if TVM_LLVM_VERSION >= 110
Expand Down
10 changes: 6 additions & 4 deletions src/target/llvm/codegen_x86_64.cc
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ llvm::Value* CodeGenX86_64::VisitExpr_(const CastNode* op) {

llvm::Value* CodeGenX86_64::CallVectorIntrin(llvm::Intrinsic::ID id, size_t intrin_lanes,
llvm::Type* result_ty,

const std::vector<llvm::Value*>& args) {
llvm::Function* f = llvm::Intrinsic::getDeclaration(module_.get(), id, {});
size_t num_elems = llvm::cast<llvm::VectorType>(result_ty)->getNumElements();
Expand All @@ -137,9 +136,12 @@ llvm::Value* CodeGenX86_64::CallVectorIntrin(llvm::Intrinsic::ID id, size_t intr
split_args.push_back(v);
}
}
split_results.push_back(CallVectorIntrin(
id, intrin_lanes, llvm::VectorType::get(result_ty->getScalarType(), intrin_lanes),
split_args));
#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);
}
Expand Down

0 comments on commit 37ca901

Please sign in to comment.