diff options
author | Chris Lattner <sabre@nondot.org> | 2012-01-26 00:01:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2012-01-26 00:01:10 +0000 |
commit | 6e3abaa77f916341ed000b1a3883aec563967a88 (patch) | |
tree | 8787da886968682f2890a0093d8ae3929f725ff4 | |
parent | 83694a984c153a0d78dcfb47d464c9a1561c22ef (diff) | |
download | llvm-6e3abaa77f916341ed000b1a3883aec563967a88.tar.gz llvm-6e3abaa77f916341ed000b1a3883aec563967a88.tar.bz2 llvm-6e3abaa77f916341ed000b1a3883aec563967a88.tar.xz |
Ok, break down and add some cast<>'ing helper methods to the Type class
to reduce the number of cast<>'s we have. This allows someone to use
things like Ty->getVectorNumElements() instead of
cast<VectorType>(Ty)->getNumElements() when you know that a type is a
vector.
It would be a great general cleanup to move the codebase to use these,
I will do so in the code I'm touching.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148999 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Type.h | 26 | ||||
-rw-r--r-- | lib/VMCore/Type.cpp | 39 |
2 files changed, 65 insertions, 0 deletions
diff --git a/include/llvm/Type.h b/include/llvm/Type.h index e7c165b1bf..d3b2f1383f 100644 --- a/include/llvm/Type.h +++ b/include/llvm/Type.h @@ -315,6 +315,32 @@ public: unsigned getNumContainedTypes() const { return NumContainedTys; } //===--------------------------------------------------------------------===// + // 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 + // only intended to cover the core methods that are frequently used, helper + // methods should not be added here. + + unsigned getIntegerBitWidth() const; + + Type *getFunctionParamType(unsigned i) const; + unsigned getFunctionNumParams() const; + bool isFunctionVarArg() const; + + // TODO: StructType + + Type *getSequentialElementType() const; + + uint64_t getArrayNumElements() const; + Type *getArrayElementType() const { return getSequentialElementType(); } + + unsigned getVectorNumElements() const; + Type *getVectorElementType() const { return getSequentialElementType(); } + + unsigned getPointerAddressSpace() const; + Type *getPointerElementType() const { return getSequentialElementType(); } + + //===--------------------------------------------------------------------===// // Static members exported by the Type class itself. Useful for getting // instances of Type. // diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index 7edd9e63f5..627f6452c6 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -198,6 +198,45 @@ bool Type::isSizedDerivedType() const { } //===----------------------------------------------------------------------===// +// Subclass Helper Methods +//===----------------------------------------------------------------------===// + +unsigned Type::getIntegerBitWidth() const { + return cast<IntegerType>(this)->getBitWidth(); +} + +bool Type::isFunctionVarArg() const { + return cast<FunctionType>(this)->isVarArg(); +} + +Type *Type::getFunctionParamType(unsigned i) const { + return cast<FunctionType>(this)->getParamType(i); +} + +unsigned Type::getFunctionNumParams() const { + return cast<FunctionType>(this)->getNumParams(); +} + +Type *Type::getSequentialElementType() const { + return cast<SequentialType>(this)->getElementType(); +} + +uint64_t Type::getArrayNumElements() const { + return cast<ArrayType>(this)->getNumElements(); +} + +unsigned Type::getVectorNumElements() const { + return cast<VectorType>(this)->getNumElements(); +} + +unsigned Type::getPointerAddressSpace() const { + return cast<PointerType>(this)->getAddressSpace(); +} + + + + +//===----------------------------------------------------------------------===// // Primitive 'Type' data //===----------------------------------------------------------------------===// |