1
0
mirror of https://github.com/golang/go synced 2024-11-17 16:14:42 -07:00

runtime, cmd/compile: re-order PCDATA and FUNCDATA indices

The pclntab encoding supports writing only some PCDATA and FUNCDATA values.
However, the encoding is dense: The max index in use determines the space used.
We should thus choose a numbering in which frequently used indices are smaller.

This change re-orders the PCDATA and FUNCDATA indices using that principle,
using a quick and dirty instrumentation to measure index frequency.

It shrinks binaries by about 0.5%.

Updates #6853

file      before    after     Δ       %       
go        14745044  14671316  -73728  -0.500% 
addr2line 4305128   4280552   -24576  -0.571% 
api       6095800   6058936   -36864  -0.605% 
asm       4930928   4906352   -24576  -0.498% 
buildid   2881520   2861040   -20480  -0.711% 
cgo       4896584   4867912   -28672  -0.586% 
compile   25868408  25770104  -98304  -0.380% 
cover     5319656   5286888   -32768  -0.616% 
dist      3654528   3634048   -20480  -0.560% 
doc       4719672   4691000   -28672  -0.607% 
fix       3418312   3393736   -24576  -0.719% 
link      6137952   6109280   -28672  -0.467% 
nm        4250536   4225960   -24576  -0.578% 
objdump   4665192   4636520   -28672  -0.615% 
pack      2297488   2285200   -12288  -0.535% 
pprof     14735332  14657508  -77824  -0.528% 
test2json 2834952   2818568   -16384  -0.578% 
trace     11679964  11618524  -61440  -0.526% 
vet       8452696   8403544   -49152  -0.581% 

Change-Id: I30665dce57ec7a52e7d3c6718560b3aa5b83dd0b
Reviewed-on: https://go-review.googlesource.com/c/go/+/171760
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
Josh Bleecher Snyder 2019-04-11 12:18:10 -07:00
parent c1544ff906
commit 4aeac68c92
3 changed files with 22 additions and 19 deletions

View File

@ -11,14 +11,15 @@ package objabi
// ../../../runtime/symtab.go.
const (
PCDATA_StackMapIndex = 0
PCDATA_InlTreeIndex = 1
PCDATA_RegMapIndex = 2
PCDATA_RegMapIndex = 0
PCDATA_StackMapIndex = 1
PCDATA_InlTreeIndex = 2
FUNCDATA_ArgsPointerMaps = 0
FUNCDATA_LocalsPointerMaps = 1
FUNCDATA_InlTree = 2
FUNCDATA_RegPointerMaps = 3
FUNCDATA_StackObjects = 4
FUNCDATA_RegPointerMaps = 2
FUNCDATA_StackObjects = 3
FUNCDATA_InlTree = 4
// ArgsSizeUnknown is set in Func.argsize to mark all functions
// whose argument size is unknown (C vararg functions, and

View File

@ -8,15 +8,15 @@
//
// These must agree with symtab.go and ../cmd/internal/objabi/funcdata.go.
#define PCDATA_StackMapIndex 0
#define PCDATA_InlTreeIndex 1
#define PCDATA_RegMapIndex 2
#define PCDATA_RegMapIndex 0
#define PCDATA_StackMapIndex 1
#define PCDATA_InlTreeIndex 2
#define FUNCDATA_ArgsPointerMaps 0 /* garbage collector blocks */
#define FUNCDATA_LocalsPointerMaps 1
#define FUNCDATA_InlTree 2
#define FUNCDATA_RegPointerMaps 3
#define FUNCDATA_StackObjects 4
#define FUNCDATA_RegPointerMaps 2
#define FUNCDATA_StackObjects 3
#define FUNCDATA_InlTree 4
// Pseudo-assembly statements.

View File

@ -198,14 +198,16 @@ func (f *Func) funcInfo() funcInfo {
//
// See funcdata.h and ../cmd/internal/objabi/funcdata.go.
const (
_PCDATA_StackMapIndex = 0
_PCDATA_InlTreeIndex = 1
_PCDATA_RegMapIndex = 2
_PCDATA_RegMapIndex = 0
_PCDATA_StackMapIndex = 1
_PCDATA_InlTreeIndex = 2
_FUNCDATA_ArgsPointerMaps = 0
_FUNCDATA_LocalsPointerMaps = 1
_FUNCDATA_InlTree = 2
_FUNCDATA_RegPointerMaps = 3
_FUNCDATA_StackObjects = 4
_FUNCDATA_RegPointerMaps = 2
_FUNCDATA_StackObjects = 3
_FUNCDATA_InlTree = 4
_ArgsSizeUnknown = -0x80000000
)