forked from OSchip/llvm-project
tblgen: Move mini Type hierarchy to LLVM-style RTTI.
llvm-svn: 165648
This commit is contained in:
parent
88eb8dd4ed
commit
c0a9e39d0a
|
@ -15,13 +15,25 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/CodeGen/ValueTypes.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include <map>
|
||||
using namespace llvm;
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class Type {
|
||||
protected:
|
||||
enum TypeKind {
|
||||
TK_ExtendedIntegerType,
|
||||
TK_ExtendedVectorType
|
||||
};
|
||||
private:
|
||||
TypeKind Kind;
|
||||
public:
|
||||
TypeKind getKind() const {
|
||||
return Kind;
|
||||
}
|
||||
Type(TypeKind K) : Kind(K) {}
|
||||
virtual unsigned getSizeInBits() const = 0;
|
||||
virtual ~Type() {}
|
||||
};
|
||||
|
@ -32,7 +44,10 @@ class ExtendedIntegerType : public Type {
|
|||
unsigned BitWidth;
|
||||
public:
|
||||
explicit ExtendedIntegerType(unsigned bits)
|
||||
: BitWidth(bits) {}
|
||||
: Type(TK_ExtendedIntegerType), BitWidth(bits) {}
|
||||
static bool classof(const Type *T) {
|
||||
return T->getKind() == TK_ExtendedIntegerType;
|
||||
};
|
||||
unsigned getSizeInBits() const {
|
||||
return getBitWidth();
|
||||
}
|
||||
|
@ -46,7 +61,10 @@ class ExtendedVectorType : public Type {
|
|||
unsigned NumElements;
|
||||
public:
|
||||
ExtendedVectorType(EVT elty, unsigned num)
|
||||
: ElementType(elty), NumElements(num) {}
|
||||
: Type(TK_ExtendedVectorType), ElementType(elty), NumElements(num) {}
|
||||
static bool classof(const Type *T) {
|
||||
return T->getKind() == TK_ExtendedVectorType;
|
||||
};
|
||||
unsigned getSizeInBits() const {
|
||||
return getNumElements() * getElementType().getSizeInBits();
|
||||
}
|
||||
|
@ -71,12 +89,12 @@ bool EVT::isExtendedFloatingPoint() const {
|
|||
|
||||
bool EVT::isExtendedInteger() const {
|
||||
assert(isExtended() && "Type is not extended!");
|
||||
return dynamic_cast<const ExtendedIntegerType *>(LLVMTy) != 0;
|
||||
return isa<ExtendedIntegerType>(LLVMTy);
|
||||
}
|
||||
|
||||
bool EVT::isExtendedVector() const {
|
||||
assert(isExtended() && "Type is not extended!");
|
||||
return dynamic_cast<const ExtendedVectorType *>(LLVMTy) != 0;
|
||||
return isa<ExtendedVectorType>(LLVMTy);
|
||||
}
|
||||
|
||||
bool EVT::isExtended64BitVector() const {
|
||||
|
|
Loading…
Reference in New Issue