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:
parent
07a22dbd34
commit
7124056f7e
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user