go/src/cmd/compile/internal/gc/opnames.go
Matthew Dempsky add3ff549a cmd/compile: add OSTRUCTKEY for keyed struct literals
Previously, we used OKEY nodes to represent keyed struct literal
elements. The field names were represented by an ONAME node, but this
is clumsy because it's the only remaining case where ONAME was used to
represent a bare identifier and not a variable.

This CL introduces a new OSTRUCTKEY node op for use in struct
literals. These ops instead store the field name in the node's own Sym
field. This is similar in spirit to golang.org/cl/20890.

Significant reduction in allocations for struct literal heavy code
like package unicode:

name       old time/op     new time/op     delta
Template       345ms ± 6%      341ms ± 6%     ~           (p=0.141 n=29+28)
Unicode        200ms ± 9%      184ms ± 7%   -7.77%        (p=0.000 n=29+30)
GoTypes        1.04s ± 3%      1.05s ± 3%     ~           (p=0.096 n=30+30)
Compiler       4.47s ± 9%      4.49s ± 6%     ~           (p=0.890 n=29+29)

name       old user-ns/op  new user-ns/op  delta
Template        523M ±13%       516M ±17%     ~           (p=0.400 n=29+30)
Unicode         334M ±27%       314M ±30%     ~           (p=0.093 n=30+30)
GoTypes        1.53G ±10%      1.52G ±10%     ~           (p=0.572 n=30+30)
Compiler       6.28G ± 7%      6.34G ±11%     ~           (p=0.300 n=30+30)

name       old alloc/op    new alloc/op    delta
Template      44.5MB ± 0%     44.4MB ± 0%   -0.35%        (p=0.000 n=27+30)
Unicode       39.2MB ± 0%     34.5MB ± 0%  -11.79%        (p=0.000 n=26+30)
GoTypes        125MB ± 0%      125MB ± 0%   -0.12%        (p=0.000 n=29+30)
Compiler       515MB ± 0%      515MB ± 0%   -0.10%        (p=0.000 n=29+30)

name       old allocs/op   new allocs/op   delta
Template        426k ± 0%       424k ± 0%   -0.39%        (p=0.000 n=29+30)
Unicode         374k ± 0%       323k ± 0%  -13.67%        (p=0.000 n=29+30)
GoTypes        1.21M ± 0%      1.21M ± 0%   -0.14%        (p=0.000 n=29+29)
Compiler       4.40M ± 0%      4.39M ± 0%   -0.13%        (p=0.000 n=29+30)

Passes toolstash/buildall.

Change-Id: Iba4ee765dd1748f67e52fcade1cd75c9f6e13fa9
Reviewed-on: https://go-review.googlesource.com/30974
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-10-13 09:29:51 +00:00

