]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: let compiler downgrade its own concurrency
authorDavid Chase <drchase@google.com>
Mon, 7 Nov 2022 19:16:31 +0000 (14:16 -0500)
committerDavid Chase <drchase@google.com>
Mon, 7 Nov 2022 21:17:27 +0000 (21:17 +0000)
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>

src/cmd/compile/internal/base/debug.go
src/cmd/go/internal/work/gc.go

index 083fdf8fb1765564308978b9f097638ec787654a..7e4adef70695367da7613c28c5ec67057e769502 100644 (file)
@@ -17,11 +17,11 @@ var Debug DebugFlags
 // Each setting is name=value; for ints, name is short for name=1.
 type DebugFlags struct {
        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"`
        DclStack                      int    `help:"run internal dclstack check"`
        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"`
        DwarfInl                      int    `help:"print information about DWARF inlined function creation"`
        Export                        int    `help:"print export data"`
@@ -29,27 +29,27 @@ type DebugFlags struct {
        GCAdjust                      int    `help:"log adjustments to GOGC" 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"`
+       InlFuncsWithClosures          int    `help:"allow functions with closures to be inlined" concurrent:"ok"`
        Libfuzzer                     int    `help:"enable coverage instrumentation for libfuzzer"`
        LocationLists                 int    `help:"print information about DWARF location list creation"`
        Nil                           int    `help:"print information about nil checks"`
-       NoOpenDefer                   int    `help:"disable open-coded defers"`
-       NoRefName                     int    `help:"do not include referenced symbol names in object file"`
+       NoOpenDefer                   int    `help:"disable open-coded defers" concurrent:"ok"`
+       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"`
        Panic                         int    `help:"show all compiler panics"`
        Reshape                       int    `help:"print information about expression reshaping"`
        Shapify                       int    `help:"print information about shaping recursive types"`
        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"`
        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"`
        WB                            int    `help:"print information about write barriers"`
        ABIWrap                       int    `help:"print information about ABI wrapper generation"`
-       MayMoreStack                  string `help:"call named function before all stack growth checks"`
-       InlineHotCallSiteCDFThreshold string `help:"cummulative threshold percentage for determining call sites as hot candidates for inlining"`
-       InlineHotBudget               int    `help:"inline budget for hot functions"`
+       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" concurrent:"ok"`
+       InlineHotBudget               int    `help:"inline budget for hot functions" concurrent:"ok"`
        PGOInline                     int    `help:"debug profile-guided inlining"`
 
        ConcurrentOk bool // true if only concurrentOk flags seen
index de32ad915863cccfaa44bc1b0c42cd41718e1e0e..cff477331508d1958cb9ee01c681c069ec1adefa 100644 (file)
@@ -235,20 +235,6 @@ func gcBackendConcurrency(gcflags []string) int {
                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.
        if cfg.ExperimentErr != nil || cfg.Experiment.FieldTrack || cfg.Experiment.PreemptibleLoops {
                canDashC = false