mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.regabi] cmd/compile: remove gc ↔ ssa cycle hacks
The cycle hacks existed because gc needed to import ssa which need to know about gc.Node. But now that's ir.Node, and there's no cycle anymore. Don't know how much it matters but LocalSlot is now one word shorter than before, because it holds a pointer instead of an interface for the *Node. That won't last long. Now that they're not necessary for interface satisfaction, IsSynthetic and IsAutoTmp can move to top-level ir functions. Change-Id: Ie511e93466cfa2b17d9a91afc4bd8d53fdb80453 Reviewed-on: https://go-review.googlesource.com/c/go/+/272931 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
84e2bd611f
commit
048debb224
16 changed files with 73 additions and 126 deletions
|
|
@ -5,6 +5,7 @@
|
|||
package ssa
|
||||
|
||||
import (
|
||||
"cmd/compile/internal/ir"
|
||||
"cmd/internal/dwarf"
|
||||
"cmd/internal/obj"
|
||||
"encoding/hex"
|
||||
|
|
@ -24,7 +25,7 @@ type FuncDebug struct {
|
|||
// Slots is all the slots used in the debug info, indexed by their SlotID.
|
||||
Slots []LocalSlot
|
||||
// The user variables, indexed by VarID.
|
||||
Vars []GCNode
|
||||
Vars []*ir.Node
|
||||
// The slots that make up each variable, indexed by VarID.
|
||||
VarSlots [][]SlotID
|
||||
// The location list data, indexed by VarID. Must be processed by PutLocationList.
|
||||
|
|
@ -165,7 +166,7 @@ func (s *debugState) logf(msg string, args ...interface{}) {
|
|||
type debugState struct {
|
||||
// See FuncDebug.
|
||||
slots []LocalSlot
|
||||
vars []GCNode
|
||||
vars []*ir.Node
|
||||
varSlots [][]SlotID
|
||||
lists [][]byte
|
||||
|
||||
|
|
@ -189,7 +190,7 @@ type debugState struct {
|
|||
// The pending location list entry for each user variable, indexed by VarID.
|
||||
pendingEntries []pendingEntry
|
||||
|
||||
varParts map[GCNode][]SlotID
|
||||
varParts map[*ir.Node][]SlotID
|
||||
blockDebug []BlockDebug
|
||||
pendingSlotLocs []VarLoc
|
||||
liveSlots []liveSlot
|
||||
|
|
@ -346,7 +347,7 @@ func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingEnabled bool, stackOffset fu
|
|||
}
|
||||
|
||||
if state.varParts == nil {
|
||||
state.varParts = make(map[GCNode][]SlotID)
|
||||
state.varParts = make(map[*ir.Node][]SlotID)
|
||||
} else {
|
||||
for n := range state.varParts {
|
||||
delete(state.varParts, n)
|
||||
|
|
@ -360,7 +361,7 @@ func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingEnabled bool, stackOffset fu
|
|||
state.vars = state.vars[:0]
|
||||
for i, slot := range f.Names {
|
||||
state.slots = append(state.slots, slot)
|
||||
if slot.N.IsSynthetic() {
|
||||
if ir.IsSynthetic(slot.N) {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -379,8 +380,8 @@ func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingEnabled bool, stackOffset fu
|
|||
for _, b := range f.Blocks {
|
||||
for _, v := range b.Values {
|
||||
if v.Op == OpVarDef || v.Op == OpVarKill {
|
||||
n := v.Aux.(GCNode)
|
||||
if n.IsSynthetic() {
|
||||
n := v.Aux.(*ir.Node)
|
||||
if ir.IsSynthetic(n) {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -425,7 +426,7 @@ func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingEnabled bool, stackOffset fu
|
|||
state.initializeCache(f, len(state.varParts), len(state.slots))
|
||||
|
||||
for i, slot := range f.Names {
|
||||
if slot.N.IsSynthetic() {
|
||||
if ir.IsSynthetic(slot.N) {
|
||||
continue
|
||||
}
|
||||
for _, value := range f.NamedValues[slot] {
|
||||
|
|
@ -717,8 +718,8 @@ func (state *debugState) processValue(v *Value, vSlots []SlotID, vReg *Register)
|
|||
|
||||
switch {
|
||||
case v.Op == OpVarDef, v.Op == OpVarKill:
|
||||
n := v.Aux.(GCNode)
|
||||
if n.IsSynthetic() {
|
||||
n := v.Aux.(*ir.Node)
|
||||
if ir.IsSynthetic(n) {
|
||||
break
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue