]> Cypherpunks repositories - gostls13.git/commitdiff
cmd: move experiment flags into objabi.Experiment
authorAustin Clements <austin@google.com>
Tue, 16 Mar 2021 21:06:25 +0000 (17:06 -0400)
committerAustin Clements <austin@google.com>
Thu, 18 Mar 2021 21:27:23 +0000 (21:27 +0000)
This moves all remaining GOEXPERIMENT flags into the objabi.Experiment
struct, drops the "_enabled" from their name, and makes them all bool
typed.

We also drop DebugFlags.Fieldtrack because the previous CL shifted the
one test that used it to use GOEXPERIMENT instead.

Change-Id: I3406fe62b1c300bb4caeaffa6ca5ce56a70497fe
Reviewed-on: https://go-review.googlesource.com/c/go/+/302389
Trust: Austin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
13 files changed:
src/cmd/compile/internal/base/debug.go
src/cmd/compile/internal/base/flag.go
src/cmd/compile/internal/dwarfgen/dwarf.go
src/cmd/compile/internal/noder/lex.go
src/cmd/compile/internal/ssa/compile.go
src/cmd/compile/internal/ssa/regalloc.go
src/cmd/compile/internal/ssagen/pgen.go
src/cmd/compile/internal/walk/expr.go
src/cmd/go/internal/work/gc.go
src/cmd/internal/objabi/util.go
src/cmd/link/internal/ld/deadcode.go
src/cmd/link/internal/ld/main.go
src/runtime/runtime2.go

index b9fa3d882e608958e66057788b52fbb779892c94..7590dc1bfa9561c212af66190f26562e5d3c80c9 100644 (file)
@@ -13,14 +13,10 @@ import (
        "reflect"
        "strconv"
        "strings"
-
-       "cmd/internal/objabi"
 )
 
 // Debug holds the parsed debugging configuration values.
-var Debug = DebugFlags{
-       Fieldtrack: &objabi.Fieldtrack_enabled,
-}
+var Debug DebugFlags
 
 // DebugFlags defines the debugging configuration values (see var Debug).
 // Each struct field is a different value, named for the lower-case of the field name.
@@ -38,7 +34,6 @@ type DebugFlags struct {
        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"`
-       Fieldtrack           *int   `help:"enable field tracking"`
        GCProg               int    `help:"print dump of GC programs"`
        InlFuncsWithClosures int    `help:"allow functions with closures to be inlined"`
        Libfuzzer            int    `help:"enable coverage instrumentation for libfuzzer"`
@@ -86,8 +81,6 @@ func init() {
                        panic(fmt.Sprintf("base.Debug.%s has invalid type %v (must be int or string)", f.Name, f.Type))
                case *int, *string:
                        // ok
-               case **int:
-                       ptr = *ptr.(**int) // record the *int itself
                }
                debugTab = append(debugTab, debugField{name, help, ptr})
        }
index 959fededa9d3f9e654cef2c5d142cf40edbb5f28..751ab1b5c7d5bbec5a63bf3378ed9a7d505cd1eb 100644 (file)
@@ -339,7 +339,7 @@ func concurrentBackendAllowed() bool {
                return false
        }
        // TODO: Test and delete this condition.
