Add two methods which have been needed for a long time: Type::get(Un)signedVersion

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12522 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-03-26 21:43:22 +00:00
parent 40bdfe5554
commit e3651f00e8
2 changed files with 45 additions and 1 deletions

View File

@ -212,9 +212,18 @@ public:
///
unsigned getPrimitiveSize() const;
/// getUnsignedVersion - If this is an integer type, return the unsigned
/// variant of this type. For example int -> uint.
const Type *getUnsignedVersion() const;
/// getSignedVersion - If this is an integer type, return the signed variant
/// of this type. For example uint -> int.
const Type *getSignedVersion() const;
/// getForwaredType - Return the type that this type has been resolved to if
/// it has been resolved to anything. This is used to implement the
/// union-find algorithm for type resolution.
/// union-find algorithm for type resolution, and shouldn't be used by general
/// purpose clients.
const Type *getForwardedType() const {
if (!ForwardType) return 0;
return getForwardedTypeInternal();

View File

@ -113,6 +113,41 @@ bool Type::isLosslesslyConvertibleTo(const Type *Ty) const {
}
}
/// getUnsignedVersion - If this is an integer type, return the unsigned
/// variant of this type. For example int -> uint.
const Type *Type::getUnsignedVersion() const {
switch (getPrimitiveID()) {
default:
assert(isInteger()&&"Type::getUnsignedVersion is only valid for integers!");
case Type::UByteTyID:
case Type::SByteTyID: return Type::UByteTy;
case Type::UShortTyID:
case Type::ShortTyID: return Type::UShortTy;
case Type::UIntTyID:
case Type::IntTyID: return Type::UIntTy;
case Type::ULongTyID:
case Type::LongTyID: return Type::ULongTy;
}
}
/// getSignedVersion - If this is an integer type, return the signed variant
/// of this type. For example uint -> int.
const Type *Type::getSignedVersion() const {
switch (getPrimitiveID()) {
default:
assert(isInteger() && "Type::getSignedVersion is only valid for integers!");
case Type::UByteTyID:
case Type::SByteTyID: return Type::SByteTy;
case Type::UShortTyID:
case Type::ShortTyID: return Type::ShortTy;
case Type::UIntTyID:
case Type::IntTyID: return Type::IntTy;
case Type::ULongTyID:
case Type::LongTyID: return Type::LongTy;
}
}
// getPrimitiveSize - Return the basic size of this type if it is a primitive
// type. These are fixed by LLVM and are not target dependent. This will
// return zero if the type does not have a size or is not a primitive type.