forked from OSchip/llvm-project
Add a helper for telling whether a type is a pointer or vector of pointer type.
Simplify the implementation of the corresponding integer and float functions and move them inline while there. llvm-svn: 167014
This commit is contained in:
parent
6a9bb51a8d
commit
3ce427c039
|
@ -153,7 +153,7 @@ public:
|
|||
/// isPPC_FP128Ty - Return true if this is powerpc long double.
|
||||
bool isPPC_FP128Ty() const { return getTypeID() == PPC_FP128TyID; }
|
||||
|
||||
/// isFloatingPointTy - Return true if this is one of the five floating point
|
||||
/// isFloatingPointTy - Return true if this is one of the six floating point
|
||||
/// types
|
||||
bool isFloatingPointTy() const {
|
||||
return getTypeID() == HalfTyID || getTypeID() == FloatTyID ||
|
||||
|
@ -167,7 +167,7 @@ public:
|
|||
|
||||
/// isFPOrFPVectorTy - Return true if this is a FP type or a vector of FP.
|
||||
///
|
||||
bool isFPOrFPVectorTy() const;
|
||||
bool isFPOrFPVectorTy() const { return getScalarType()->isFloatingPointTy(); }
|
||||
|
||||
/// isLabelTy - Return true if this is 'label'.
|
||||
bool isLabelTy() const { return getTypeID() == LabelTyID; }
|
||||
|
@ -185,7 +185,7 @@ public:
|
|||
/// isIntOrIntVectorTy - Return true if this is an integer type or a vector of
|
||||
/// integer types.
|
||||
///
|
||||
bool isIntOrIntVectorTy() const;
|
||||
bool isIntOrIntVectorTy() const { return getScalarType()->isIntegerTy(); }
|
||||
|
||||
/// isFunctionTy - True if this is an instance of FunctionType.
|
||||
///
|
||||
|
@ -203,6 +203,11 @@ public:
|
|||
///
|
||||
bool isPointerTy() const { return getTypeID() == PointerTyID; }
|
||||
|
||||
/// isPtrOrPtrVectorTy - Return true if this is a pointer type or a vector of
|
||||
/// pointer types.
|
||||
///
|
||||
bool isPtrOrPtrVectorTy() const { return getScalarType()->isPointerTy(); }
|
||||
|
||||
/// isVectorTy - True if this is an instance of VectorType.
|
||||
///
|
||||
bool isVectorTy() const { return getTypeID() == VectorTyID; }
|
||||
|
@ -293,6 +298,7 @@ public:
|
|||
|
||||
/// getScalarType - If this is a vector type, return the element type,
|
||||
/// otherwise return 'this'.
|
||||
const Type *getScalarType() const;
|
||||
Type *getScalarType();
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
|
|
@ -47,35 +47,17 @@ Type *Type::getScalarType() {
|
|||
return this;
|
||||
}
|
||||
|
||||
const Type *Type::getScalarType() const {
|
||||
if (const VectorType *VTy = dyn_cast<VectorType>(this))
|
||||
return VTy->getElementType();
|
||||
return this;
|
||||
}
|
||||
|
||||
/// isIntegerTy - Return true if this is an IntegerType of the specified width.
|
||||
bool Type::isIntegerTy(unsigned Bitwidth) const {
|
||||
return isIntegerTy() && cast<IntegerType>(this)->getBitWidth() == Bitwidth;
|
||||
}
|
||||
|
||||
/// isIntOrIntVectorTy - Return true if this is an integer type or a vector of
|
||||
/// integer types.
|
||||
///
|
||||
bool Type::isIntOrIntVectorTy() const {
|
||||
if (isIntegerTy())
|
||||
return true;
|
||||
if (getTypeID() != Type::VectorTyID) return false;
|
||||
|
||||
return cast<VectorType>(this)->getElementType()->isIntegerTy();
|
||||
}
|
||||
|
||||
/// isFPOrFPVectorTy - Return true if this is a FP type or a vector of FP types.
|
||||
///
|
||||
bool Type::isFPOrFPVectorTy() const {
|
||||
if (getTypeID() == Type::HalfTyID || getTypeID() == Type::FloatTyID ||
|
||||
getTypeID() == Type::DoubleTyID ||
|
||||
getTypeID() == Type::FP128TyID || getTypeID() == Type::X86_FP80TyID ||
|
||||
getTypeID() == Type::PPC_FP128TyID)
|
||||
return true;
|
||||
if (getTypeID() != Type::VectorTyID) return false;
|
||||
|
||||
return cast<VectorType>(this)->getElementType()->isFloatingPointTy();
|
||||
}
|
||||
|
||||
// canLosslesslyBitCastTo - Return true if this type can be converted to
|
||||
// 'Ty' without any reinterpretation of bits. For example, i8* to i32*.
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue