1
0
mirror of https://github.com/golang/go synced 2024-11-18 03:54:50 -07:00

cmd/internal/obj: drop Addr's Gotype field

The Gotype field is only used for ATYPE instructions. Instead of
specially storing the Go type symbol in From.Gotype, just store it in
To.Sym like any other 2-argument instruction would.

Modest reduction in allocations:

name       old alloc/op    new alloc/op    delta
Template      42.0MB ± 0%     41.8MB ± 0%  -0.40%         (p=0.000 n=9+10)
Unicode       34.3MB ± 0%     34.1MB ± 0%  -0.48%         (p=0.000 n=9+10)
GoTypes        122MB ± 0%      122MB ± 0%  -0.14%         (p=0.000 n=9+10)
Compiler       518MB ± 0%      518MB ± 0%  -0.04%         (p=0.000 n=9+10)

Passes toolstash -cmp.

Change-Id: I0e603266b5d7d4e405106a26369e22773a0d3a91
Reviewed-on: https://go-review.googlesource.com/31850
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Matthew Dempsky 2016-10-24 11:46:06 -07:00
parent 07a22dbd34
commit 7124056f7e
5 changed files with 6 additions and 8 deletions

View File

@ -425,7 +425,9 @@ func compile(fn *Node) {
fallthrough
case PPARAM, PPARAMOUT:
p := Gins(obj.ATYPE, n, nil)
p.From.Gotype = Linksym(ngotype(n))
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
p.To.Sym = Linksym(ngotype(n))
}
}

View File

@ -160,7 +160,6 @@ type Addr struct {
Class int8
Offset int64
Sym *LSym
Gotype *LSym
// argument value:
// for TYPE_SCONST, a string

View File

@ -69,7 +69,7 @@ func flushplist(ctxt *Link, freeProgs bool) {
a.Asym = p.From.Sym
a.Aoffset = int32(p.From.Offset)
a.Name = int16(p.From.Name)
a.Gotype = p.From.Gotype
a.Gotype = p.To.Sym
a.Link = curtext.Autom
curtext.Autom = a
continue

View File

@ -22,9 +22,9 @@ func TestSizeof(t *testing.T) {
_32bit uintptr // size on 32bit platforms
_64bit uintptr // size on 64bit platforms
}{
{Addr{}, 44, 72},
{Addr{}, 40, 64},
{LSym{}, 80, 136},
{Prog{}, 152, 240},
{Prog{}, 144, 224},
}
for _, tt := range tests {

View File

@ -240,9 +240,6 @@ func Dconv(p *Prog, a *Addr) string {
if a.Index != REG_NONE {
str += fmt.Sprintf("(%v*%d)", Rconv(int(a.Index)), int(a.Scale))
}
if p != nil && p.As == ATYPE && a.Gotype != nil {
str += fmt.Sprintf("%s", a.Gotype.Name)
}
case TYPE_CONST:
if a.Reg != 0 {