Skip to content

Commit f1fd130

Browse files
jakebaileygopherbot
authored andcommitted
cmd/compile: optimize abi.Type.GCData loads
This fires in just one place; stkframe.go's stkobjinit. But, it does make the struct literal entirely constants. Change-Id: Ice76cb3cddd97adee011fdaab40597839da2e89f Reviewed-on: https://go-review.googlesource.com/c/go/+/701300 Reviewed-by: Keith Randall <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Keith Randall <[email protected]> Reviewed-by: Mark Freeman <[email protected]> Auto-Submit: Michael Pratt <[email protected]>
1 parent dc960d0 commit f1fd130

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

src/cmd/compile/internal/liveness/plive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1493,7 +1493,7 @@ func (lv *Liveness) emitStackObjects() *obj.LSym {
14931493
if sz != int64(int32(sz)) {
14941494
base.Fatalf("stack object too big: %v of type %v, size %d", v, t, sz)
14951495
}
1496-
lsym, ptrBytes := reflectdata.GCSym(t)
1496+
lsym, ptrBytes := reflectdata.GCSym(t, false)
14971497
off = objw.Uint32(x, off, uint32(sz))
14981498
off = objw.Uint32(x, off, uint32(ptrBytes))
14991499
off = objw.SymPtrOff(x, off, lsym)

src/cmd/compile/internal/reflectdata/reflect.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,15 +1229,15 @@ func typesStrCmp(a, b typeAndStr) int {
12291229
// GC information is always a bitmask, never a gc program.
12301230
// GCSym may be called in concurrent backend, so it does not emit the symbol
12311231
// content.
1232-
func GCSym(t *types.Type) (lsym *obj.LSym, ptrdata int64) {
1232+
func GCSym(t *types.Type, onDemandAllowed bool) (lsym *obj.LSym, ptrdata int64) {
12331233
// Record that we need to emit the GC symbol.
12341234
gcsymmu.Lock()
12351235
if _, ok := gcsymset[t]; !ok {
12361236
gcsymset[t] = struct{}{}
12371237
}
12381238
gcsymmu.Unlock()
12391239

1240-
lsym, _, ptrdata = dgcsym(t, false, false)
1240+
lsym, _, ptrdata = dgcsym(t, false, onDemandAllowed)
12411241
return
12421242
}
12431243

src/cmd/compile/internal/ssa/rewrite.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2067,7 +2067,7 @@ func isFixedLoad(v *Value, sym Sym, off int64) bool {
20672067
for _, f := range rttype.Type.Fields() {
20682068
if f.Offset == off && copyCompatibleType(v.Type, f.Type) {
20692069
switch f.Sym.Name {
2070-
case "Size_", "PtrBytes", "Hash", "Kind_":
2070+
case "Size_", "PtrBytes", "Hash", "Kind_", "GCData":
20712071
return true
20722072
default:
20732073
// fmt.Println("unknown field", f.Sym.Name)
@@ -2147,6 +2147,12 @@ func rewriteFixedLoad(v *Value, sym Sym, sb *Value, off int64) *Value {
21472147
v.reset(OpConst8)
21482148
v.AuxInt = int64(reflectdata.ABIKindOfType(t))
21492149
return v
2150+
case "GCData":
2151+
gcdata, _ := reflectdata.GCSym(t, true)
2152+
v.reset(OpAddr)
2153+
v.Aux = symToAux(gcdata)
2154+
v.AddArg(sb)
2155+
return v
21502156
default:
21512157
base.Fatalf("unknown field %s for fixedLoad of %s at offset %d", f.Sym.Name, lsym.Name, off)
21522158
}

0 commit comments

Comments
 (0)