From 7971864267e9f6139ef1cd37ce70624e1b1cb92b Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Sun, 13 Mar 2016 17:48:17 -0700 Subject: [PATCH] cmd/compile: simplify InitPlan Passes toolstash -cmp. Change-Id: Iaa0d78c2552efb29e67f6c99c7287f8566027add Reviewed-on: https://go-review.googlesource.com/20673 Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/gc/sinit.go | 35 +++++++--------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/src/cmd/compile/internal/gc/sinit.go b/src/cmd/compile/internal/gc/sinit.go index 8b3ea538f1..2ec54d2bdb 100644 --- a/src/cmd/compile/internal/gc/sinit.go +++ b/src/cmd/compile/internal/gc/sinit.go @@ -22,10 +22,7 @@ type InitEntry struct { } type InitPlan struct { - Lit int64 - Zero int64 - Expr int64 - E []InitEntry + E []InitEntry } var ( @@ -1261,7 +1258,7 @@ func initplan(n *Node) { if a.Op != OKEY || !Smallintconst(a.Left) { Fatalf("initplan arraylit") } - addvalue(p, n.Type.Type.Width*Mpgetfix(a.Left.Val().U.(*Mpint)), nil, a.Right) + addvalue(p, n.Type.Type.Width*Mpgetfix(a.Left.Val().U.(*Mpint)), a.Right) } case OSTRUCTLIT: @@ -1269,7 +1266,7 @@ func initplan(n *Node) { if a.Op != OKEY || a.Left.Type == nil { Fatalf("initplan structlit") } - addvalue(p, a.Left.Type.Width, nil, a.Right) + addvalue(p, a.Left.Type.Width, a.Right) } case OMAPLIT: @@ -1277,15 +1274,14 @@ func initplan(n *Node) { if a.Op != OKEY { Fatalf("initplan maplit") } - addvalue(p, -1, a.Left, a.Right) + addvalue(p, -1, a.Right) } } } -func addvalue(p *InitPlan, xoffset int64, key *Node, n *Node) { +func addvalue(p *InitPlan, xoffset int64, n *Node) { // special case: zero can be dropped entirely if iszero(n) { - p.Zero += n.Type.Width return } @@ -1294,23 +1290,15 @@ func addvalue(p *InitPlan, xoffset int64, key *Node, n *Node) { initplan(n) q := initplans[n] for _, qe := range q.E { - e := entry(p) - *e = qe - e.Xoffset += xoffset + // qe is a copy; we are not modifying entries in q.E + qe.Xoffset += xoffset + p.E = append(p.E, qe) } return } // add to plan - if n.Op == OLITERAL { - p.Lit += n.Type.Width - } else { - p.Expr += n.Type.Width - } - - e := entry(p) - e.Xoffset = xoffset - e.Expr = n + p.E = append(p.E, InitEntry{Xoffset: xoffset, Expr: n}) } func iszero(n *Node) bool { @@ -1363,11 +1351,6 @@ func isvaluelit(n *Node) bool { return (n.Op == OARRAYLIT && Isfixedarray(n.Type)) || n.Op == OSTRUCTLIT } -func entry(p *InitPlan) *InitEntry { - p.E = append(p.E, InitEntry{}) - return &p.E[len(p.E)-1] -} - // gen_as_init attempts to emit static data for n and reports whether it succeeded. // If reportOnly is true, it does not emit static data and does not modify the AST. func gen_as_init(n *Node, reportOnly bool) bool {