1
0
mirror of https://github.com/golang/go synced 2024-11-06 08:16:11 -07:00

cmd/compile: let compiler downgrade its own concurrency

This gets the Go command out of the business of thinking it understands
compiler debug flags, and allows the compiler to turn down its worker
concurrency instead of failing and forcing the user to do the very
same thing.  Debug flags that are obviously safe for concurrency
(at least to me) are tagged; probably there's more.

Change-Id: I59bb19861d8a654a9cfd2364ee78c8628212f82e
Reviewed-on: https://go-review.googlesource.com/c/go/+/448359
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
David Chase 2022-11-07 14:16:31 -05:00
parent 4538f30e2d
commit f3d656be50
2 changed files with 10 additions and 24 deletions

View File

@ -17,11 +17,11 @@ var Debug DebugFlags
// Each setting is name=value; for ints, name is short for name=1. // Each setting is name=value; for ints, name is short for name=1.
type DebugFlags struct { type DebugFlags struct {
Append int `help:"print information about append compilation"` Append int `help:"print information about append compilation"`
Checkptr int `help:"instrument unsafe pointer conversions\n0: instrumentation disabled\n1: conversions involving unsafe.Pointer are instrumented\n2: conversions to unsafe.Pointer force heap allocation"` Checkptr int `help:"instrument unsafe pointer conversions\n0: instrumentation disabled\n1: conversions involving unsafe.Pointer are instrumented\n2: conversions to unsafe.Pointer force heap allocation" concurrent:"ok"`
Closure int `help:"print information about closure compilation"` Closure int `help:"print information about closure compilation"`
DclStack int `help:"run internal dclstack check"` DclStack int `help:"run internal dclstack check"`
Defer int `help:"print information about defer compilation"` Defer int `help:"print information about defer compilation"`
DisableNil int `help:"disable nil checks"` DisableNil int `help:"disable nil checks" concurrent:"ok"`
DumpPtrs int `help:"show Node pointers values in dump output"` DumpPtrs int `help:"show Node pointers values in dump output"`
DwarfInl int `help:"print information about DWARF inlined function creation"` DwarfInl int `help:"print information about DWARF inlined function creation"`
Export int `help:"print export data"` Export int `help:"print export data"`
@ -29,27 +29,27 @@ type DebugFlags struct {
GCAdjust int `help:"log adjustments to GOGC" concurrent:"ok"` GCAdjust int `help:"log adjustments to GOGC" concurrent:"ok"`
GCProg int `help:"print dump of GC programs"` GCProg int `help:"print dump of GC programs"`
Gossahash string `help:"hash value for use in debugging the compiler"` Gossahash string `help:"hash value for use in debugging the compiler"`
InlFuncsWithClosures int `help:"allow functions with closures to be inlined"` InlFuncsWithClosures int `help:"allow functions with closures to be inlined" concurrent:"ok"`
Libfuzzer int `help:"enable coverage instrumentation for libfuzzer"` Libfuzzer int `help:"enable coverage instrumentation for libfuzzer"`
LocationLists int `help:"print information about DWARF location list creation"` LocationLists int `help:"print information about DWARF location list creation"`
Nil int `help:"print information about nil checks"` Nil int `help:"print information about nil checks"`
NoOpenDefer int `help:"disable open-coded defers"` NoOpenDefer int `help:"disable open-coded defers" concurrent:"ok"`
NoRefName int `help:"do not include referenced symbol names in object file"` NoRefName int `help:"do not include referenced symbol names in object file" concurrent:"ok"`
PCTab string `help:"print named pc-value table\nOne of: pctospadj, pctofile, pctoline, pctoinline, pctopcdata"` PCTab string `help:"print named pc-value table\nOne of: pctospadj, pctofile, pctoline, pctoinline, pctopcdata"`
Panic int `help:"show all compiler panics"` Panic int `help:"show all compiler panics"`
Reshape int `help:"print information about expression reshaping"` Reshape int `help:"print information about expression reshaping"`
Shapify int `help:"print information about shaping recursive types"` Shapify int `help:"print information about shaping recursive types"`
Slice int `help:"print information about slice compilation"` Slice int `help:"print information about slice compilation"`
SoftFloat int `help:"force compiler to emit soft-float code"` SoftFloat int `help:"force compiler to emit soft-float code" concurrent:"ok"`
SyncFrames int `help:"how many writer stack frames to include at sync points in unified export data"` SyncFrames int `help:"how many writer stack frames to include at sync points in unified export data"`
TypeAssert int `help:"print information about type assertion inlining"` TypeAssert int `help:"print information about type assertion inlining"`
TypecheckInl int `help:"eager typechecking of inline function bodies"` TypecheckInl int `help:"eager typechecking of inline function bodies" concurrent:"ok"`
Unified int `help:"enable unified IR construction"` Unified int `help:"enable unified IR construction"`
WB int `help:"print information about write barriers"` WB int `help:"print information about write barriers"`
ABIWrap int `help:"print information about ABI wrapper generation"` ABIWrap int `help:"print information about ABI wrapper generation"`
MayMoreStack string `help:"call named function before all stack growth checks"` MayMoreStack string `help:"call named function before all stack growth checks" concurrent:"ok"`
InlineHotCallSiteCDFThreshold string `help:"cummulative threshold percentage for determining call sites as hot candidates for inlining"` InlineHotCallSiteCDFThreshold string `help:"cummulative threshold percentage for determining call sites as hot candidates for inlining" concurrent:"ok"`
InlineHotBudget int `help:"inline budget for hot functions"` InlineHotBudget int `help:"inline budget for hot functions" concurrent:"ok"`
PGOInline int `help:"debug profile-guided inlining"` PGOInline int `help:"debug profile-guided inlining"`
ConcurrentOk bool // true if only concurrentOk flags seen ConcurrentOk bool // true if only concurrentOk flags seen

View File

@ -235,20 +235,6 @@ func gcBackendConcurrency(gcflags []string) int {
log.Fatalf("GO19CONCURRENTCOMPILATION must be 0, 1, or unset, got %q", e) log.Fatalf("GO19CONCURRENTCOMPILATION must be 0, 1, or unset, got %q", e)
} }
CheckFlags:
for _, flag := range gcflags {
// Concurrent compilation is presumed incompatible with any gcflags,
// except for known commonly used flags.
// If the user knows better, they can manually add their own -c to the gcflags.
switch flag {
case "-N", "-l", "-S", "-B", "-C", "-I", "-shared":
// OK
default:
canDashC = false
break CheckFlags
}
}
// TODO: Test and delete these conditions. // TODO: Test and delete these conditions.
if cfg.ExperimentErr != nil || cfg.Experiment.FieldTrack || cfg.Experiment.PreemptibleLoops { if cfg.ExperimentErr != nil || cfg.Experiment.FieldTrack || cfg.Experiment.PreemptibleLoops {
canDashC = false canDashC = false