diff options
author | Christopher Tetreault <ctetreau@quicinc.com> | 2020-08-27 10:39:18 -0700 |
---|---|---|
committer | Christopher Tetreault <ctetreau@quicinc.com> | 2020-08-27 11:16:10 -0700 |
commit | 5a55e2781ca9178900f875b86d8a1416e8001f73 (patch) | |
tree | 8f62ad6522cd0f3fa9afca9be4395afcc058f248 /llvm/lib/IR/Constants.cpp | |
parent | e53b799779b079a70f600e5cad2ab7267d66b1b7 (diff) | |
download | llvm-5a55e2781ca9178900f875b86d8a1416e8001f73.zip llvm-5a55e2781ca9178900f875b86d8a1416e8001f73.tar.gz llvm-5a55e2781ca9178900f875b86d8a1416e8001f73.tar.bz2 |
[SVE] Remove calls to VectorType::getNumElements from IR
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D81500
Diffstat (limited to 'llvm/lib/IR/Constants.cpp')
-rw-r--r-- | llvm/lib/IR/Constants.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp index 1cd2ced..8d960ea 100644 --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -161,7 +161,7 @@ bool Constant::isNotOneValue() const { // Check that vectors don't contain 1 if (auto *VTy = dyn_cast<VectorType>(this->getType())) { - unsigned NumElts = VTy->getNumElements(); + unsigned NumElts = cast<FixedVectorType>(VTy)->getNumElements(); for (unsigned i = 0; i != NumElts; ++i) { Constant *Elt = this->getAggregateElement(i); if (!Elt || !Elt->isNotOneValue()) @@ -211,7 +211,7 @@ bool Constant::isNotMinSignedValue() const { // Check that vectors don't contain INT_MIN if (auto *VTy = dyn_cast<VectorType>(this->getType())) { - unsigned NumElts = VTy->getNumElements(); + unsigned NumElts = cast<FixedVectorType>(VTy)->getNumElements(); for (unsigned i = 0; i != NumElts; ++i) { Constant *Elt = this->getAggregateElement(i); if (!Elt || !Elt->isNotMinSignedValue()) @@ -227,7 +227,7 @@ bool Constant::isNotMinSignedValue() const { bool Constant::isFiniteNonZeroFP() const { if (auto *CFP = dyn_cast<ConstantFP>(this)) return CFP->getValueAPF().isFiniteNonZero(); - auto *VTy = dyn_cast<VectorType>(getType()); + auto *VTy = dyn_cast<FixedVectorType>(getType()); if (!VTy) return false; for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { @@ -306,7 +306,15 @@ bool Constant::isElementWiseEqual(Value *Y) const { bool Constant::containsUndefElement() const { if (auto *VTy = dyn_cast<VectorType>(getType())) { - for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) + if (isa<UndefValue>(this)) + return true; + if (isa<ConstantAggregateZero>(this)) + return false; + if (isa<ScalableVectorType>(getType())) + return false; + + for (unsigned i = 0, e = cast<FixedVectorType>(VTy)->getNumElements(); + i != e; ++i) if (isa<UndefValue>(getAggregateElement(i))) return true; } @@ -315,7 +323,7 @@ bool Constant::containsUndefElement() const { } bool Constant::containsConstantExpression() const { - if (auto *VTy = dyn_cast<VectorType>(getType())) { + if (auto *VTy = dyn_cast<FixedVectorType>(getType())) { for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) if (isa<ConstantExpr>(getAggregateElement(i))) return true; @@ -1029,7 +1037,7 @@ unsigned ConstantAggregateZero::getNumElements() const { if (auto *AT = dyn_cast<ArrayType>(Ty)) return AT->getNumElements(); if (auto *VT = dyn_cast<VectorType>(Ty)) - return VT->getNumElements(); + return cast<FixedVectorType>(VT)->getNumElements(); return Ty->getStructNumElements(); } @@ -1064,7 +1072,7 @@ unsigned UndefValue::getNumElements() const { if (auto *AT = dyn_cast<ArrayType>(Ty)) return AT->getNumElements(); if (auto *VT = dyn_cast<VectorType>(Ty)) - return VT->getNumElements(); + return cast<FixedVectorType>(VT)->getNumElements(); return Ty->getStructNumElements(); } @@ -1246,7 +1254,7 @@ Constant *ConstantStruct::get(StructType *ST, ArrayRef<Constant*> V) { ConstantVector::ConstantVector(VectorType *T, ArrayRef<Constant *> V) : ConstantAggregate(T, ConstantVectorVal, V) { - assert(V.size() == T->getNumElements() && + assert(V.size() == cast<FixedVectorType>(T)->getNumElements() && "Invalid initializer for constant vector"); } @@ -2004,8 +2012,8 @@ Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy, "PtrToInt destination must be integer or integer vector"); assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); if (isa<VectorType>(C->getType())) - assert(cast<VectorType>(C->getType())->getNumElements() == - cast<VectorType>(DstTy)->getNumElements() && + assert(cast<FixedVectorType>(C->getType())->getNumElements() == + cast<FixedVectorType>(DstTy)->getNumElements() && "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::PtrToInt, C, DstTy, OnlyIfReduced); } @@ -2018,8 +2026,8 @@ Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy, "IntToPtr destination must be a pointer or pointer vector"); assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); if (isa<VectorType>(C->getType())) - assert(cast<VectorType>(C->getType())->getNumElements() == - cast<VectorType>(DstTy)->getNumElements() && + assert(cast<VectorType>(C->getType())->getElementCount() == + cast<VectorType>(DstTy)->getElementCount() && "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::IntToPtr, C, DstTy, OnlyIfReduced); } @@ -2050,7 +2058,8 @@ Constant *ConstantExpr::getAddrSpaceCast(Constant *C, Type *DstTy, Type *MidTy = PointerType::get(DstElemTy, SrcScalarTy->getAddressSpace()); if (VectorType *VT = dyn_cast<VectorType>(DstTy)) { // Handle vectors of pointers. - MidTy = FixedVectorType::get(MidTy, VT->getNumElements()); + MidTy = FixedVectorType::get(MidTy, + cast<FixedVectorType>(VT)->getNumElements()); } C = getBitCast(C, MidTy); } @@ -2692,7 +2701,7 @@ bool ConstantDataSequential::isElementTypeCompatible(Type *Ty) { unsigned ConstantDataSequential::getNumElements() const { if (ArrayType *AT = dyn_cast<ArrayType>(getType())) return AT->getNumElements(); - return cast<VectorType>(getType())->getNumElements(); + return cast<FixedVectorType>(getType())->getNumElements(); } |