1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

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:
Duncan Sands 2012-10-30 13:38:54 +00:00
parent 2df331332d
commit db410bd2b6
2 changed files with 15 additions and 27 deletions

View File

@ -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();
//===--------------------------------------------------------------------===//

View File

@ -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*.
//