Commit 7124056f authored by Matthew Dempsky's avatar Matthew Dempsky

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: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 07a22dbd
......@@ -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))
}
}
......
......@@ -160,7 +160,6 @@ type Addr struct {
Class int8
Offset int64
Sym *LSym
Gotype *LSym
// argument value:
// for TYPE_SCONST, a string
......
......@@ -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
......
......@@ -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 {
......
......@@ -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 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment