mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Bytecode File Format Changes:
- File format version number bumped to 4 - Writer will now align nothing - Reader now only expects alignment for version 3 or earlier git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15875 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -72,12 +72,14 @@ inline void BytecodeReader::checkPastBlockEnd(const char * block_name) {
|
||||
|
||||
/// Align the buffer position to a 32 bit boundary
|
||||
inline void BytecodeReader::align32() {
|
||||
BufPtr Save = At;
|
||||
At = (const unsigned char *)((unsigned long)(At+3) & (~3UL));
|
||||
if (At > Save)
|
||||
if (Handler) Handler->handleAlignment(At - Save);
|
||||
if (At > BlockEnd)
|
||||
error("Ran out of data while aligning!");
|
||||
if (hasAlignment) {
|
||||
BufPtr Save = At;
|
||||
At = (const unsigned char *)((unsigned long)(At+3) & (~3UL));
|
||||
if (At > Save)
|
||||
if (Handler) Handler->handleAlignment(At - Save);
|
||||
if (At > BlockEnd)
|
||||
error("Ran out of data while aligning!");
|
||||
}
|
||||
}
|
||||
|
||||
/// Read a whole unsigned integer
|
||||
@@ -1886,6 +1888,7 @@ void BytecodeReader::ParseVersionInfo() {
|
||||
hasLongBlockHeaders = false;
|
||||
has32BitTypes = false;
|
||||
hasNoDependentLibraries = false;
|
||||
hasAlignment = false;
|
||||
|
||||
switch (RevisionNum) {
|
||||
case 0: // LLVM 1.0, 1.1 release version
|
||||
@@ -1937,6 +1940,14 @@ void BytecodeReader::ParseVersionInfo() {
|
||||
|
||||
// FALL THROUGH
|
||||
case 3: // LLVM 1.3 release version
|
||||
/// LLVM 1.3 and earlier caused alignment bytes to be written on some block
|
||||
/// boundaries and at the end of some strings. In extreme cases (e.g. lots
|
||||
/// of GEP references to a constant array), this can increase the file size
|
||||
/// by 30% or more. In version 1.4 alignment is done away with completely.
|
||||
hasAlignment = true;
|
||||
|
||||
// FALL THROUGH
|
||||
case 4:
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -293,8 +293,11 @@ private:
|
||||
/// features, for use in future versions of LLVM.
|
||||
bool hasNoDependentLibraries;
|
||||
|
||||
/// LLVM 1.2 and earlier encoded the file version as part of the module block
|
||||
/// but this information may be needed to
|
||||
/// LLVM 1.3 and earlier caused blocks and other fields to start on 32-bit
|
||||
/// aligned boundaries. This can lead to as much as 30% bytecode size overhead
|
||||
/// in various corner cases (lots of long instructions). In LLVM 1.4,
|
||||
/// alignment of bytecode fields was done away with completely.
|
||||
bool hasAlignment;
|
||||
|
||||
/// CompactionTypes - If a compaction table is active in the current function,
|
||||
/// this is the mapping that it contains. We keep track of what resolved type
|
||||
|
||||
Reference in New Issue
Block a user