mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: move Heapaddr field from Name to Param
No performance impact, just cleanup. Passes toolstash -cmp. Change-Id: Ic7957d2686de53a9680c2bdefe926cccccd73a5c Reviewed-on: https://go-review.googlesource.com/36316 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
5c90e1cf8a
commit
ad784caa74
5 changed files with 12 additions and 12 deletions
|
|
@ -347,7 +347,7 @@ func transformclosure(xfunc *Node) {
|
|||
addr := newname(lookupf("&%s", v.Sym.Name))
|
||||
addr.Type = ptrto(v.Type)
|
||||
addr.Class = PPARAM
|
||||
v.Name.Heapaddr = addr
|
||||
v.Name.Param.Heapaddr = addr
|
||||
fld.Nname = addr
|
||||
}
|
||||
|
||||
|
|
@ -405,7 +405,7 @@ func transformclosure(xfunc *Node) {
|
|||
addr.Used = true
|
||||
addr.Name.Curfn = xfunc
|
||||
xfunc.Func.Dcl = append(xfunc.Func.Dcl, addr)
|
||||
v.Name.Heapaddr = addr
|
||||
v.Name.Param.Heapaddr = addr
|
||||
if v.Name.Byval {
|
||||
cv = nod(OADDR, cv, nil)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ func addrescapes(n *Node) {
|
|||
// isParamStackCopy reports whether this is the on-stack copy of a
|
||||
// function parameter that moved to the heap.
|
||||
func (n *Node) isParamStackCopy() bool {
|
||||
return n.Op == ONAME && (n.Class == PPARAM || n.Class == PPARAMOUT) && n.Name.Heapaddr != nil
|
||||
return n.Op == ONAME && (n.Class == PPARAM || n.Class == PPARAMOUT) && n.Name.Param.Heapaddr != nil
|
||||
}
|
||||
|
||||
// isParamHeapCopy reports whether this is the on-heap copy of
|
||||
|
|
@ -137,7 +137,7 @@ func moveToHeap(n *Node) {
|
|||
stackcopy.Type = n.Type
|
||||
stackcopy.Xoffset = n.Xoffset
|
||||
stackcopy.Class = n.Class
|
||||
stackcopy.Name.Heapaddr = heapaddr
|
||||
stackcopy.Name.Param.Heapaddr = heapaddr
|
||||
if n.Class == PPARAMOUT {
|
||||
// Make sure the pointer to the heap copy is kept live throughout the function.
|
||||
// The function could panic at any point, and then a defer could recover.
|
||||
|
|
@ -174,7 +174,7 @@ func moveToHeap(n *Node) {
|
|||
n.Class = PAUTOHEAP
|
||||
n.Ullman = 2
|
||||
n.Xoffset = 0
|
||||
n.Name.Heapaddr = heapaddr
|
||||
n.Name.Param.Heapaddr = heapaddr
|
||||
n.Esc = EscHeap
|
||||
if Debug['m'] != 0 {
|
||||
fmt.Printf("%v: moved to heap: %v\n", n.Line(), n)
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ func TestSizeof(t *testing.T) {
|
|||
_64bit uintptr // size on 64bit platforms
|
||||
}{
|
||||
{Func{}, 100, 168},
|
||||
{Name{}, 44, 72},
|
||||
{Param{}, 24, 48},
|
||||
{Name{}, 40, 64},
|
||||
{Param{}, 28, 56},
|
||||
{Node{}, 96, 152},
|
||||
{Sym{}, 64, 120},
|
||||
{Type{}, 64, 104},
|
||||
|
|
|
|||
|
|
@ -189,7 +189,6 @@ func (n *Node) SetIota(x int64) {
|
|||
type Name struct {
|
||||
Pack *Node // real package for import . names
|
||||
Pkg *Pkg // pkg for OPACK nodes
|
||||
Heapaddr *Node // temp holding heap address of param (could move to Param?)
|
||||
Defn *Node // initializing assignment
|
||||
Curfn *Node // function for local variables
|
||||
Param *Param // additional fields for ONAME, OTYPE
|
||||
|
|
@ -206,6 +205,7 @@ type Name struct {
|
|||
|
||||
type Param struct {
|
||||
Ntype *Node
|
||||
Heapaddr *Node // temp holding heap address of param
|
||||
|
||||
// ONAME PAUTOHEAP
|
||||
Stackcopy *Node // the PPARAM/PPARAMOUT on-stack slot (moved func params only)
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ func walkstmt(n *Node) *Node {
|
|||
if prealloc[v] == nil {
|
||||
prealloc[v] = callnew(v.Type)
|
||||
}
|
||||
nn := nod(OAS, v.Name.Heapaddr, prealloc[v])
|
||||
nn := nod(OAS, v.Name.Param.Heapaddr, prealloc[v])
|
||||
nn.Colas = true
|
||||
nn = typecheck(nn, Etop)
|
||||
return walkstmt(nn)
|
||||
|
|
@ -314,7 +314,7 @@ func walkstmt(n *Node) *Node {
|
|||
}
|
||||
if cl == PPARAMOUT {
|
||||
if ln.isParamStackCopy() {
|
||||
ln = walkexpr(typecheck(nod(OIND, ln.Name.Heapaddr, nil), Erv), nil)
|
||||
ln = walkexpr(typecheck(nod(OIND, ln.Name.Param.Heapaddr, nil), Erv), nil)
|
||||
}
|
||||
rl = append(rl, ln)
|
||||
}
|
||||
|
|
@ -463,7 +463,7 @@ func walkexpr(n *Node, init *Nodes) *Node {
|
|||
}
|
||||
|
||||
if n.Op == ONAME && n.Class == PAUTOHEAP {
|
||||
nn := nod(OIND, n.Name.Heapaddr, nil)
|
||||
nn := nod(OIND, n.Name.Param.Heapaddr, nil)
|
||||
nn = typecheck(nn, Erv)
|
||||
nn = walkexpr(nn, init)
|
||||
nn.Left.NonNil = true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue