X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FDerivedTypes.h;h=6013c265f0b1700ae86c76722d30231ef4408736;hb=2c783e46c3480c7fa8b91b10610a8e0d92e33ccd;hp=21ff3d690f8c0c718e4e1f193ed1deb2afed8cd1;hpb=423c2260f95883f7c84ac962e58ac66c3a11efac;p=oota-llvm.git diff --git a/include/llvm/DerivedTypes.h b/include/llvm/DerivedTypes.h index 21ff3d690f8..6013c265f0b 100644 --- a/include/llvm/DerivedTypes.h +++ b/include/llvm/DerivedTypes.h @@ -31,6 +31,7 @@ class PointerValType; class VectorValType; class IntegerValType; class APInt; +class ParamAttrsList; class DerivedType : public Type { friend class Type; @@ -137,22 +138,6 @@ public: /// FunctionType - Class to represent function types /// class FunctionType : public DerivedType { -public: - /// Function parameters can have attributes to indicate how they should be - /// treated by optimizations and code generation. This enumeration lists the - /// set of possible attributes. - /// @brief Function parameter attributes enumeration. - enum ParameterAttributes { - NoAttributeSet = 0, ///< No attribute value has been set - ZExtAttribute = 1, ///< zero extended before/after call - SExtAttribute = 1 << 1, ///< sign extended before/after call - NoReturnAttribute = 1 << 2, ///< mark the function as not returning - InRegAttribute = 1 << 3, ///< force argument to be passed in register - StructRetAttribute= 1 << 4, ///< hidden pointer to structure to return - NoUnwindAttribute = 1 << 5 ///< Function doesn't unwind stack - }; - typedef std::vector ParamAttrsList; -private: friend class TypeMap; bool isVarArgs; ParamAttrsList *ParamAttrs; @@ -160,7 +145,7 @@ private: FunctionType(const FunctionType &); // Do not implement const FunctionType &operator=(const FunctionType &); // Do not implement FunctionType(const Type *Result, const std::vector &Params, - bool IsVarArgs, const ParamAttrsList &Attrs); + bool IsVarArgs, ParamAttrsList *Attrs = 0); public: /// FunctionType::get - This static method is the primary way of constructing @@ -170,18 +155,19 @@ public: const Type *Result, ///< The result type const std::vector &Params, ///< The types of the parameters bool isVarArg, ///< Whether this is a variable argument length function - const ParamAttrsList & Attrs = ParamAttrsList() + ParamAttrsList *Attrs = 0 ///< Indicates the parameter attributes to use, if any. The 0th entry ///< in the list refers to the return type. Parameters are numbered - ///< starting at 1. + ///< starting at 1. This argument must be on the heap and FunctionType + ///< owns it after its passed here. ); inline bool isVarArg() const { return isVarArgs; } inline const Type *getReturnType() const { return ContainedTys[0]; } - typedef std::vector::const_iterator param_iterator; - param_iterator param_begin() const { return ContainedTys.begin()+1; } - param_iterator param_end() const { return ContainedTys.end(); } + typedef Type::subtype_iterator param_iterator; + param_iterator param_begin() const { return ContainedTys + 1; } + param_iterator param_end() const { return &ContainedTys[NumContainedTys]; } // Parameter type accessors... const Type *getParamType(unsigned i) const { return ContainedTys[i+1]; } @@ -189,30 +175,15 @@ public: /// getNumParams - Return the number of fixed parameters this function type /// requires. This does not consider varargs. /// - unsigned getNumParams() const { return unsigned(ContainedTys.size()-1); } + unsigned getNumParams() const { return NumContainedTys - 1; } - bool isStructReturn() const { - return (getNumParams() && paramHasAttr(1, StructRetAttribute)); - } + bool isStructReturn() const; /// The parameter attributes for the \p ith parameter are returned. The 0th /// parameter refers to the return type of the function. /// @returns The ParameterAttributes for the \p ith parameter. /// @brief Get the attributes for a parameter - ParameterAttributes getParamAttrs(unsigned i) const; - - /// @brief Determine if a parameter attribute is set - bool paramHasAttr(unsigned i, ParameterAttributes attr) const { - return getParamAttrs(i) & attr; - } - - /// @brief Return the number of parameter attributes this type has. - unsigned getNumAttrs() const { - return (ParamAttrs ? unsigned(ParamAttrs->size()) : 0); - } - - /// @brief Convert a ParameterAttribute into its assembly text - static std::string getParamAttrsText(ParameterAttributes Attr); + const ParamAttrsList *getParamAttrs() const { return ParamAttrs; } // Implement the AbstractTypeUser interface. virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy); @@ -265,14 +236,14 @@ public: bool isPacked=false); // Iterator access to the elements - typedef std::vector::const_iterator element_iterator; - element_iterator element_begin() const { return ContainedTys.begin(); } - element_iterator element_end() const { return ContainedTys.end(); } + typedef Type::subtype_iterator element_iterator; + element_iterator element_begin() const { return ContainedTys; } + element_iterator element_end() const { return &ContainedTys[NumContainedTys];} // Random access to the elements - unsigned getNumElements() const { return unsigned(ContainedTys.size()); } + unsigned getNumElements() const { return NumContainedTys; } const Type *getElementType(unsigned N) const { - assert(N < ContainedTys.size() && "Element number out of range!"); + assert(N < NumContainedTys && "Element number out of range!"); return ContainedTys[N]; } @@ -305,12 +276,14 @@ public: /// components out in memory identically. /// class SequentialType : public CompositeType { + PATypeHandle ContainedType; ///< Storage for the single contained type SequentialType(const SequentialType &); // Do not implement! const SequentialType &operator=(const SequentialType &); // Do not implement! protected: - SequentialType(TypeID TID, const Type *ElType) : CompositeType(TID) { - ContainedTys.reserve(1); - ContainedTys.push_back(PATypeHandle(ElType, this)); + SequentialType(TypeID TID, const Type *ElType) + : CompositeType(TID), ContainedType(ElType, this) { + ContainedTys = &ContainedType; + NumContainedTys = 1; } public: