From 7124056f7e6f44faba822e4d96c18fde002b4566 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 24 Oct 2016 11:46:06 -0700 Subject: [PATCH] cmd/internal/obj: drop Addr's Gotype field MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/pgen.go | 4 +++- src/cmd/internal/obj/link.go | 1 - src/cmd/internal/obj/plist.go | 2 +- src/cmd/internal/obj/sizeof_test.go | 4 ++-- src/cmd/internal/obj/util.go | 3 --- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go index 8c5925ff04..1346ca156b 100644 --- a/src/cmd/compile/internal/gc/pgen.go +++ b/src/cmd/compile/internal/gc/pgen.go @@ -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)) } } diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index 48137a289b..fecd71f674 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -160,7 +160,6 @@ type Addr struct { Class int8 Offset int64 Sym *LSym - Gotype *LSym // argument value: // for TYPE_SCONST, a string diff --git a/src/cmd/internal/obj/plist.go b/src/cmd/internal/obj/plist.go index 4890d9c03f..9264218259 100644 --- a/src/cmd/internal/obj/plist.go +++ b/src/cmd/internal/obj/plist.go @@ -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 diff --git a/src/cmd/internal/obj/sizeof_test.go b/src/cmd/internal/obj/sizeof_test.go index 6cf8275630..65028ab4b9 100644 --- a/src/cmd/internal/obj/sizeof_test.go +++ b/src/cmd/internal/obj/sizeof_test.go @@ -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 { diff --git a/src/cmd/internal/obj/util.go b/src/cmd/internal/obj/util.go index bbff065f73..9f1c6f08c7 100644 --- a/src/cmd/internal/obj/util.go +++ b/src/cmd/internal/obj/util.go @@ -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 { -- 2.48.1