mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Add two methods which have been needed for a long time: Type::get(Un)signedVersion
llvm-svn: 12522
This commit is contained in:
parent
10669f3dc3
commit
b34cfff038
@ -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();
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user