mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: move Node.Class to flags
Put it at position zero, since it is fairly hot. This shrinks gc.Node into a smaller size class on 64 bit systems. name old time/op new time/op delta Template 193ms ± 5% 192ms ± 3% ~ (p=0.353 n=94+93) Unicode 86.1ms ± 5% 85.0ms ± 4% -1.23% (p=0.000 n=95+98) GoTypes 546ms ± 3% 544ms ± 4% -0.40% (p=0.007 n=94+97) Compiler 2.56s ± 3% 2.54s ± 3% -0.67% (p=0.000 n=99+97) SSA 5.13s ± 2% 5.10s ± 3% -0.55% (p=0.000 n=94+98) Flate 122ms ± 6% 121ms ± 4% -0.75% (p=0.002 n=97+95) GoParser 144ms ± 5% 144ms ± 4% ~ (p=0.298 n=98+97) Reflect 348ms ± 4% 349ms ± 4% ~ (p=0.350 n=98+97) Tar 105ms ± 5% 104ms ± 5% ~ (p=0.154 n=96+98) XML 200ms ± 5% 198ms ± 4% -0.71% (p=0.015 n=97+98) [Geo mean] 330ms 328ms -0.52% name old user-time/op new user-time/op delta Template 229ms ±11% 224ms ± 7% -2.16% (p=0.001 n=100+87) Unicode 109ms ± 5% 109ms ± 6% ~ (p=0.897 n=96+91) GoTypes 712ms ± 4% 709ms ± 4% ~ (p=0.085 n=96+98) Compiler 3.41s ± 3% 3.36s ± 3% -1.43% (p=0.000 n=98+98) SSA 7.46s ± 3% 7.31s ± 3% -2.02% (p=0.000 n=100+99) Flate 145ms ± 6% 143ms ± 6% -1.11% (p=0.001 n=99+97) GoParser 177ms ± 5% 176ms ± 5% -0.78% (p=0.018 n=95+95) Reflect 432ms ± 7% 435ms ± 9% ~ (p=0.296 n=100+100) Tar 121ms ± 7% 121ms ± 5% ~ (p=0.072 n=100+95) XML 241ms ± 4% 239ms ± 5% ~ (p=0.085 n=97+99) [Geo mean] 413ms 410ms -0.73% name old alloc/op new alloc/op delta Template 38.4MB ± 0% 37.7MB ± 0% -1.85% (p=0.008 n=5+5) Unicode 30.1MB ± 0% 28.8MB ± 0% -4.09% (p=0.008 n=5+5) GoTypes 112MB ± 0% 110MB ± 0% -1.69% (p=0.008 n=5+5) Compiler 470MB ± 0% 461MB ± 0% -1.91% (p=0.008 n=5+5) SSA 1.13GB ± 0% 1.11GB ± 0% -1.70% (p=0.008 n=5+5) Flate 25.0MB ± 0% 24.6MB ± 0% -1.67% (p=0.008 n=5+5) GoParser 31.6MB ± 0% 31.1MB ± 0% -1.66% (p=0.008 n=5+5) Reflect 77.1MB ± 0% 75.8MB ± 0% -1.69% (p=0.008 n=5+5) Tar 26.3MB ± 0% 25.7MB ± 0% -2.06% (p=0.008 n=5+5) XML 41.9MB ± 0% 41.1MB ± 0% -1.93% (p=0.008 n=5+5) [Geo mean] 73.5MB 72.0MB -2.03% name old allocs/op new allocs/op delta Template 383k ± 0% 383k ± 0% ~ (p=0.690 n=5+5) Unicode 343k ± 0% 343k ± 0% ~ (p=0.841 n=5+5) GoTypes 1.16M ± 0% 1.16M ± 0% ~ (p=0.310 n=5+5) Compiler 4.43M ± 0% 4.42M ± 0% -0.17% (p=0.008 n=5+5) SSA 9.85M ± 0% 9.85M ± 0% ~ (p=0.310 n=5+5) Flate 236k ± 0% 236k ± 1% ~ (p=0.841 n=5+5) GoParser 320k ± 0% 320k ± 0% ~ (p=0.421 n=5+5) Reflect 988k ± 0% 987k ± 0% ~ (p=0.690 n=5+5) Tar 252k ± 0% 251k ± 0% ~ (p=0.095 n=5+5) XML 399k ± 0% 399k ± 0% ~ (p=1.000 n=5+5) [Geo mean] 741k 740k -0.07% Change-Id: I9e952b58a98e30a12494304db9ce50d0a85e459c Reviewed-on: https://go-review.googlesource.com/41797 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Marvin Stenger <marvin.stenger94@gmail.com>
This commit is contained in:
parent
2181653be6
commit
386765afdf
28 changed files with 237 additions and 218 deletions
|
|
@ -43,7 +43,7 @@ func init1(n *Node, out *[]*Node) {
|
|||
init1(n1, out)
|
||||
}
|
||||
|
||||
if n.Left != nil && n.Type != nil && n.Left.Op == OTYPE && n.Class == PFUNC {
|
||||
if n.Left != nil && n.Type != nil && n.Left.Op == OTYPE && n.Class() == PFUNC {
|
||||
// Methods called as Type.Method(receiver, ...).
|
||||
// Definitions for method expressions are stored in type->nname.
|
||||
init1(asNode(n.Type.FuncType().Nname), out)
|
||||
|
|
@ -52,7 +52,7 @@ func init1(n *Node, out *[]*Node) {
|
|||
if n.Op != ONAME {
|
||||
return
|
||||
}
|
||||
switch n.Class {
|
||||
switch n.Class() {
|
||||
case PEXTERN, PFUNC:
|
||||
default:
|
||||
if isblank(n) && n.Name.Curfn == nil && n.Name.Defn != nil && n.Name.Defn.Initorder() == InitNotStarted {
|
||||
|
|
@ -76,7 +76,7 @@ func init1(n *Node, out *[]*Node) {
|
|||
// Conversely, if there exists an initialization cycle involving
|
||||
// a variable in the program, the tree walk will reach a cycle
|
||||
// involving that variable.
|
||||
if n.Class != PFUNC {
|
||||
if n.Class() != PFUNC {
|
||||
foundinitloop(n, n)
|
||||
}
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ func init1(n *Node, out *[]*Node) {
|
|||
if x == n {
|
||||
break
|
||||
}
|
||||
if x.Class != PFUNC {
|
||||
if x.Class() != PFUNC {
|
||||
foundinitloop(n, x)
|
||||
}
|
||||
}
|
||||
|
|
@ -257,7 +257,7 @@ func initfix(l []*Node) []*Node {
|
|||
// compilation of top-level (static) assignments
|
||||
// into DATA statements if at all possible.
|
||||
func staticinit(n *Node, out *[]*Node) bool {
|
||||
if n.Op != ONAME || n.Class != PEXTERN || n.Name.Defn == nil || n.Name.Defn.Op != OAS {
|
||||
if n.Op != ONAME || n.Class() != PEXTERN || n.Name.Defn == nil || n.Name.Defn.Op != OAS {
|
||||
Fatalf("staticinit")
|
||||
}
|
||||
|
||||
|
|
@ -273,11 +273,11 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool {
|
|||
if r.Op != ONAME {
|
||||
return false
|
||||
}
|
||||
if r.Class == PFUNC {
|
||||
if r.Class() == PFUNC {
|
||||
gdata(l, r, Widthptr)
|
||||
return true
|
||||
}
|
||||
if r.Class != PEXTERN || r.Sym.Pkg != localpkg {
|
||||
if r.Class() != PEXTERN || r.Sym.Pkg != localpkg {
|
||||
return false
|
||||
}
|
||||
if r.Name.Defn == nil { // probably zeroed but perhaps supplied externally and of unknown value
|
||||
|
|
@ -417,7 +417,7 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool {
|
|||
//dump("not static ptrlit", r);
|
||||
|
||||
case OSTRARRAYBYTE:
|
||||
if l.Class == PEXTERN && r.Left.Op == OLITERAL {
|
||||
if l.Class() == PEXTERN && r.Left.Op == OLITERAL {
|
||||
sval := r.Left.Val().U.(string)
|
||||
slicebytes(l, sval, len(sval))
|
||||
return true
|
||||
|
|
@ -591,7 +591,7 @@ func isliteral(n *Node) bool {
|
|||
}
|
||||
|
||||
func (n *Node) isSimpleName() bool {
|
||||
return n.Op == ONAME && n.Addable() && n.Class != PAUTOHEAP && n.Class != PEXTERN
|
||||
return n.Op == ONAME && n.Addable() && n.Class() != PAUTOHEAP && n.Class() != PEXTERN
|
||||
}
|
||||
|
||||
func litas(l *Node, r *Node, init *Nodes) {
|
||||
|
|
@ -787,7 +787,7 @@ func slicelit(ctxt initContext, n *Node, var_ *Node, init *Nodes) {
|
|||
// copy static to slice
|
||||
var_ = typecheck(var_, Erv|Easgn)
|
||||
var nam Node
|
||||
if !stataddr(&nam, var_) || nam.Class != PEXTERN {
|
||||
if !stataddr(&nam, var_) || nam.Class() != PEXTERN {
|
||||
Fatalf("slicelit: %v", var_)
|
||||
}
|
||||
|
||||
|
|
@ -1354,7 +1354,7 @@ func genAsStatic(as *Node) {
|
|||
}
|
||||
|
||||
var nam Node
|
||||
if !stataddr(&nam, as.Left) || (nam.Class != PEXTERN && as.Left != nblank) {
|
||||
if !stataddr(&nam, as.Left) || (nam.Class() != PEXTERN && as.Left != nblank) {
|
||||
Fatalf("genAsStatic: lhs %v", as.Left)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue