cmd/compile, cmd/internal/obj: record register maps in binary
This adds FUNCDATA and PCDATA that records the register maps much like
the existing live arguments maps and live locals maps. The register
map is indexed independently from the argument and locals maps since
changes in register liveness tend not to correlate with changes to
argument and local liveness.
This is the final CL toward adding safe-points everywhere. The
following CLs will optimize liveness analysis to bring down the cost.
The effect of this CL is:
name old time/op new time/op delta
Template 195ms ± 2% 197ms ± 1% ~ (p=0.136 n=9+9)
Unicode 98.4ms ± 2% 99.7ms ± 1% +1.39% (p=0.004 n=10+10)
GoTypes 685ms ± 1% 700ms ± 1% +2.06% (p=0.000 n=9+9)
Compiler 3.28s ± 1% 3.34s ± 0% +1.71% (p=0.000 n=9+8)
SSA 7.79s ± 1% 7.91s ± 1% +1.55% (p=0.000 n=10+9)
Flate 133ms ± 2% 133ms ± 2% ~ (p=0.190 n=10+10)
GoParser 161ms ± 2% 164ms ± 3% +1.83% (p=0.015 n=10+10)
Reflect 450ms ± 1% 457ms ± 1% +1.62% (p=0.000 n=10+10)
Tar 183ms ± 2% 185ms ± 1% +0.91% (p=0.008 n=9+10)
XML 234ms ± 1% 238ms ± 1% +1.60% (p=0.000 n=9+9)
[Geo mean] 411ms 417ms +1.40%
name old exe-bytes new exe-bytes delta
HelloSize 1.47M ± 0% 1.51M ± 0% +2.79% (p=0.000 n=10+10)
Compared to just before "cmd/internal/obj: consolidate emitting entry
stack map", the cumulative effect of adding stack maps everywhere and
register maps is:
name old time/op new time/op delta
Template 185ms ± 2% 197ms ± 1% +6.42% (p=0.000 n=10+9)
Unicode 96.3ms ± 3% 99.7ms ± 1% +3.60% (p=0.000 n=10+10)
GoTypes 658ms ± 0% 700ms ± 1% +6.37% (p=0.000 n=10+9)
Compiler 3.14s ± 1% 3.34s ± 0% +6.53% (p=0.000 n=9+8)
SSA 7.41s ± 2% 7.91s ± 1% +6.71% (p=0.000 n=9+9)
Flate 126ms ± 1% 133ms ± 2% +6.15% (p=0.000 n=10+10)
GoParser 153ms ± 1% 164ms ± 3% +6.89% (p=0.000 n=10+10)
Reflect 437ms ± 1% 457ms ± 1% +4.59% (p=0.000 n=10+10)
Tar 178ms ± 1% 185ms ± 1% +4.18% (p=0.000 n=10+10)
XML 223ms ± 1% 238ms ± 1% +6.39% (p=0.000 n=10+9)
[Geo mean] 394ms 417ms +5.78%
name old alloc/op new alloc/op delta
Template 34.5MB ± 0% 38.0MB ± 0% +10.19% (p=0.000 n=10+10)
Unicode 29.3MB ± 0% 30.3MB ± 0% +3.56% (p=0.000 n=8+9)
GoTypes 113MB ± 0% 125MB ± 0% +10.89% (p=0.000 n=10+10)
Compiler 510MB ± 0% 575MB ± 0% +12.79% (p=0.000 n=10+10)
SSA 1.46GB ± 0% 1.64GB ± 0% +12.40% (p=0.000 n=10+10)
Flate 23.9MB ± 0% 25.9MB ± 0% +8.56% (p=0.000 n=10+10)
GoParser 28.0MB ± 0% 30.8MB ± 0% +10.08% (p=0.000 n=10+10)
Reflect 77.6MB ± 0% 84.3MB ± 0% +8.63% (p=0.000 n=10+10)
Tar 34.1MB ± 0% 37.0MB ± 0% +8.44% (p=0.000 n=10+10)
XML 42.7MB ± 0% 47.2MB ± 0% +10.75% (p=0.000 n=10+10)
[Geo mean] 76.0MB 83.3MB +9.60%
name old allocs/op new allocs/op delta
Template 321k ± 0% 337k ± 0% +4.98% (p=0.000 n=10+10)
Unicode 337k ± 0% 340k ± 0% +1.04% (p=0.000 n=10+9)
GoTypes 1.13M ± 0% 1.18M ± 0% +4.85% (p=0.000 n=10+10)
Compiler 4.67M ± 0% 4.96M ± 0% +6.25% (p=0.000 n=10+10)
SSA 11.7M ± 0% 12.3M ± 0% +5.69% (p=0.000 n=10+10)
Flate 216k ± 0% 226k ± 0% +4.52% (p=0.000 n=10+9)
GoParser 271k ± 0% 283k ± 0% +4.52% (p=0.000 n=10+10)
Reflect 927k ± 0% 972k ± 0% +4.78% (p=0.000 n=10+10)
Tar 318k ± 0% 333k ± 0% +4.56% (p=0.000 n=10+10)
XML 376k ± 0% 395k ± 0% +5.04% (p=0.000 n=10+10)
[Geo mean] 730k 764k +4.61%
name old exe-bytes new exe-bytes delta
HelloSize 1.46M ± 0% 1.51M ± 0% +3.66% (p=0.000 n=10+10)
For #24543.
Change-Id: I91e003dc64151916b384274884bf02a2d6862547
Reviewed-on: https://go-review.googlesource.com/109353
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
diff --git a/src/runtime/funcdata.h b/src/runtime/funcdata.h
index 27d5a2f..4c290b9 100644
--- a/src/runtime/funcdata.h
+++ b/src/runtime/funcdata.h
@@ -10,10 +10,12 @@
#define PCDATA_StackMapIndex 0
#define PCDATA_InlTreeIndex 1
+#define PCDATA_RegMapIndex 2
#define FUNCDATA_ArgsPointerMaps 0 /* garbage collector blocks */
#define FUNCDATA_LocalsPointerMaps 1
#define FUNCDATA_InlTree 2
+#define FUNCDATA_RegPointerMaps 3
// Pseudo-assembly statements.