diff --git a/lib/Bytecode/Reader/Analyzer.cpp b/lib/Bytecode/Reader/Analyzer.cpp index 465e3b053e9..c86db26a920 100644 --- a/lib/Bytecode/Reader/Analyzer.cpp +++ b/lib/Bytecode/Reader/Analyzer.cpp @@ -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; } diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index efdb4f17d26..b94139482cd 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -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. diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp index 20135249390..d5f3f9301d5 100644 --- a/lib/Bytecode/Writer/Writer.cpp +++ b/lib/Bytecode/Writer/Writer.cpp @@ -813,17 +813,8 @@ BytecodeWriter::BytecodeWriter(std::vector &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());