diff options
author | Matthew Dempsky <mdempsky@google.com> | 2020-12-31 23:39:15 -0800 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2021-01-01 10:52:27 +0000 |
commit | 3a4474cdfda0096b5d88c769f81ad81d6f0168c7 (patch) | |
tree | 9001f7614e140a0d3992583802b9a6a57e1198d0 | |
parent | 0f1d2129c4c294a895480b79eeab8d22c07ac573 (diff) | |
download | go-3a4474cdfda0096b5d88c769f81ad81d6f0168c7.tar.gz go-3a4474cdfda0096b5d88c769f81ad81d6f0168c7.zip |
[dev.regabi] cmd/compile: some more manual shuffling
More minor reshuffling of passes.
Passes toolstash -cmp.
Change-Id: I22633b3741f668fc5ee8579d7d610035ed57df1f
Reviewed-on: https://go-review.googlesource.com/c/go/+/280975
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
-rw-r--r-- | src/cmd/compile/internal/gc/abiutils_test.go | 2 | ||||
-rw-r--r-- | src/cmd/compile/internal/gc/main.go | 26 | ||||
-rw-r--r-- | src/cmd/compile/internal/noder/noder.go | 14 | ||||
-rw-r--r-- | src/cmd/compile/internal/typecheck/dcl.go | 2 | ||||
-rw-r--r-- | src/cmd/compile/internal/typecheck/syms.go | 7 | ||||
-rw-r--r-- | src/cmd/compile/internal/typecheck/typecheck.go | 7 | ||||
-rw-r--r-- | src/cmd/compile/internal/typecheck/universe.go | 4 |
7 files changed, 29 insertions, 33 deletions
diff --git a/src/cmd/compile/internal/gc/abiutils_test.go b/src/cmd/compile/internal/gc/abiutils_test.go index d535a6a34b..6fd0af1b1f 100644 --- a/src/cmd/compile/internal/gc/abiutils_test.go +++ b/src/cmd/compile/internal/gc/abiutils_test.go @@ -38,7 +38,7 @@ func TestMain(m *testing.M) { base.Ctxt.Bso = bufio.NewWriter(os.Stdout) types.PtrSize = ssagen.Arch.LinkArch.PtrSize types.RegSize = ssagen.Arch.LinkArch.RegSize - typecheck.Init() + typecheck.InitUniverse() os.Exit(m.Run()) } diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index 603619eb5a..df6a9d8e45 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -200,23 +200,15 @@ func Main(archInit func(*ssagen.ArchInfo)) { base.AutogeneratedPos = makePos(src.NewFileBase("<autogenerated>", "<autogenerated>"), 1, 0) - typecheck.Init() + typecheck.InitUniverse() - // Parse input. - base.Timer.Start("fe", "parse") - lines := noder.ParseFiles(flag.Args()) - ssagen.CgoSymABIs() - base.Timer.Stop() - base.Timer.AddEvent(int64(lines), "lines") - dwarfgen.RecordPackageName() + // Parse and typecheck input. + noder.LoadPackage(flag.Args()) - // Typecheck. - noder.Package() + dwarfgen.RecordPackageName() + ssagen.CgoSymABIs() - // With all user code typechecked, it's now safe to verify unused dot imports. - noder.CheckDotImports() - base.ExitIfErrors() - // Phase 6: Compute Addrtaken for names. + // Compute Addrtaken for names. // We need to wait until typechecking is done so that when we see &x[i] // we know that x has its address taken if x is an array, but not if x is a slice. // We compute Addrtaken in bulk here. @@ -227,7 +219,7 @@ func Main(archInit func(*ssagen.ArchInfo)) { } typecheck.IncrementalAddrtaken = true - // Phase 7: Eliminate some obviously dead code. + // Eliminate some obviously dead code. // Must happen after typechecking. for _, n := range typecheck.Target.Decls { if n.Op() == ir.ODCLFUNC { @@ -235,7 +227,7 @@ func Main(archInit func(*ssagen.ArchInfo)) { } } - // Phase 8: Decide how to capture closed variables. + // Decide how to capture closed variables. // This needs to run before escape analysis, // because variables captured by value do not escape. base.Timer.Start("fe", "capturevars") @@ -256,6 +248,7 @@ func Main(archInit func(*ssagen.ArchInfo)) { // otherwise lazily when used or re-exported. typecheck.AllImportedBodies() } + // Build init task. if initTask := pkginit.Task(); initTask != nil { typecheck.Export(initTask) @@ -311,6 +304,7 @@ func Main(archInit func(*ssagen.ArchInfo)) { // Prepare for SSA compilation. // This must be before peekitabs, because peekitabs // can trigger function compilation. + typecheck.InitRuntime() ssagen.InitConfig() // Just before compilation, compile itabs found on diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go index 40569af317..29bfde3ff2 100644 --- a/src/cmd/compile/internal/noder/noder.go +++ b/src/cmd/compile/internal/noder/noder.go @@ -25,6 +25,20 @@ import ( "cmd/internal/src" ) +func LoadPackage(filenames []string) { + base.Timer.Start("fe", "parse") + lines := ParseFiles(filenames) + base.Timer.Stop() + base.Timer.AddEvent(int64(lines), "lines") + + // Typecheck. + Package() + + // With all user code typechecked, it's now safe to verify unused dot imports. + CheckDotImports() + base.ExitIfErrors() +} + // ParseFiles concurrently parses files into *syntax.File structures. // Each declaration in every *syntax.File is converted to a syntax tree // and its root represented by *Node is appended to Target.Decls. diff --git a/src/cmd/compile/internal/typecheck/dcl.go b/src/cmd/compile/internal/typecheck/dcl.go index fd55f472ab..daec9848d0 100644 --- a/src/cmd/compile/internal/typecheck/dcl.go +++ b/src/cmd/compile/internal/typecheck/dcl.go @@ -15,7 +15,7 @@ import ( "cmd/internal/src" ) -var DeclContext ir.Class // PEXTERN/PAUTO +var DeclContext ir.Class = ir.PEXTERN // PEXTERN/PAUTO func DeclFunc(sym *types.Sym, tfn ir.Ntype) *ir.Func { if tfn.Op() != ir.OTFUNC { diff --git a/src/cmd/compile/internal/typecheck/syms.go b/src/cmd/compile/internal/typecheck/syms.go index f0e230432a..2251062e16 100644 --- a/src/cmd/compile/internal/typecheck/syms.go +++ b/src/cmd/compile/internal/typecheck/syms.go @@ -65,11 +65,9 @@ func Lookup(name string) *types.Sym { // so that the compiler can generate calls to them, // but does not make them visible to user code. func InitRuntime() { + base.Timer.Start("fe", "loadsys") types.Block = 1 - inimport = true - TypecheckAllowed = true - typs := runtimeTypes() for _, d := range &runtimeDecls { sym := ir.Pkgs.Runtime.Lookup(d.name) @@ -83,9 +81,6 @@ func InitRuntime() { base.Fatalf("unhandled declaration tag %v", d.tag) } } - - TypecheckAllowed = false - inimport = false } // LookupRuntimeFunc looks up Go function name in package runtime. This function diff --git a/src/cmd/compile/internal/typecheck/typecheck.go b/src/cmd/compile/internal/typecheck/typecheck.go index 4c6ac21fc6..c8d82443a1 100644 --- a/src/cmd/compile/internal/typecheck/typecheck.go +++ b/src/cmd/compile/internal/typecheck/typecheck.go @@ -31,13 +31,6 @@ var ( NeedRuntimeType = func(*types.Type) {} ) -func Init() { - initUniverse() - DeclContext = ir.PEXTERN - base.Timer.Start("fe", "loadsys") - InitRuntime() -} - func AssignExpr(n ir.Node) ir.Node { return typecheck(n, ctxExpr|ctxAssign) } func Expr(n ir.Node) ir.Node { return typecheck(n, ctxExpr) } func Stmt(n ir.Node) ir.Node { return typecheck(n, ctxStmt) } diff --git a/src/cmd/compile/internal/typecheck/universe.go b/src/cmd/compile/internal/typecheck/universe.go index 054f094cd3..f1e7ed4273 100644 --- a/src/cmd/compile/internal/typecheck/universe.go +++ b/src/cmd/compile/internal/typecheck/universe.go @@ -90,8 +90,8 @@ var unsafeFuncs = [...]struct { {"Sizeof", ir.OSIZEOF}, } -// initUniverse initializes the universe block. -func initUniverse() { +// InitUniverse initializes the universe block. +func InitUniverse() { if types.PtrSize == 0 { base.Fatalf("typeinit before betypeinit") } |