aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Bytecode/Reader/Analyzer.cpp8
-rw-r--r--lib/Bytecode/Reader/Reader.cpp28
-rw-r--r--lib/Bytecode/Writer/Writer.cpp16
3 files changed, 16 insertions, 36 deletions
diff --git a/lib/Bytecode/Reader/Analyzer.cpp b/lib/Bytecode/Reader/Analyzer.cpp
index 465e3b053e..c86db26a92 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 efdb4f17d2..b94139482c 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 2013524939..d5f3f9301d 100644
--- a/lib/Bytecode/Writer/Writer.cpp
+++ b/lib/Bytecode/Writer/Writer.cpp
@@ -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());