]> Cypherpunks repositories - gostls13.git/commitdiff
runtime, cmd/compile: re-order PCDATA and FUNCDATA indices
authorJosh Bleecher Snyder <josharian@gmail.com>
Thu, 11 Apr 2019 19:18:10 +0000 (12:18 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Fri, 19 Apr 2019 15:40:42 +0000 (15:40 +0000)
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>
src/cmd/internal/objabi/funcdata.go
src/runtime/funcdata.h
src/runtime/symtab.go

index 231d11b18572c599e26b3c06c0d0570fb63311f6..addbd2ac88b00b99fd863ce8c9c151e1c9673a93 100644 (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
index 1ee67c86837edfe0641b69f70bf63c2c1535159a..d9a35c51a06e887c7147e53d5a3028292212e311 100644 (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.
 
index d61affa54a88e07a3dd2cde74f72a8cad201075c..c0e8dc279b802af0c1859c6904b950fb2cf500a9 100644 (file)
@@ -198,15 +198,17 @@ 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
-       _ArgsSizeUnknown            = -0x80000000
+       _FUNCDATA_RegPointerMaps    = 2
+       _FUNCDATA_StackObjects      = 3
+       _FUNCDATA_InlTree           = 4
+
+       _ArgsSizeUnknown = -0x80000000
 )
 
 // A FuncID identifies particular functions that need to be treated