mirror of
https://github.com/golang/go
synced 2024-11-17 16:04:47 -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:
parent
c1544ff906
commit
4aeac68c92
@ -11,14 +11,15 @@ package objabi
|
|||||||
// ../../../runtime/symtab.go.
|
// ../../../runtime/symtab.go.
|
||||||
|
|
||||||
const (
|
const (
|
||||||
PCDATA_StackMapIndex = 0
|
PCDATA_RegMapIndex = 0
|
||||||
PCDATA_InlTreeIndex = 1
|
PCDATA_StackMapIndex = 1
|
||||||
PCDATA_RegMapIndex = 2
|
PCDATA_InlTreeIndex = 2
|
||||||
|
|
||||||
FUNCDATA_ArgsPointerMaps = 0
|
FUNCDATA_ArgsPointerMaps = 0
|
||||||
FUNCDATA_LocalsPointerMaps = 1
|
FUNCDATA_LocalsPointerMaps = 1
|
||||||
FUNCDATA_InlTree = 2
|
FUNCDATA_RegPointerMaps = 2
|
||||||
FUNCDATA_RegPointerMaps = 3
|
FUNCDATA_StackObjects = 3
|
||||||
FUNCDATA_StackObjects = 4
|
FUNCDATA_InlTree = 4
|
||||||
|
|
||||||
// ArgsSizeUnknown is set in Func.argsize to mark all functions
|
// ArgsSizeUnknown is set in Func.argsize to mark all functions
|
||||||
// whose argument size is unknown (C vararg functions, and
|
// whose argument size is unknown (C vararg functions, and
|
||||||
|
@ -8,15 +8,15 @@
|
|||||||
//
|
//
|
||||||
// These must agree with symtab.go and ../cmd/internal/objabi/funcdata.go.
|
// These must agree with symtab.go and ../cmd/internal/objabi/funcdata.go.
|
||||||
|
|
||||||
#define PCDATA_StackMapIndex 0
|
#define PCDATA_RegMapIndex 0
|
||||||
#define PCDATA_InlTreeIndex 1
|
#define PCDATA_StackMapIndex 1
|
||||||
#define PCDATA_RegMapIndex 2
|
#define PCDATA_InlTreeIndex 2
|
||||||
|
|
||||||
#define FUNCDATA_ArgsPointerMaps 0 /* garbage collector blocks */
|
#define FUNCDATA_ArgsPointerMaps 0 /* garbage collector blocks */
|
||||||
#define FUNCDATA_LocalsPointerMaps 1
|
#define FUNCDATA_LocalsPointerMaps 1
|
||||||
#define FUNCDATA_InlTree 2
|
#define FUNCDATA_RegPointerMaps 2
|
||||||
#define FUNCDATA_RegPointerMaps 3
|
#define FUNCDATA_StackObjects 3
|
||||||
#define FUNCDATA_StackObjects 4
|
#define FUNCDATA_InlTree 4
|
||||||
|
|
||||||
// Pseudo-assembly statements.
|
// Pseudo-assembly statements.
|
||||||
|
|
||||||
|
@ -198,15 +198,17 @@ func (f *Func) funcInfo() funcInfo {
|
|||||||
//
|
//
|
||||||
// See funcdata.h and ../cmd/internal/objabi/funcdata.go.
|
// See funcdata.h and ../cmd/internal/objabi/funcdata.go.
|
||||||
const (
|
const (
|
||||||
_PCDATA_StackMapIndex = 0
|
_PCDATA_RegMapIndex = 0
|
||||||
_PCDATA_InlTreeIndex = 1
|
_PCDATA_StackMapIndex = 1
|
||||||
_PCDATA_RegMapIndex = 2
|
_PCDATA_InlTreeIndex = 2
|
||||||
|
|
||||||
_FUNCDATA_ArgsPointerMaps = 0
|
_FUNCDATA_ArgsPointerMaps = 0
|
||||||
_FUNCDATA_LocalsPointerMaps = 1
|
_FUNCDATA_LocalsPointerMaps = 1
|
||||||
_FUNCDATA_InlTree = 2
|
_FUNCDATA_RegPointerMaps = 2
|
||||||
_FUNCDATA_RegPointerMaps = 3
|
_FUNCDATA_StackObjects = 3
|
||||||
_FUNCDATA_StackObjects = 4
|
_FUNCDATA_InlTree = 4
|
||||||
_ArgsSizeUnknown = -0x80000000
|
|
||||||
|
_ArgsSizeUnknown = -0x80000000
|
||||||
)
|
)
|
||||||
|
|
||||||
// A FuncID identifies particular functions that need to be treated
|
// A FuncID identifies particular functions that need to be treated
|
||||||
|
Loading…
Reference in New Issue
Block a user