From 96711e4d8b9247a9b8502efef1b8714dd9e1915a Mon Sep 17 00:00:00 2001 From: David Chase Date: Wed, 2 Nov 2022 17:23:47 -0400 Subject: [PATCH] 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 Run-TryBot: David Chase TryBot-Result: Gopher Robot Reviewed-by: Keith Randall --- src/cmd/compile/internal/base/debug.go | 1 + src/cmd/compile/internal/noder/unified.go | 3 ++- src/cmd/compile/internal/ssa/fmahash_test.go | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/base/debug.go b/src/cmd/compile/internal/base/debug.go index ca3552733d..7acebb466e 100644 --- a/src/cmd/compile/internal/base/debug.go +++ b/src/cmd/compile/internal/base/debug.go @@ -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"` diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go index 61767ea2d9..ed97a09302 100644 --- a/src/cmd/compile/internal/noder/unified.go +++ b/src/cmd/compile/internal/noder/unified.go @@ -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 } diff --git a/src/cmd/compile/internal/ssa/fmahash_test.go b/src/cmd/compile/internal/ssa/fmahash_test.go index 1df6a63c25..6e78e66045 100644 --- a/src/cmd/compile/internal/ssa/fmahash_test.go +++ b/src/cmd/compile/internal/ssa/fmahash_test.go @@ -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 { -- 2.48.1