forked from OSchip/llvm-project
For PR761:
Remove the Endianness and PointerSize fields from the ModuleHeader and replace it with the DataLayout field. llvm-svn: 33529
This commit is contained in:
parent
6a8d4eab6a
commit
675fb2301f
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue