Add support for tracking whether a module is 64/32 bit and big/little endian

Also add a moduleID field which can be used for diagnostics


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5834 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2003-04-22 18:02:04 +00:00
parent baf0607cbc
commit 678c6a089d
2 changed files with 30 additions and 9 deletions

View File

@ -50,16 +50,22 @@ public:
typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
enum Endianness { LittleEndian, BigEndian };
enum PointerSize { Pointer32, Pointer64 };
private: private:
GlobalListType GlobalList; // The Global Variables GlobalListType GlobalList; // The Global Variables in the module
FunctionListType FunctionList; // The Functions FunctionListType FunctionList; // The Functions in the module
GlobalValueRefMap *GVRefMap; // Keep track of GlobalValueRef's
SymbolTable *SymTab; // Symbol Table for the module
std::string ModuleID; // Human readable identifier for the module
GlobalValueRefMap *GVRefMap; // These flags are probably not the right long-term way to handle this kind of
// target information, but it is sufficient for now.
Endianness Endian; // True if target is little endian
PointerSize PtrSize; // True if target has 32-bit pointers (false = 64-bit)
SymbolTable *SymTab; // Accessor for the underlying GVRefMap... only through the Constant class...
// Accessor for the underlying GlobalValRefMap... only through the
// Constant class...
friend class Constant; friend class Constant;
friend class ConstantPointerRef; friend class ConstantPointerRef;
void mutateConstantPointerRef(GlobalValue *OldGV, GlobalValue *NewGV); void mutateConstantPointerRef(GlobalValue *OldGV, GlobalValue *NewGV);
@ -67,9 +73,23 @@ private:
void destroyConstantPointerRef(ConstantPointerRef *CPR); void destroyConstantPointerRef(ConstantPointerRef *CPR);
public: public:
Module(); Module(const std::string &ModuleID);
~Module(); ~Module();
const std::string &getModuleIdentifier() const { return ModuleID; }
/// Target endian information...
bool isLittleEndian() const { return Endian == LittleEndian; }
bool isBigEndian() const { return Endian == BigEndian; }
Endianness getEndianness() const { return Endian; }
void setEndianness(Endianness E) { Endian = E; }
/// Target Pointer Size information...
bool has32BitPointers() const { return PtrSize == Pointer32; }
bool has64BitPointers() const { return PtrSize == Pointer64; }
PointerSize getPointerSize() const { return PtrSize; }
void setPointerSize(PointerSize PS) { PtrSize = PS; }
/// getOrInsertFunction - Look up the specified function in the module symbol /// getOrInsertFunction - Look up the specified function in the module symbol
/// table. If it does not exist, add a prototype for the function and return /// table. If it does not exist, add a prototype for the function and return
/// it. /// it.

View File

@ -52,7 +52,8 @@ struct GlobalValueRefMap {
}; };
Module::Module() { Module::Module(const std::string &MID)
: ModuleID(MID), Endian(BigEndian), PtrSize(Pointer64) {
FunctionList.setItemParent(this); FunctionList.setItemParent(this);
FunctionList.setParent(this); FunctionList.setParent(this);
GlobalList.setItemParent(this); GlobalList.setItemParent(this);