[PATCH] D27961: Rearrange DWARFDebugLine::Row fields for smaller struct size

Simon Que via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 19 17:05:13 PST 2016


sque created this revision.
sque added a reviewer: echristo.
sque added a subscriber: llvm-commits.
Herald added a subscriber: mehdi_amini.

On a 64-bit system, the DWARFDebugLine::Row struct is 32 bytes. Each field has the following byte offsets:

0-7: Address
8-11: Line
12-13: Column
14-15: File
16-19: Isa
20-23: Discriminator
24+: bit fields

The packing is fine until the "Isa" field, which is an 8-bit int that occupies 4 bytes. We can instead move Discriminator into the 16-19 slot, and pack Isa into the 20-23 range along with the bit fields:

0-7: Address
8-11: Line
12-13: Column
14-15: File
16-19: Discriminator
20-23: Isa + bit fields

This layout is only 24 bytes. This 25% reduction in size may seem small but a large binary can have line tables with thousands of rows stored in a vector.


https://reviews.llvm.org/D27961

Files:
  include/llvm/DebugInfo/DWARF/DWARFDebugLine.h


Index: include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
===================================================================
--- include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
+++ include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
@@ -116,12 +116,12 @@
     // An unsigned integer indicating the identity of the source file
     // corresponding to a machine instruction.
     uint16_t File;
-    // An unsigned integer whose value encodes the applicable instruction set
-    // architecture for the current instruction.
-    uint8_t Isa;
     // An unsigned integer representing the DWARF path discriminator value
     // for this location.
     uint32_t Discriminator;
+    // An unsigned integer whose value encodes the applicable instruction set
+    // architecture for the current instruction.
+    uint8_t Isa;
     // A boolean indicating that the current instruction is the beginning of a
     // statement.
     uint8_t IsStmt:1,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27961.82044.patch
Type: text/x-patch
Size: 930 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161220/3dd1e7e6/attachment.bin>


More information about the llvm-commits mailing list