#define LLVM_DERIVED_TYPES_H
#include "llvm/Type.h"
-#include "llvm/ADT/SmallVector.h"
namespace llvm {
void dump() const { Type::dump(); }
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const DerivedType *T) { return true; }
+ static inline bool classof(const DerivedType *) { return true; }
static inline bool classof(const Type *T) {
return T->isDerivedType();
}
/// getBitMask - Return a bitmask with ones set for all of the bits
/// that can be set by an unsigned version of this type. This is 0xFF for
- /// sbyte/ubyte, 0xFFFF for shorts, etc.
+ /// i8, 0xFFFF for i16, etc.
uint64_t getBitMask() const {
return ~uint64_t(0UL) >> (64-getBitWidth());
}
bool isPowerOf2ByteWidth() const;
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const IntegerType *T) { return true; }
+ static inline bool classof(const IntegerType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == IntegerTyID;
}
const FunctionType &operator=(const FunctionType &); // Do not implement
FunctionType(const Type *Result, const std::vector<const Type*> &Params,
bool IsVarArgs);
- FunctionType(const Type *Result, const SmallVectorImpl<const Type*> &Params,
- bool IsVarArgs);
public:
/// FunctionType::get - This static method is the primary way of constructing
const std::vector<const Type*> &Params, ///< The types of the parameters
bool isVarArg ///< Whether this is a variable argument length function
);
-
- static FunctionType *get(
- const Type *Result, ///< The result type
- const SmallVectorImpl<const Type*> &Params, ///< The types of the parameters
- bool isVarArg ///< Whether this is a variable argument length function
- );
+
+ /// isValidReturnType - Return true if the specified type is valid as a return
+ /// type.
+ static bool isValidReturnType(const Type *RetTy);
inline bool isVarArg() const { return isVarArgs; }
inline const Type *getReturnType() const { return ContainedTys[0]; }
virtual void typeBecameConcrete(const DerivedType *AbsTy);
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const FunctionType *T) { return true; }
+ static inline bool classof(const FunctionType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == FunctionTyID;
}
/// the element.
///
virtual const Type *getTypeAtIndex(const Value *V) const = 0;
+ virtual const Type *getTypeAtIndex(unsigned Idx) const = 0;
virtual bool indexValid(const Value *V) const = 0;
+ virtual bool indexValid(unsigned Idx) const = 0;
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const CompositeType *T) { return true; }
+ static inline bool classof(const CompositeType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == ArrayTyID ||
T->getTypeID() == StructTyID ||
static StructType *get(const std::vector<const Type*> &Params,
bool isPacked=false);
+ /// StructType::get - This static method is a convenience method for
+ /// creating structure types by specifying the elements as arguments.
+ /// Note that this method always returns a non-packed struct. To get
+ /// an empty struct, pass NULL, NULL.
+ static StructType *get(const Type *type, ...) END_WITH_NULL;
+
// Iterator access to the elements
typedef Type::subtype_iterator element_iterator;
element_iterator element_begin() const { return ContainedTys; }
/// getTypeAtIndex - Given an index value into the type, return the type of
/// the element. For a structure type, this must be a constant value...
///
- virtual const Type *getTypeAtIndex(const Value *V) const ;
+ virtual const Type *getTypeAtIndex(const Value *V) const;
+ virtual const Type *getTypeAtIndex(unsigned Idx) const;
virtual bool indexValid(const Value *V) const;
+ virtual bool indexValid(unsigned Idx) const;
// Implement the AbstractTypeUser interface.
virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
virtual void typeBecameConcrete(const DerivedType *AbsTy);
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const StructType *T) { return true; }
+ static inline bool classof(const StructType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == StructTyID;
}
inline const Type *getElementType() const { return ContainedTys[0]; }
virtual bool indexValid(const Value *V) const;
+ virtual bool indexValid(unsigned) const {
+ return true;
+ }
/// getTypeAtIndex - Given an index value into the type, return the type of
/// the element. For sequential types, there is only one subtype...
///
- virtual const Type *getTypeAtIndex(const Value *V) const {
+ virtual const Type *getTypeAtIndex(const Value *) const {
+ return ContainedTys[0];
+ }
+ virtual const Type *getTypeAtIndex(unsigned) const {
return ContainedTys[0];
}
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const SequentialType *T) { return true; }
+ static inline bool classof(const SequentialType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == ArrayTyID ||
T->getTypeID() == PointerTyID ||
virtual void typeBecameConcrete(const DerivedType *AbsTy);
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const ArrayType *T) { return true; }
+ static inline bool classof(const ArrayType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == ArrayTyID;
}
///
static VectorType *get(const Type *ElementType, unsigned NumElements);
+ /// VectorType::getInteger - This static method gets a VectorType with the
+ /// same number of elements as the input type, and the element type is an
+ /// integer type of the same width as the input element type.
+ ///
+ static VectorType *getInteger(const VectorType *VTy) {
+ unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
+ const Type *EltTy = IntegerType::get(EltBits);
+ return VectorType::get(EltTy, VTy->getNumElements());
+ }
+
/// @brief Return the number of elements in the Vector type.
inline unsigned getNumElements() const { return NumElements; }
virtual void typeBecameConcrete(const DerivedType *AbsTy);
// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const VectorType *T) { return true; }
+ static inline bool classof(const VectorType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == VectorTyID;
}
virtual void typeBecameConcrete(const DerivedType *AbsTy);
// Implement support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const PointerType *T) { return true; }
+ static inline bool classof(const PointerType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == PointerTyID;
}
}
// Implement support for type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const OpaqueType *T) { return true; }
+ static inline bool classof(const OpaqueType *) { return true; }
static inline bool classof(const Type *T) {
return T->getTypeID() == OpaqueTyID;
}