// The vector type that is stored may be different from the
// eventual type stored to memory.
auto VectorTy = cast<llvm::VectorType>(Ops.back()->getType());
- auto MemoryTy =
- llvm::VectorType::get(MemEltTy, VectorTy->getVectorElementCount());
+ auto MemoryTy = llvm::VectorType::get(MemEltTy, VectorTy->getElementCount());
Value *Predicate = EmitSVEPredicateCast(Ops[0], MemoryTy);
Value *BasePtr = Builder.CreateBitCast(Ops[1], MemoryTy->getPointerTo());
}
};
-unsigned Type::getVectorNumElements() const {
- return cast<VectorType>(this)->getNumElements();
-}
-
-bool Type::getVectorIsScalable() const {
- return cast<VectorType>(this)->isScalable();
-}
-
-ElementCount Type::getVectorElementCount() const {
- return cast<VectorType>(this)->getElementCount();
-}
-
bool Type::isVectorTy() const { return isa<VectorType>(this); }
/// Class to represent pointers.
isIntOrIntVectorTy() &&
"Original type expected to be a vector of integers or a scalar integer.");
Type *NewType = getIntNTy(getContext(), NewBitWidth);
- if (isVectorTy())
- NewType = VectorType::get(NewType, getVectorElementCount());
+ if (auto *VTy = dyn_cast<VectorType>(this))
+ NewType = VectorType::get(NewType, VTy->getElementCount());
return NewType;
}
return cast<PointerType>(getScalarType())->getAddressSpace();
}
+Type *Type::getScalarType() const {
+ if (isVectorTy())
+ return cast<VectorType>(this)->getElementType();
+ return const_cast<Type *>(this);
+}
+
} // end namespace llvm
#endif // LLVM_IR_DERIVEDTYPES_H
/// If this is a vector type, return the element type, otherwise return
/// 'this'.
- Type *getScalarType() const {
- if (isVectorTy())
- return getVectorElementType();
- return const_cast<Type*>(this);
- }
+ inline Type *getScalarType() const;
//===--------------------------------------------------------------------===//
// Type Iteration support.
//===--------------------------------------------------------------------===//
// Helper methods corresponding to subclass methods. This forces a cast to
- // the specified subclass and calls its accessor. "getVectorNumElements" (for
- // example) is shorthand for cast<VectorType>(Ty)->getNumElements(). This is
+ // the specified subclass and calls its accessor. "getArrayNumElements" (for
+ // example) is shorthand for cast<ArrayType>(Ty)->getNumElements(). This is
// only intended to cover the core methods that are frequently used, helper
// methods should not be added here.
return ContainedTys[0];
}
- inline bool getVectorIsScalable() const;
- inline unsigned getVectorNumElements() const;
- inline ElementCount getVectorElementCount() const;
- Type *getVectorElementType() const {
- assert(getTypeID() == VectorTyID);
- return ContainedTys[0];
- }
-
Type *getPointerElementType() const {
assert(getTypeID() == PointerTyID);
return ContainedTys[0];
if (!RewriteGEP && Ops.size() == 2)
return false;
- unsigned NumElts = Ptr->getType()->getVectorNumElements();
+ unsigned NumElts = cast<VectorType>(Ptr->getType())->getNumElements();
IRBuilder<> Builder(MemoryInst);
Base = SDB->getValue(C);
- unsigned NumElts = Ptr->getType()->getVectorNumElements();
+ unsigned NumElts = cast<VectorType>(Ptr->getType())->getNumElements();
EVT VT = EVT::getVectorVT(*DAG.getContext(), TLI.getPointerTy(DL), NumElts);
Index = DAG.getConstant(0, SDB->getCurSDLoc(), VT);
IndexType = ISD::SIGNED_SCALED;
if (MaskParamPos.hasValue()) {
Type *MaskParamType = F.getArg(MaskParamPos.getValue())->getType();
ASSERT_TRUE(MaskParamType->isVectorTy());
- ASSERT_TRUE(MaskParamType->getVectorElementType()->isIntegerTy(1));
+ ASSERT_TRUE(cast<VectorType>(MaskParamType)->getElementType()->isIntegerTy(1));
}
Optional<int> VecLenParamPos =