-       if objabi.Fieldtrack_enabled != 0 {
+       if objabi.Experiment.FieldTrack {
                return false
        }
        // TODO: fix races and enable the following flags
index 53752097ed398b06ff7f65f28c7d71f8fbb444ee..7b5863bbc6e319cb2611b5b55909ff8b10add404 100644 (file)
@@ -278,7 +278,7 @@ func createSimpleVar(fnsym *obj.LSym, n *ir.Name) *dwarf.Var {
                if base.Ctxt.FixedFrameSize() == 0 {
                        offs -= int64(types.PtrSize)
                }
-               if objabi.Framepointer_enabled {
+               if objabi.FramePointerEnabled {
                        offs -= int64(types.PtrSize)
                }
 
index 36cfb9bc2351d9a1cf6aadf2596a3ce2d7c37f6c..60b724d154fb8925da12a8c0173f119d923795f0 100644 (file)
@@ -44,7 +44,7 @@ func pragmaFlag(verb string) ir.PragmaFlag {
        case "go:build":
                return ir.GoBuildPragma
        case "go:nointerface":
-               if objabi.Fieldtrack_enabled != 0 {
+               if objabi.Experiment.FieldTrack {
                        return ir.Nointerface
                }
        case "go:noescape":
index c267274366b35a8f32e57c457ed249d6fa9378a7..b1bcd4566ef8e147fc8f83def5dee2756b7b1d0b 100644 (file)
@@ -454,7 +454,7 @@ var passes = [...]pass{
        {name: "dse", fn: dse},
        {name: "writebarrier", fn: writebarrier, required: true}, // expand write barrier ops
        {name: "insert resched checks", fn: insertLoopReschedChecks,
-               disabled: objabi.Preemptibleloops_enabled == 0}, // insert resched checks in loops.
+               disabled: !objabi.Experiment.PreemptibleLoops}, // insert resched checks in loops.
        {name: "lower", fn: lower, required: true},
        {name: "addressing modes", fn: addressingModes, required: false},
        {name: "lowered deadcode for cse", fn: deadcode}, // deadcode immediately before CSE avoids CSE making dead values live again
index 18908681df3badb5f104c5399f220c7e62d76a13..42df8387e49f08e0a682d5e11d79ba80cc403008 100644 (file)
@@ -594,7 +594,7 @@ func (s *regAllocState) init(f *Func) {
        if s.f.Config.hasGReg {
                s.allocatable &^= 1 << s.GReg
        }
-       if objabi.Framepointer_enabled && s.f.Config.FPReg >= 0 {
+       if objabi.FramePointerEnabled && s.f.Config.FPReg >= 0 {
                s.allocatable &^= 1 << uint(s.f.Config.FPReg)
        }
        if s.f.Config.LinkReg != -1 {
index 0088f10fa88a581b4aa2f36ca139ae9537dad2ee..0cb506fb74c38f1691af407de9153a74b02285aa 100644 (file)
@@ -202,7 +202,7 @@ func StackOffset(slot ssa.LocalSlot) int32 {
                if base.Ctxt.FixedFrameSize() == 0 {
                        off -= int64(types.PtrSize)
                }
-               if objabi.Framepointer_enabled {
+               if objabi.FramePointerEnabled {
                        off -= int64(types.PtrSize)
                }
        }
@@ -215,7 +215,7 @@ func fieldtrack(fnsym *obj.LSym, tracked map[*obj.LSym]struct{}) {
        if fnsym == nil {
                return
        }
-       if objabi.Fieldtrack_enabled == 0 || len(tracked) == 0 {
+       if !objabi.Experiment.FieldTrack || len(tracked) == 0 {
                return
        }
 
index 1d900292982b87869f2b67344a0c1c89b88be490..4cc5b65d3e3990226a021214064842095214b266 100644 (file)
@@ -931,7 +931,7 @@ func usemethod(n *ir.CallExpr) {
 }
 
 func usefield(n *ir.SelectorExpr) {
-       if objabi.Fieldtrack_enabled == 0 {
+       if !objabi.Experiment.FieldTrack {
                return
        }
 
index 0fb6156c5a60735fc85c7846b4d027c50d2f72ad..95fffeabd62ec51324983712e9661685555bda70 100644 (file)
@@ -223,7 +223,7 @@ CheckFlags:
        }
 
        // TODO: Test and delete these conditions.
-       if objabi.Fieldtrack_enabled != 0 || objabi.Preemptibleloops_enabled != 0 {
+       if objabi.Experiment.FieldTrack || objabi.Experiment.PreemptibleLoops {
                canDashC = false
        }
 
index 548e9d0a3026eb12d0d786dcdee069affcaa3ccd..9fbe6490e0bcc466874952cc5f91716416fc24ae 100644 (file)
@@ -174,8 +174,14 @@ func init() {
        GOEXPERIMENT = expList()
 }
 
+// FramePointerEnabled enables the use of platform conventions for
+// saving frame pointers.
+//
+// This used to be an experiment, but now it's always enabled on
+// platforms that support it.
+//
 // Note: must agree with runtime.framepointer_enabled.
-var Framepointer_enabled = GOARCH == "amd64" || GOARCH == "arm64"
+var FramePointerEnabled = GOARCH == "amd64" || GOARCH == "arm64"
 
 func addexp(s string) {
        // Could do general integer parsing here, but the runtime.haveexperiment doesn't yet.
@@ -203,18 +209,14 @@ func addexp(s string) {
        os.Exit(2)
 }
 
-var (
-       Fieldtrack_enabled        int
-       Preemptibleloops_enabled  int
-       Staticlockranking_enabled int
-)
-
 // Experiment contains flags for GOEXPERIMENTs.
-//
-// TODO(austin): Move the package-level experiment flags into this.
-var Experiment ExpFlags
+var Experiment = ExpFlags{}
 
 type ExpFlags struct {
+       FieldTrack        bool
+       PreemptibleLoops  bool
+       StaticLockRanking bool
+
        // regabi is split into several sub-experiments that can be
        // enabled individually. GOEXPERIMENT=regabi implies the
        // subset that are currently "working". Not all combinations work.
@@ -250,9 +252,9 @@ var exper = []struct {
        name string
        val  interface{} // Must be *int or *bool
 }{
-       {"fieldtrack", &Fieldtrack_enabled},
-       {"preemptibleloops", &Preemptibleloops_enabled},
-       {"staticlockranking", &Staticlockranking_enabled},
+       {"fieldtrack", &Experiment.FieldTrack},
+       {"preemptibleloops", &Experiment.PreemptibleLoops},
+       {"staticlockranking", &Experiment.StaticLockRanking},
        {"regabi", &Experiment.regabi},
        {"regabiwrappers", &Experiment.RegabiWrappers},
        {"regabig", &Experiment.RegabiG},
index a52652566b579c15792813d24e74d15cdd26b454..33468b429c7c99e43362790f1a10a0d16462b1b8 100644 (file)
@@ -32,7 +32,7 @@ type deadcodePass struct {
 func (d *deadcodePass) init() {
        d.ldr.InitReachable()
        d.ifaceMethod = make(map[methodsig]bool)
-       if objabi.Fieldtrack_enabled != 0 {
+       if objabi.Experiment.FieldTrack {
                d.ldr.Reachparent = make([]loader.Sym, d.ldr.NSym())
        }
        d.dynlink = d.ctxt.DynlinkingGo()
@@ -255,7 +255,7 @@ func (d *deadcodePass) mark(symIdx, parent loader.Sym) {
        if symIdx != 0 && !d.ldr.AttrReachable(symIdx) {
                d.wq.push(symIdx)
                d.ldr.SetAttrReachable(symIdx, true)
-               if objabi.Fieldtrack_enabled != 0 && d.ldr.Reachparent[symIdx] == 0 {
+               if objabi.Experiment.FieldTrack && d.ldr.Reachparent[symIdx] == 0 {
                        d.ldr.Reachparent[symIdx] = parent
                }
                if *flagDumpDep {
index 3c5355df9c8fc426c80e2e0f08a72a66126738bb..78df50ee2d4a9d03c98d08465fc5c40ec0953b52 100644 (file)
@@ -251,7 +251,7 @@ func Main(arch *sys.Arch, theArch Arch) {
 
        bench.Start("dostrdata")
        ctxt.dostrdata()
-       if objabi.Fieldtrack_enabled != 0 {
+       if objabi.Experiment.FieldTrack {
                bench.Start("fieldtrack")
                fieldtrack(ctxt.Arch, ctxt.loader)
        }
index f5318e6f11e830538cd3e0d37f93172cdb4ddff7..e5f948ec8612bfbc598272c6488bbce81b02c8c4 100644 (file)
@@ -1105,5 +1105,5 @@ var (
        isarchive bool // -buildmode=c-archive
 )
 
-// Must agree with cmd/internal/objabi.Framepointer_enabled.
+// Must agree with cmd/internal/objabi.Experiment.FramePointer.
 const framepointer_enabled = GOARCH == "amd64" || GOARCH == "arm64"