]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ssa: simplify NewFunc API
authorMatthew Dempsky <mdempsky@google.com>
Thu, 7 Sep 2023 04:43:58 +0000 (21:43 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 8 Sep 2023 19:01:04 +0000 (19:01 +0000)
Add Config and Cache as params rather than documenting that the caller
has to set them manually.

Change-Id: I8d530be695a0c94bcc4211b496d6e57ec2fff029
Reviewed-on: https://go-review.googlesource.com/c/go/+/526515
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
src/cmd/compile/internal/ssa/func.go
src/cmd/compile/internal/ssa/func_test.go
src/cmd/compile/internal/ssagen/ssa.go

index 2d203e583b7207f4d3b0e1e8605895b56d8ce553..c5716e3a9a44e9a645d5618fec7f29e87082ba31 100644 (file)
@@ -84,9 +84,17 @@ type LocalSlotSplitKey struct {
 }
 
 // NewFunc returns a new, empty function object.
-// Caller must set f.Config and f.Cache before using f.
-func NewFunc(fe Frontend) *Func {
-       return &Func{fe: fe, NamedValues: make(map[LocalSlot][]*Value), CanonicalLocalSlots: make(map[LocalSlot]*LocalSlot), CanonicalLocalSplits: make(map[LocalSlotSplitKey]*LocalSlot)}
+// Caller must reset cache before calling NewFunc.
+func (c *Config) NewFunc(fe Frontend, cache *Cache) *Func {
+       return &Func{
+               fe:     fe,
+               Config: c,
+               Cache:  cache,
+
+               NamedValues:          make(map[LocalSlot][]*Value),
+               CanonicalLocalSlots:  make(map[LocalSlot]*LocalSlot),
+               CanonicalLocalSplits: make(map[LocalSlotSplitKey]*LocalSlot),
+       }
 }
 
 // NumBlocks returns an integer larger than the id of any Block in the Func.
index bbb228d8a5fed61bc97f6d95a787762ce88eef30..6923aaa58ecadd4745f95c1648aaee6805015189 100644 (file)
@@ -152,12 +152,10 @@ func AuxCallLSym(name string) *AuxCall {
 // supplied to one of the Bloc functions. Each of the bloc names and
 // valu names should be unique across the Fun.
 func (c *Conf) Fun(entry string, blocs ...bloc) fun {
-       f := NewFunc(c.Frontend())
-       f.Config = c.config
        // TODO: Either mark some SSA tests as t.Parallel,
        // or set up a shared Cache and Reset it between tests.
        // But not both.
-       f.Cache = new(Cache)
+       f := c.config.NewFunc(c.Frontend(), new(Cache))
        f.pass = &emptyPass
        f.cachedLineStarts = newXposmap(map[int]lineRange{0: {0, 100}, 1: {0, 100}, 2: {0, 100}, 3: {0, 100}, 4: {0, 100}})
 
index 6f8487757d78226c957bb1f6b67b25e21c7257b1..2934c8b527297ecf15b0e1b612fb732b490c61b8 100644 (file)
@@ -344,12 +344,12 @@ func buildssa(fn *ir.Func, worker int) *ssa.Func {
        }
        s.curfn = fn
 
-       s.f = ssa.NewFunc(&fe)
+       cache := &ssaCaches[worker]
+       cache.Reset()
+
+       s.f = ssaConfig.NewFunc(&fe, cache)
        s.config = ssaConfig
        s.f.Type = fn.Type()
-       s.f.Config = ssaConfig
-       s.f.Cache = &ssaCaches[worker]
-       s.f.Cache.Reset()
        s.f.Name = name
        s.f.PrintOrHtmlSSA = printssa
        if fn.Pragma&ir.Nosplit != 0 {