merge several fields in GlobalValue to use the same word, move CallingConv

field into SubclassData in Value.  This shrinks GlobalVAlue from 48->40
bytes, Function from 88->76, and GlobalVariable from 76->68.  This trims
4640 bytes off my testcase, reading a bc file without materializing any
functions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36192 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-04-17 04:31:29 +00:00
parent 15b7823006
commit 18feb92e91
3 changed files with 13 additions and 11 deletions

View File

@ -69,7 +69,10 @@ private:
ArgumentListType ArgumentList; ///< The formal arguments
ValueSymbolTable *SymTab; ///< Symbol table of args/instructions
ParamAttrsList *ParamAttrs; ///< Parameter attributes
unsigned CallingConvention; ///< Calling convention to use
// The Calling Convention is stored in Value::SubclassData.
/*unsigned CallingConvention;*/
friend class SymbolTableListTraits<Function, Module>;
@ -113,8 +116,8 @@ public:
/// getCallingConv()/setCallingConv(uint) - These method get and set the
/// calling convention of this function. The enum values for the known
/// calling conventions are defined in CallingConv.h.
unsigned getCallingConv() const { return CallingConvention; }
void setCallingConv(unsigned CC) { CallingConvention = CC; }
unsigned getCallingConv() const { return SubclassData; }
void setCallingConv(unsigned CC) { SubclassData = CC; }
/// Obtains a constant pointer to the ParamAttrsList object which holds the
/// parameter attributes information, if any.

View File

@ -29,7 +29,7 @@ class GlobalValue : public Constant {
public:
/// @brief An enumeration for the kinds of linkage for global values.
enum LinkageTypes {
ExternalLinkage, ///< Externally visible function
ExternalLinkage = 0,///< Externally visible function
LinkOnceLinkage, ///< Keep one copy of function when linking (inline)
WeakLinkage, ///< Keep one copy of named function when linking (weak)
AppendingLinkage, ///< Special purpose, only applies to global arrays
@ -42,8 +42,8 @@ public:
/// @brief An enumeration for the kinds of visibility of global values.
enum VisibilityTypes {
DefaultVisibility, ///< The GV is visible
HiddenVisibility ///< The GV is hidden
DefaultVisibility = 0, ///< The GV is visible
HiddenVisibility ///< The GV is hidden
};
protected:
@ -55,10 +55,10 @@ protected:
}
Module *Parent;
LinkageTypes Linkage; // The linkage of this global
VisibilityTypes Visibility; // The visibility style of this global
unsigned Alignment; // Alignment of this symbol, must be power of two
std::string Section; // Section to emit this into, empty mean default
LinkageTypes Linkage : 4; // The linkage of this global
VisibilityTypes Visibility : 1; // The visibility style of this global
unsigned Alignment : 16; // Alignment of this symbol, must be power of two
std::string Section; // Section to emit this into, empty mean default
public:
~GlobalValue() {
removeDeadConstantUsers(); // remove any dead constants using this.

View File

@ -142,7 +142,6 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
const std::string &name, Module *ParentModule)
: GlobalValue(PointerType::get(Ty), Value::FunctionVal, 0, 0, Linkage, name) {
ParamAttrs = 0;
CallingConvention = 0;
SymTab = new ValueSymbolTable();
assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy)