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 := newname(lookupf("&%s", v.Sym.Name))
|
||||||
addr.Type = ptrto(v.Type)
|
addr.Type = ptrto(v.Type)
|
||||||
addr.Class = PPARAM
|
addr.Class = PPARAM
|
||||||
v.Name.Heapaddr = addr
|
v.Name.Param.Heapaddr = addr
|
||||||
fld.Nname = addr
|
fld.Nname = addr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -405,7 +405,7 @@ func transformclosure(xfunc *Node) {
|
||||||
addr.Used = true
|
addr.Used = true
|
||||||
addr.Name.Curfn = xfunc
|
addr.Name.Curfn = xfunc
|
||||||
xfunc.Func.Dcl = append(xfunc.Func.Dcl, addr)
|
xfunc.Func.Dcl = append(xfunc.Func.Dcl, addr)
|
||||||
v.Name.Heapaddr = addr
|
v.Name.Param.Heapaddr = addr
|
||||||
if v.Name.Byval {
|
if v.Name.Byval {
|
||||||
cv = nod(OADDR, cv, nil)
|
cv = nod(OADDR, cv, nil)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ func addrescapes(n *Node) {
|
||||||
// isParamStackCopy reports whether this is the on-stack copy of a
|
// isParamStackCopy reports whether this is the on-stack copy of a
|
||||||
// function parameter that moved to the heap.
|
// function parameter that moved to the heap.
|
||||||
func (n *Node) isParamStackCopy() bool {
|
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
|
// isParamHeapCopy reports whether this is the on-heap copy of
|
||||||
|
|
@ -137,7 +137,7 @@ func moveToHeap(n *Node) {
|
||||||
stackcopy.Type = n.Type
|
stackcopy.Type = n.Type
|
||||||
stackcopy.Xoffset = n.Xoffset
|
stackcopy.Xoffset = n.Xoffset
|
||||||
stackcopy.Class = n.Class
|
stackcopy.Class = n.Class
|
||||||
stackcopy.Name.Heapaddr = heapaddr
|
stackcopy.Name.Param.Heapaddr = heapaddr
|
||||||
if n.Class == PPARAMOUT {
|
if n.Class == PPARAMOUT {
|
||||||
// Make sure the pointer to the heap copy is kept live throughout the function.
|
// 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.
|
// 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.Class = PAUTOHEAP
|
||||||
n.Ullman = 2
|
n.Ullman = 2
|
||||||
n.Xoffset = 0
|
n.Xoffset = 0
|
||||||
n.Name.Heapaddr = heapaddr
|
n.Name.Param.Heapaddr = heapaddr
|
||||||
n.Esc = EscHeap
|
n.Esc = EscHeap
|
||||||
if Debug['m'] != 0 {
|
if Debug['m'] != 0 {
|
||||||
fmt.Printf("%v: moved to heap: %v\n", n.Line(), n)
|
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
|
_64bit uintptr // size on 64bit platforms
|
||||||
}{
|
}{
|
||||||
{Func{}, 100, 168},
|
{Func{}, 100, 168},
|
||||||
{Name{}, 44, 72},
|
{Name{}, 40, 64},
|
||||||
{Param{}, 24, 48},
|
{Param{}, 28, 56},
|
||||||
{Node{}, 96, 152},
|
{Node{}, 96, 152},
|
||||||
{Sym{}, 64, 120},
|
{Sym{}, 64, 120},
|
||||||
{Type{}, 64, 104},
|
{Type{}, 64, 104},
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,6 @@ func (n *Node) SetIota(x int64) {
|
||||||
type Name struct {
|
type Name struct {
|
||||||
Pack *Node // real package for import . names
|
Pack *Node // real package for import . names
|
||||||
Pkg *Pkg // pkg for OPACK nodes
|
Pkg *Pkg // pkg for OPACK nodes
|
||||||
Heapaddr *Node // temp holding heap address of param (could move to Param?)
|
|
||||||
Defn *Node // initializing assignment
|
Defn *Node // initializing assignment
|
||||||
Curfn *Node // function for local variables
|
Curfn *Node // function for local variables
|
||||||
Param *Param // additional fields for ONAME, OTYPE
|
Param *Param // additional fields for ONAME, OTYPE
|
||||||
|
|
@ -205,7 +204,8 @@ type Name struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Param struct {
|
type Param struct {
|
||||||
Ntype *Node
|
Ntype *Node
|
||||||
|
Heapaddr *Node // temp holding heap address of param
|
||||||
|
|
||||||
// ONAME PAUTOHEAP
|
// ONAME PAUTOHEAP
|
||||||
Stackcopy *Node // the PPARAM/PPARAMOUT on-stack slot (moved func params only)
|
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 {
|
if prealloc[v] == nil {
|
||||||
prealloc[v] = callnew(v.Type)
|
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.Colas = true
|
||||||
nn = typecheck(nn, Etop)
|
nn = typecheck(nn, Etop)
|
||||||
return walkstmt(nn)
|
return walkstmt(nn)
|
||||||
|
|
@ -314,7 +314,7 @@ func walkstmt(n *Node) *Node {
|
||||||
}
|
}
|
||||||
if cl == PPARAMOUT {
|
if cl == PPARAMOUT {
|
||||||
if ln.isParamStackCopy() {
|
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)
|
rl = append(rl, ln)
|
||||||
}
|
}
|
||||||
|
|
@ -463,7 +463,7 @@ func walkexpr(n *Node, init *Nodes) *Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
if n.Op == ONAME && n.Class == PAUTOHEAP {
|
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 = typecheck(nn, Erv)
|
||||||
nn = walkexpr(nn, init)
|
nn = walkexpr(nn, init)
|
||||||
nn.Left.NonNil = true
|
nn.Left.NonNil = true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue