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>
diff --git a/src/cmd/internal/objabi/funcdata.go b/src/cmd/internal/objabi/funcdata.go
index 231d11b..addbd2a 100644
--- a/src/cmd/internal/objabi/funcdata.go
+++ b/src/cmd/internal/objabi/funcdata.go
@@ -11,14 +11,15 @@
 // ../../../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
diff --git a/src/runtime/funcdata.h b/src/runtime/funcdata.h
index 1ee67c8..d9a35c5 100644
--- a/src/runtime/funcdata.h
+++ b/src/runtime/funcdata.h
@@ -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.
 
diff --git a/src/runtime/symtab.go b/src/runtime/symtab.go
index d61affa..c0e8dc2 100644
--- a/src/runtime/symtab.go
+++ b/src/runtime/symtab.go
@@ -198,15 +198,17 @@
 //
 // 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