diff options
author | Matthew Dempsky <mdempsky@google.com> | 2020-12-26 23:46:36 -0800 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2020-12-28 08:06:26 +0000 |
commit | 3383b5c74a4543d7232468201778a8db03cf133d (patch) | |
tree | 78f87098d4d9a06127d81316fd4d21904670df90 /src/cmd/compile/internal/objw | |
parent | f8afb8216ad69ed0c4e5ac8b5ad86cc0cb78749d (diff) | |
download | go-3383b5c74a4543d7232468201778a8db03cf133d.tar.gz go-3383b5c74a4543d7232468201778a8db03cf133d.zip |
[dev.regabi] cmd/compile: flatten dependency graph [generated]
This CL shuffles a couple functions around to help flatten the package
dependency graph somewhat:
1. ssa.LosesStmtMark is only ever used in associated with an
objw.Prog, so we might as well move it to that package. This removes a
dependency from objw (a relatively low-level utility package that
wraps cmd/internal/obj) on ssa (a large and relatively high-level
package).
2. Moves liveness.SetTypeBits into a new package typebits. A
single-function package is a bit on the silly side, but reflectdata
shouldn't need to depend on liveness (nor vice versa).
[git-generate]
cd src/cmd/compile/internal/ssa
rf '
mv LosesStmtMark prog.go
mv prog.go cmd/compile/internal/objw
'
cd ../liveness
rf '
mv SetTypeBits Set
mv Set typebits.go
rm typebits.go:/Copyright/+4,/^package/-0
mv typebits.go cmd/compile/internal/typebits
'
Change-Id: Ic9a983f0ad6c0cf1a537f99889699a8444699e6e
Reviewed-on: https://go-review.googlesource.com/c/go/+/280447
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>
Diffstat (limited to 'src/cmd/compile/internal/objw')
-rw-r--r-- | src/cmd/compile/internal/objw/prog.go | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/objw/prog.go b/src/cmd/compile/internal/objw/prog.go index 54028e47fd..8d24f94aa5 100644 --- a/src/cmd/compile/internal/objw/prog.go +++ b/src/cmd/compile/internal/objw/prog.go @@ -33,7 +33,6 @@ package objw import ( "cmd/compile/internal/base" "cmd/compile/internal/ir" - "cmd/compile/internal/ssa" "cmd/internal/obj" "cmd/internal/objabi" "cmd/internal/src" @@ -173,7 +172,7 @@ func (pp *Progs) Prog(as obj.As) *obj.Prog { p.Pos = pp.Pos if pp.Pos.IsStmt() == src.PosIsStmt { // Clear IsStmt for later Progs at this pos provided that as can be marked as a stmt - if ssa.LosesStmtMark(as) { + if LosesStmtMark(as) { return p } pp.Pos = pp.Pos.WithNotStmt() @@ -216,3 +215,12 @@ func (pp *Progs) SetText(fn *ir.Func) { ptxt.From.Name = obj.NAME_EXTERN ptxt.From.Sym = fn.LSym } + +// LosesStmtMark reports whether a prog with op as loses its statement mark on the way to DWARF. +// The attributes from some opcodes are lost in translation. +// TODO: this is an artifact of how funcpctab combines information for instructions at a single PC. +// Should try to fix it there. +func LosesStmtMark(as obj.As) bool { + // is_stmt does not work for these; it DOES for ANOP even though that generates no code. + return as == obj.APCDATA || as == obj.AFUNCDATA +} |