Skip to content

Commit 4b03597

Browse files
Krzysztof Parzyszekdhruvaray
authored andcommitted
[LLVM] Replace calls to Type::getVectorNumElements (apache#5398)
This function has recently been removed from LLVM 11. Use alternative way to obtain vector element count (VectorType::getNumElements) which works for all LLVM versions.
1 parent 697327c commit 4b03597

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

src/target/llvm/codegen_llvm.cc

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ llvm::Value* CodeGenLLVM::CreateBroadcast(llvm::Value* value, int lanes) {
474474
}
475475

476476
llvm::Value* CodeGenLLVM::CreateVecSlice(llvm::Value* vec, int begin, int extent) {
477-
int num_elems = static_cast<int>(vec->getType()->getVectorNumElements());
477+
int num_elems = llvm::cast<llvm::VectorType>(vec->getType())->getNumElements();
478478
if (extent == num_elems && begin == 0) return vec;
479479
CHECK(begin >= 0 && extent <= num_elems) << "Slicing out of bound!\n";
480480
std::vector<llvm::Constant*> indices;
@@ -490,7 +490,7 @@ llvm::Value* CodeGenLLVM::CreateVecSlice(llvm::Value* vec, int begin, int extent
490490
}
491491

492492
llvm::Value* CodeGenLLVM::CreateVecFlip(llvm::Value* vec) {
493-
int num_elems = static_cast<int>(vec->getType()->getVectorNumElements());
493+
int num_elems = llvm::cast<llvm::VectorType>(vec->getType())->getNumElements();
494494
#if TVM_LLVM_VERSION >= 110
495495
std::vector<int> indices;
496496
#else
@@ -505,7 +505,7 @@ llvm::Value* CodeGenLLVM::CreateVecFlip(llvm::Value* vec) {
505505
llvm::Value* CodeGenLLVM::CreateVecPad(llvm::Value* vec, int target_lanes) {
506506
llvm::Value* mask = llvm::UndefValue::get(
507507
DTypeToLLVMType(DataType::Int(32, target_lanes)));
508-
int num_elems = static_cast<int>(vec->getType()->getVectorNumElements());
508+
int num_elems = llvm::cast<llvm::VectorType>(vec->getType())->getNumElements();
509509
if (num_elems == target_lanes) return vec;
510510
CHECK_LT(num_elems, target_lanes);
511511
for (int i = 0; i < num_elems; ++i) {
@@ -519,16 +519,15 @@ llvm::Value* CodeGenLLVM::CreateVecConcat(std::vector<llvm::Value*> vecs) {
519519
int total_lanes = 0;
520520

521521
for (llvm::Value* v : vecs) {
522-
total_lanes += static_cast<int>(
523-
v->getType()->getVectorNumElements());
522+
total_lanes += llvm::cast<llvm::VectorType>(v->getType())->getNumElements();
524523
}
525524
while (vecs.size() > 1) {
526525
std::vector<llvm::Value*> new_vecs;
527526
for (size_t i = 0; i < vecs.size() - 1; i += 2) {
528527
llvm::Value* lhs = vecs[i];
529528
llvm::Value* rhs = vecs[i + 1];
530-
const size_t lhs_lanes = lhs->getType()->getVectorNumElements();
531-
const size_t rhs_lanes = rhs->getType()->getVectorNumElements();
529+
const size_t lhs_lanes = llvm::cast<llvm::VectorType>(lhs->getType())->getNumElements();
530+
const size_t rhs_lanes = llvm::cast<llvm::VectorType>(rhs->getType())->getNumElements();
532531
if (lhs_lanes < rhs_lanes) {
533532
lhs = CreateVecPad(lhs, rhs_lanes);
534533
} else if (rhs_lanes < lhs_lanes) {
@@ -870,16 +869,16 @@ llvm::Value* CodeGenLLVM::CreateIntrinsic(const CallNode* op) {
870869
return builder_->CreateFCmpUNO(a, a);
871870
} else if (op->is_intrinsic("vectorlow")) {
872871
llvm::Value *v = MakeValue(op->args[0]);
873-
int l = v->getType()->getVectorNumElements();
872+
int l = llvm::cast<llvm::VectorType>(v->getType())->getNumElements();
874873
return CreateVecSlice(v, 0, l/2);
875874
} else if (op->is_intrinsic("vectorhigh")) {
876875
llvm::Value *v = MakeValue(op->args[0]);
877-
int l = v->getType()->getVectorNumElements();
876+
int l = llvm::cast<llvm::VectorType>(v->getType())->getNumElements();
878877
return CreateVecSlice(v, l/2, l/2);
879878
} else if (op->is_intrinsic("vectorcombine")) {
880879
llvm::Value *v0 = MakeValue(op->args[0]);
881880
llvm::Value *v1 = MakeValue(op->args[1]);
882-
int num_elems = static_cast<int>(v0->getType()->getVectorNumElements()) * 2;
881+
int num_elems = llvm::cast<llvm::VectorType>(v0->getType())->getNumElements() * 2;
883882
#if TVM_LLVM_VERSION >= 110
884883
std::vector<int> indices;
885884
#else

src/target/llvm/codegen_x86_64.cc

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,21 +123,20 @@ llvm::Value* CodeGenX86_64::CallVectorIntrin(llvm::Intrinsic::ID id, size_t intr
123123

124124
const std::vector<llvm::Value*>& args) {
125125
llvm::Function* f = llvm::Intrinsic::getDeclaration(module_.get(), id, {});
126-
if (intrin_lanes == result_ty->getVectorNumElements()) {
126+
size_t num_elems = llvm::cast<llvm::VectorType>(result_ty)->getNumElements();
127+
if (intrin_lanes == num_elems) {
127128
return builder_->CreateCall(f, args);
128129
}
129130

130131
// Otherwise, we split the vector into intrin_lanes sized elements (widening where necessary),
131132
// compute each result, and then concatenate the vectors (slicing the result if necessary).
132-
CHECK_LT(intrin_lanes, result_ty->getVectorNumElements());
133+
CHECK_LT(intrin_lanes, num_elems);
133134
std::vector<llvm::Value*> split_results;
134-
for (size_t i = 0;
135-
i < static_cast<size_t>(result_ty->getVectorNumElements());
136-
i += intrin_lanes) {
135+
for (size_t i = 0; i < num_elems; i += intrin_lanes) {
137136
std::vector<llvm::Value*> split_args;
138137
for (const auto& v : args) {
139138
if (v->getType()->isVectorTy()) {
140-
CHECK_EQ(v->getType()->getVectorNumElements(), result_ty->getVectorNumElements());
139+
CHECK_EQ(llvm::cast<llvm::VectorType>(v->getType())->getNumElements(), num_elems);
141140
split_args.push_back(CreateVecSlice(v, i, intrin_lanes));
142141
} else {
143142
split_args.push_back(v);
@@ -147,7 +146,7 @@ llvm::Value* CodeGenX86_64::CallVectorIntrin(llvm::Intrinsic::ID id, size_t intr
147146
id, intrin_lanes, llvm::VectorType::get(result_ty->getScalarType(), intrin_lanes),
148147
split_args));
149148
}
150-
return CreateVecSlice(CreateVecConcat(split_results), 0, result_ty->getVectorNumElements());
149+
return CreateVecSlice(CreateVecConcat(split_results), 0, num_elems);
151150
}
152151

153152
TVM_REGISTER_GLOBAL("tvm.codegen.llvm.target_x86-64")

0 commit comments

Comments
 (0)