171 lines
4.7 KiB
Go

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package gc
// auto generated by go tool dist
var opnames = []string{
OXXX: "XXX",
ONAME: "NAME",
ONONAME: "NONAME",
OTYPE: "TYPE",
OPACK: "PACK",
OLITERAL: "LITERAL",
OADD: "ADD",
OSUB: "SUB",
OOR: "OR",
OXOR: "XOR",
OADDSTR: "ADDSTR",
OADDR: "ADDR",
OANDAND: "ANDAND",
OAPPEND: "APPEND",
OARRAYBYTESTR: "ARRAYBYTESTR",
OARRAYBYTESTRTMP: "ARRAYBYTESTRTMP",
OARRAYRUNESTR: "ARRAYRUNESTR",
OSTRARRAYBYTE: "STRARRAYBYTE",
OSTRARRAYBYTETMP: "STRARRAYBYTETMP",
OSTRARRAYRUNE: "STRARRAYRUNE",
OAS: "AS",
OAS2: "AS2",
OAS2FUNC: "AS2FUNC",
OAS2RECV: "AS2RECV",
OAS2MAPR: "AS2MAPR",
OAS2DOTTYPE: "AS2DOTTYPE",
OASOP: "ASOP",
OASWB: "ASWB",
OCALL: "CALL",
OCALLFUNC: "CALLFUNC",
OCALLMETH: "CALLMETH",
OCALLINTER: "CALLINTER",
OCALLPART: "CALLPART",
OCAP: "CAP",
OCLOSE: "CLOSE",
OCLOSURE: "CLOSURE",
OCMPIFACE: "CMPIFACE",
OCMPSTR: "CMPSTR",
OCOMPLIT: "COMPLIT",
OMAPLIT: "MAPLIT",
OSTRUCTLIT: "STRUCTLIT",
OARRAYLIT: "ARRAYLIT",
OSLICELIT: "SLICELIT",
OPTRLIT: "PTRLIT",
OCONV: "CONV",
OCONVIFACE: "CONVIFACE",
OCONVNOP: "CONVNOP",
OCOPY: "COPY",
ODCL: "DCL",
ODCLFUNC: "DCLFUNC",
ODCLFIELD: "DCLFIELD",
ODCLCONST: "DCLCONST",
ODCLTYPE: "DCLTYPE",
ODELETE: "DELETE",
ODOT: "DOT",
ODOTPTR: "DOTPTR",
ODOTMETH: "DOTMETH",
ODOTINTER: "DOTINTER",
OXDOT: "XDOT",
ODOTTYPE: "DOTTYPE",
ODOTTYPE2: "DOTTYPE2",
OEQ: "EQ",
ONE: "NE",
OLT: "LT",
OLE: "LE",
OGE: "GE",
OGT: "GT",
OIND: "IND",
OINDEX: "INDEX",
OINDEXMAP: "INDEXMAP",
OKEY: "KEY",
OSTRUCTKEY: "STRUCTKEY",
OLEN: "LEN",
OMAKE: "MAKE",
OMAKECHAN: "MAKECHAN",
OMAKEMAP: "MAKEMAP",
OMAKESLICE: "MAKESLICE",
OMUL: "MUL",
ODIV: "DIV",
OMOD: "MOD",
OLSH: "LSH",
ORSH: "RSH",
OAND: "AND",
OANDNOT: "ANDNOT",
ONEW: "NEW",
ONOT: "NOT",
OCOM: "COM",
OPLUS: "PLUS",
OMINUS: "MINUS",
OOROR: "OROR",
OPANIC: "PANIC",
OPRINT: "PRINT",
OPRINTN: "PRINTN",
OPAREN: "PAREN",
OSEND: "SEND",
OSLICE: "SLICE",
OSLICEARR: "SLICEARR",
OSLICESTR: "SLICESTR",
OSLICE3: "SLICE3",
OSLICE3ARR: "SLICE3ARR",
ORECOVER: "RECOVER",
ORECV: "RECV",
ORUNESTR: "RUNESTR",
OSELRECV: "SELRECV",
OSELRECV2: "SELRECV2",
OIOTA: "IOTA",
OREAL: "REAL",
OIMAG: "IMAG",
OCOMPLEX: "COMPLEX",
OBLOCK: "BLOCK",
OBREAK: "BREAK",
OCASE: "CASE",
OXCASE: "XCASE",
OCONTINUE: "CONTINUE",
ODEFER: "DEFER",
OEMPTY: "EMPTY",
OFALL: "FALL",
OXFALL: "XFALL",
OFOR: "FOR",
OGOTO: "GOTO",
OIF: "IF",
OLABEL: "LABEL",
OPROC: "PROC",
ORANGE: "RANGE",
ORETURN: "RETURN",
OSELECT: "SELECT",
OSWITCH: "SWITCH",
OTYPESW: "TYPESW",
OTCHAN: "TCHAN",
OTMAP: "TMAP",
OTSTRUCT: "TSTRUCT",
OTINTER: "TINTER",
OTFUNC: "TFUNC",
OTARRAY: "TARRAY",
ODDD: "DDD",
ODDDARG: "DDDARG",
OINLCALL: "INLCALL",
OEFACE: "EFACE",
OITAB: "ITAB",
OIDATA: "IDATA",
OSPTR: "SPTR",
OCLOSUREVAR: "CLOSUREVAR",
OCFUNC: "CFUNC",
OCHECKNIL: "CHECKNIL",
OVARKILL: "VARKILL",
OVARLIVE: "VARLIVE",
OREGISTER: "REGISTER",
OINDREG: "INDREG",
OCMP: "CMP",
ODEC: "DEC",
OINC: "INC",
OEXTEND: "EXTEND",
OHMUL: "HMUL",
OLROT: "LROT",
ORROTC: "RROTC",
ORETJMP: "RETJMP",
OPS: "PS",
OPC: "PC",
OSQRT: "SQRT",
OGETG: "GETG",
OEND: "END",
}