mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
tblgen: Move mini Type hierarchy to LLVM-style RTTI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165648 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -15,13 +15,25 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/CodeGen/ValueTypes.h"
|
#include "llvm/CodeGen/ValueTypes.h"
|
||||||
|
#include "llvm/Support/Casting.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
class Type {
|
class Type {
|
||||||
|
protected:
|
||||||
|
enum TypeKind {
|
||||||
|
TK_ExtendedIntegerType,
|
||||||
|
TK_ExtendedVectorType
|
||||||
|
};
|
||||||
|
private:
|
||||||
|
TypeKind Kind;
|
||||||
public:
|
public:
|
||||||
|
TypeKind getKind() const {
|
||||||
|
return Kind;
|
||||||
|
}
|
||||||
|
Type(TypeKind K) : Kind(K) {}
|
||||||
virtual unsigned getSizeInBits() const = 0;
|
virtual unsigned getSizeInBits() const = 0;
|
||||||
virtual ~Type() {}
|
virtual ~Type() {}
|
||||||
};
|
};
|
||||||
@@ -32,7 +44,10 @@ class ExtendedIntegerType : public Type {
|
|||||||
unsigned BitWidth;
|
unsigned BitWidth;
|
||||||
public:
|
public:
|
||||||
explicit ExtendedIntegerType(unsigned bits)
|
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 {
|
unsigned getSizeInBits() const {
|
||||||
return getBitWidth();
|
return getBitWidth();
|
||||||
}
|
}
|
||||||
@@ -46,7 +61,10 @@ class ExtendedVectorType : public Type {
|
|||||||
unsigned NumElements;
|
unsigned NumElements;
|
||||||
public:
|
public:
|
||||||
ExtendedVectorType(EVT elty, unsigned num)
|
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 {
|
unsigned getSizeInBits() const {
|
||||||
return getNumElements() * getElementType().getSizeInBits();
|
return getNumElements() * getElementType().getSizeInBits();
|
||||||
}
|
}
|
||||||
@@ -71,12 +89,12 @@ bool EVT::isExtendedFloatingPoint() const {
|
|||||||
|
|
||||||
bool EVT::isExtendedInteger() const {
|
bool EVT::isExtendedInteger() const {
|
||||||
assert(isExtended() && "Type is not extended!");
|
assert(isExtended() && "Type is not extended!");
|
||||||
return dynamic_cast<const ExtendedIntegerType *>(LLVMTy) != 0;
|
return isa<ExtendedIntegerType>(LLVMTy);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EVT::isExtendedVector() const {
|
bool EVT::isExtendedVector() const {
|
||||||
assert(isExtended() && "Type is not extended!");
|
assert(isExtended() && "Type is not extended!");
|
||||||
return dynamic_cast<const ExtendedVectorType *>(LLVMTy) != 0;
|
return isa<ExtendedVectorType>(LLVMTy);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EVT::isExtended64BitVector() const {
|
bool EVT::isExtended64BitVector() const {
|
||||||
|
Reference in New Issue
Block a user