]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: define roles for ssa.Func, ssa.Config, and ssa.Cache
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 14 Mar 2017 23:44:48 +0000 (16:44 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 15 Mar 2017 04:27:49 +0000 (04:27 +0000)
The line between ssa.Func and ssa.Config has blurred.
Concurrent compilation in the backend will require more precision.
This CL lays out an (aspirational) organization.
The implementation will come in follow-up CLs,
once the organization is settled.

ssa.Config holds basic compiler configuration,
mostly arch-specific information.
It is configured once, early on, and is readonly,
so it is safe for concurrent use.

ssa.Func is a single-shot object used for
compiling a single Func. It is not concurrency-safe
and not re-usable.

ssa.Cache is a multi-use object used to avoid
expensive allocations during compilation.
Each ssa.Func is given an ssa.Cache to use.
ssa.Cache is not concurrency-safe.

Change-Id: Id02809b6f3541541cac6c27bbb598834888ce1cc
Reviewed-on: https://go-review.googlesource.com/38160
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/cache.go [new file with mode: 0644]
src/cmd/compile/internal/ssa/config.go
src/cmd/compile/internal/ssa/func.go

diff --git a/src/cmd/compile/internal/ssa/cache.go b/src/cmd/compile/internal/ssa/cache.go
new file mode 100644 (file)
index 0000000..64f9659
--- /dev/null
@@ -0,0 +1,10 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ssa
+
+// A Cache holds reusable compiler state.
+// It is intended to be re-used for multiple Func compilations.
+type Cache struct {
+}
index 52692847b96ea590620f1c47d1203dfcf8a1ebf5..978c0d6fa815a48db2ab14a33095f4adfe516349 100644 (file)
@@ -14,6 +14,9 @@ import (
        "strings"
 )
 
+// A Config holds readonly compilation information.
+// It is created once, early during compilation,
+// and shared across all compilations.
 type Config struct {
        arch            string                     // "amd64", etc.
        IntSize         int64                      // 4 or 8
index 5dc352e991622ae5895478f66672a39e43ab79c6..75b5b44a96c0fc98d1f521d28fdee9050bb7bac8 100644 (file)
@@ -11,8 +11,9 @@ import (
        "strings"
 )
 
-// A Func represents a Go func declaration (or function literal) and
-// its body. This package compiles each Func independently.
+// A Func represents a Go func declaration (or function literal) and its body.
+// This package compiles each Func independently.
+// Funcs are single-use; a new Func must be created for every compiled function.
 type Func struct {
        Config *Config  // architecture information
        pass   *pass    // current pass information (name, options, etc.)