For PR761:
authorReid Spencer <rspencer@reidspencer.com>
Fri, 26 Jan 2007 08:10:24 +0000 (08:10 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Fri, 26 Jan 2007 08:10:24 +0000 (08:10 +0000)
Remove the Endianness and PointerSize fields from the ModuleHeader and
replace it with the DataLayout field.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33529 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bytecode/Reader/Analyzer.cpp
lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Writer/Writer.cpp

index 465e3b053e96f9c380235f8b10cd937091849b89..c86db26a920c7cb9ed6157f69310e967ca6181e6 100644 (file)
@@ -142,14 +142,10 @@ public:
   }
 
   virtual void handleVersionInfo(
-    unsigned char RevisionNum,        ///< Byte code revision number
-    Module::Endianness Endianness,    ///< Endianness indicator
-    Module::PointerSize PointerSize   ///< PointerSize indicator
+    unsigned char RevisionNum        ///< Byte code revision number
   ) {
     if (os)
-      *os << "    RevisionNum: " << int(RevisionNum)
-         << " Endianness: " << Endianness
-         << " PointerSize: " << PointerSize << "\n";
+      *os << "    RevisionNum: " << int(RevisionNum) << "\n";
     bca.version = RevisionNum;
   }
 
index efdb4f17d266c8995ac0e613739cb4b7bed7784e..b94139482cd73d2b2571a00a818536a3c1a4601b 100644 (file)
@@ -2014,6 +2014,13 @@ void BytecodeReader::ParseModuleGlobalInfo() {
   if (Handler)
     Handler->handleTargetTriple(triple);
   
+  // Read the data layout string and place into the module.
+  std::string datalayout = read_str();
+  TheModule->setDataLayout(datalayout);
+  // FIXME: Implement
+  // if (Handler)
+    // Handler->handleDataLayout(datalayout);
+
   if (At != BlockEnd) {
     // If the file has section info in it, read the section names now.
     unsigned NumSections = read_vbr_uint();
@@ -2045,31 +2052,14 @@ void BytecodeReader::ParseModuleGlobalInfo() {
 /// Parse the version information and decode it by setting flags on the
 /// Reader that enable backward compatibility of the reader.
 void BytecodeReader::ParseVersionInfo() {
-  unsigned Version = read_vbr_uint();
-
-  // Unpack version number: low four bits are for flags, top bits = version
-  Module::Endianness  Endianness;
-  Module::PointerSize PointerSize;
-  Endianness  = (Version & 1) ? Module::BigEndian : Module::LittleEndian;
-  PointerSize = (Version & 2) ? Module::Pointer64 : Module::Pointer32;
-
-  bool hasNoEndianness = Version & 4;
-  bool hasNoPointerSize = Version & 8;
-
-  RevisionNum = Version >> 4;
+  unsigned RevisionNum = read_vbr_uint();
 
   // We don't provide backwards compatibility in the Reader any more. To
   // upgrade, the user should use llvm-upgrade.
   if (RevisionNum < 7)
     error("Bytecode formats < 7 are no longer supported. Use llvm-upgrade.");
 
-  if (hasNoEndianness) Endianness  = Module::AnyEndianness;
-  if (hasNoPointerSize) PointerSize = Module::AnyPointerSize;
-
-  TheModule->setEndianness(Endianness);
-  TheModule->setPointerSize(PointerSize);
-
-  if (Handler) Handler->handleVersionInfo(RevisionNum, Endianness, PointerSize);
+  if (Handler) Handler->handleVersionInfo(RevisionNum);
 }
 
 /// Parse a whole module.
index 20135249390161eb105f8501f777c9898a4b549b..d5f3f9301d57bb47498f5503b5c68961ff3752c0 100644 (file)
@@ -813,17 +813,8 @@ BytecodeWriter::BytecodeWriter(std::vector<unsigned char> &o, const Module *M)
   // Emit the top level CLASS block.
   BytecodeBlock ModuleBlock(BytecodeFormat::ModuleBlockID, *this, false, true);
 
-  bool isBigEndian      = M->getEndianness() == Module::BigEndian;
-  bool hasLongPointers  = M->getPointerSize() == Module::Pointer64;
-  bool hasNoEndianness  = M->getEndianness() == Module::AnyEndianness;
-  bool hasNoPointerSize = M->getPointerSize() == Module::AnyPointerSize;
-
-  // Output the version identifier and other information.
-  unsigned Version = (BCVersionNum << 4) |
-                     (unsigned)isBigEndian | (hasLongPointers << 1) |
-                     (hasNoEndianness << 2) |
-                     (hasNoPointerSize << 3);
-  output_vbr(Version);
+  // Output the version identifier
+  output_vbr(BCVersionNum);
 
   // The Global type plane comes first
   {
@@ -1090,6 +1081,9 @@ void BytecodeWriter::outputModuleInfoBlock(const Module *M) {
 
   // Output the target triple from the module
   output(M->getTargetTriple());
+
+  // Output the data layout from the module
+  output(M->getDataLayout());
   
   // Emit the table of section names.
   output_vbr((unsigned)SectionNames.size());