1
0
mirror of https://github.com/golang/go synced 2024-09-29 20:34:36 -06:00

cmd/compile: add testing-flag guard to package-is-collected assert

On advice of the department of garbage collection, forcing a garbage
collection generally does not improve performance. However,
this-data-is-now-unreachable is a good property to be able to test,
and that requires finalizers and a forced GC. So, to save build time,
this test was removed from the compiler itself, but to verify the
property, it was added to the fma_test (and the end-to-end dependence
on the flag was tested with an inserted failure in testing the
test).

TODO: also turn on the new -d=gccheck=1 debug flag on the ssacheck
builder.

Benchmarking reveals that it is profitable to avoid this GC,
with about 1.5% reduction in both user and wall time.

(48 p) https://perf.golang.org/search?q=upload:20221103.3
(12 p) https://perf.golang.org/search?q=upload:20221103.5

Change-Id: I4c4816d619735838a32388acf0cc5eb1cd5f0db5
Reviewed-on: https://go-review.googlesource.com/c/go/+/447359
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
David Chase 2022-11-02 17:23:47 -04:00
parent b14cf3d93a
commit 96711e4d8b
3 changed files with 5 additions and 2 deletions

View File

@ -27,6 +27,7 @@ type DebugFlags struct {
Export int `help:"print export data"`
Fmahash string `help:"hash value for use in debugging platform-dependent multiply-add use" concurrent:"ok"`
GCAdjust int `help:"log adjustments to GOGC" concurrent:"ok"`
GCCheck int `help:"check heap/gc use by compiler" concurrent:"ok"`
GCProg int `help:"print dump of GC programs"`
Gossahash string `help:"hash value for use in debugging the compiler"`
InlFuncsWithClosures int `help:"allow functions with closures to be inlined" concurrent:"ok"`

View File

@ -255,7 +255,8 @@ func freePackage(pkg *types2.Package) {
// not because of #22350). To avoid imposing unnecessary
// restrictions on the GOROOT_BOOTSTRAP toolchain, we skip the test
// during bootstrapping.
if base.CompilerBootstrap {
if base.CompilerBootstrap || base.Debug.GCCheck == 0 {
*pkg = types2.Package{}
return
}

View File

@ -15,7 +15,8 @@ import (
)
// TestFmaHash checks that the hash-test machinery works properly for a single case.
// It does not check or run the generated code.
// It also runs ssa/check and gccheck to be sure that those are checked at least a
// little in each run.bash. It does not check or run the generated code.
// The test file is however a useful example of fused-vs-cascaded multiply-add.
func TestFmaHash(t *testing.T) {
switch runtime.GOOS {