cmd/compile: use runtime hash func for known types
Those functions are defined in package runtime already, so just use them
instead of creating ONAME nodes with nil Func.
Change-Id: If29814a5254793c578c15b70f9c194b7414911d4
Reviewed-on: https://go-review.googlesource.com/c/go/+/436959
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
diff --git a/src/cmd/compile/internal/reflectdata/alg.go b/src/cmd/compile/internal/reflectdata/alg.go
index 4f174a3..bcc5112 100644
--- a/src/cmd/compile/internal/reflectdata/alg.go
+++ b/src/cmd/compile/internal/reflectdata/alg.go
@@ -235,6 +235,12 @@
return closure
}
+func runtimeHashFor(name string, t *types.Type) *ir.Name {
+ n := typecheck.LookupRuntime(name)
+ n = typecheck.SubstArgTypes(n, t)
+ return n
+}
+
func hashfor(t *types.Type) ir.Node {
var sym *types.Sym
@@ -242,19 +248,19 @@
case types.AMEM:
base.Fatalf("hashfor with AMEM type")
case types.AINTER:
- sym = ir.Pkgs.Runtime.Lookup("interhash")
+ return runtimeHashFor("interhash", t)
case types.ANILINTER:
- sym = ir.Pkgs.Runtime.Lookup("nilinterhash")
+ return runtimeHashFor("nilinterhash", t)
case types.ASTRING:
- sym = ir.Pkgs.Runtime.Lookup("strhash")
+ return runtimeHashFor("strhash", t)
case types.AFLOAT32:
- sym = ir.Pkgs.Runtime.Lookup("f32hash")
+ return runtimeHashFor("f32hash", t)
case types.AFLOAT64:
- sym = ir.Pkgs.Runtime.Lookup("f64hash")
+ return runtimeHashFor("f64hash", t)
case types.ACPLX64:
- sym = ir.Pkgs.Runtime.Lookup("c64hash")
+ return runtimeHashFor("c64hash", t)
case types.ACPLX128:
- sym = ir.Pkgs.Runtime.Lookup("c128hash")
+ return runtimeHashFor("c128hash", t)
default:
// Note: the caller of hashfor ensured that this symbol
// exists and has a body by calling genhash for t.
diff --git a/src/cmd/compile/internal/typecheck/_builtin/runtime.go b/src/cmd/compile/internal/typecheck/_builtin/runtime.go
index 3b32044..2e1e94b 100644
--- a/src/cmd/compile/internal/typecheck/_builtin/runtime.go
+++ b/src/cmd/compile/internal/typecheck/_builtin/runtime.go
@@ -214,13 +214,13 @@
func memhash32(p unsafe.Pointer, h uintptr) uintptr
func memhash64(p unsafe.Pointer, h uintptr) uintptr
func memhash128(p unsafe.Pointer, h uintptr) uintptr
-func f32hash(p unsafe.Pointer, h uintptr) uintptr
-func f64hash(p unsafe.Pointer, h uintptr) uintptr
-func c64hash(p unsafe.Pointer, h uintptr) uintptr
-func c128hash(p unsafe.Pointer, h uintptr) uintptr
-func strhash(a unsafe.Pointer, h uintptr) uintptr
-func interhash(p unsafe.Pointer, h uintptr) uintptr
-func nilinterhash(p unsafe.Pointer, h uintptr) uintptr
+func f32hash(p *any, h uintptr) uintptr
+func f64hash(p *any, h uintptr) uintptr
+func c64hash(p *any, h uintptr) uintptr
+func c128hash(p *any, h uintptr) uintptr
+func strhash(a *any, h uintptr) uintptr
+func interhash(p *any, h uintptr) uintptr
+func nilinterhash(p *any, h uintptr) uintptr
// only used on 32-bit
func int64div(int64, int64) int64
diff --git a/src/cmd/compile/internal/typecheck/builtin.go b/src/cmd/compile/internal/typecheck/builtin.go
index 9be354e..bf87b4d 100644
--- a/src/cmd/compile/internal/typecheck/builtin.go
+++ b/src/cmd/compile/internal/typecheck/builtin.go
@@ -180,52 +180,52 @@
{"memhash32", funcTag, 127},
{"memhash64", funcTag, 127},
{"memhash128", funcTag, 127},
- {"f32hash", funcTag, 127},
- {"f64hash", funcTag, 127},
- {"c64hash", funcTag, 127},
- {"c128hash", funcTag, 127},
- {"strhash", funcTag, 127},
- {"interhash", funcTag, 127},
- {"nilinterhash", funcTag, 127},
- {"int64div", funcTag, 128},
- {"uint64div", funcTag, 129},
- {"int64mod", funcTag, 128},
- {"uint64mod", funcTag, 129},
- {"float64toint64", funcTag, 130},
- {"float64touint64", funcTag, 131},
- {"float64touint32", funcTag, 132},
- {"int64tofloat64", funcTag, 133},
- {"int64tofloat32", funcTag, 135},
- {"uint64tofloat64", funcTag, 136},
- {"uint64tofloat32", funcTag, 137},
- {"uint32tofloat64", funcTag, 138},
- {"complex128div", funcTag, 139},
- {"getcallerpc", funcTag, 140},
- {"getcallersp", funcTag, 140},
+ {"f32hash", funcTag, 128},
+ {"f64hash", funcTag, 128},
+ {"c64hash", funcTag, 128},
+ {"c128hash", funcTag, 128},
+ {"strhash", funcTag, 128},
+ {"interhash", funcTag, 128},
+ {"nilinterhash", funcTag, 128},
+ {"int64div", funcTag, 129},
+ {"uint64div", funcTag, 130},
+ {"int64mod", funcTag, 129},
+ {"uint64mod", funcTag, 130},
+ {"float64toint64", funcTag, 131},
+ {"float64touint64", funcTag, 132},
+ {"float64touint32", funcTag, 133},
+ {"int64tofloat64", funcTag, 134},
+ {"int64tofloat32", funcTag, 136},
+ {"uint64tofloat64", funcTag, 137},
+ {"uint64tofloat32", funcTag, 138},
+ {"uint32tofloat64", funcTag, 139},
+ {"complex128div", funcTag, 140},
+ {"getcallerpc", funcTag, 141},
+ {"getcallersp", funcTag, 141},
{"racefuncenter", funcTag, 31},
{"racefuncexit", funcTag, 9},
{"raceread", funcTag, 31},
{"racewrite", funcTag, 31},
- {"racereadrange", funcTag, 141},
- {"racewriterange", funcTag, 141},
- {"msanread", funcTag, 141},
- {"msanwrite", funcTag, 141},
- {"msanmove", funcTag, 142},
- {"asanread", funcTag, 141},
- {"asanwrite", funcTag, 141},
- {"checkptrAlignment", funcTag, 143},
- {"checkptrArithmetic", funcTag, 145},
- {"libfuzzerTraceCmp1", funcTag, 146},
- {"libfuzzerTraceCmp2", funcTag, 147},
- {"libfuzzerTraceCmp4", funcTag, 148},
- {"libfuzzerTraceCmp8", funcTag, 149},
- {"libfuzzerTraceConstCmp1", funcTag, 146},
- {"libfuzzerTraceConstCmp2", funcTag, 147},
- {"libfuzzerTraceConstCmp4", funcTag, 148},
- {"libfuzzerTraceConstCmp8", funcTag, 149},
- {"libfuzzerHookStrCmp", funcTag, 150},
- {"libfuzzerHookEqualFold", funcTag, 150},
- {"addCovMeta", funcTag, 152},
+ {"racereadrange", funcTag, 142},
+ {"racewriterange", funcTag, 142},
+ {"msanread", funcTag, 142},
+ {"msanwrite", funcTag, 142},
+ {"msanmove", funcTag, 143},
+ {"asanread", funcTag, 142},
+ {"asanwrite", funcTag, 142},
+ {"checkptrAlignment", funcTag, 144},
+ {"checkptrArithmetic", funcTag, 146},
+ {"libfuzzerTraceCmp1", funcTag, 147},
+ {"libfuzzerTraceCmp2", funcTag, 148},
+ {"libfuzzerTraceCmp4", funcTag, 149},
+ {"libfuzzerTraceCmp8", funcTag, 150},
+ {"libfuzzerTraceConstCmp1", funcTag, 147},
+ {"libfuzzerTraceConstCmp2", funcTag, 148},
+ {"libfuzzerTraceConstCmp4", funcTag, 149},
+ {"libfuzzerTraceConstCmp8", funcTag, 150},
+ {"libfuzzerHookStrCmp", funcTag, 151},
+ {"libfuzzerHookEqualFold", funcTag, 151},
+ {"addCovMeta", funcTag, 153},
{"x86HasPOPCNT", varTag, 6},
{"x86HasSSE41", varTag, 6},
{"x86HasFMA", varTag, 6},
@@ -234,7 +234,7 @@
}
func runtimeTypes() []*types.Type {
- var typs [153]*types.Type
+ var typs [154]*types.Type
typs[0] = types.ByteType
typs[1] = types.NewPtr(typs[0])
typs[2] = types.Types[types.TANY]
@@ -363,31 +363,32 @@
typs[125] = newSig(params(typs[7], typs[7]), params(typs[6]))
typs[126] = newSig(params(typs[3], typs[5], typs[5]), params(typs[5]))
typs[127] = newSig(params(typs[7], typs[5]), params(typs[5]))
- typs[128] = newSig(params(typs[22], typs[22]), params(typs[22]))
- typs[129] = newSig(params(typs[24], typs[24]), params(typs[24]))
- typs[130] = newSig(params(typs[20]), params(typs[22]))
- typs[131] = newSig(params(typs[20]), params(typs[24]))
- typs[132] = newSig(params(typs[20]), params(typs[62]))
- typs[133] = newSig(params(typs[22]), params(typs[20]))
- typs[134] = types.Types[types.TFLOAT32]
- typs[135] = newSig(params(typs[22]), params(typs[134]))
- typs[136] = newSig(params(typs[24]), params(typs[20]))
- typs[137] = newSig(params(typs[24]), params(typs[134]))
- typs[138] = newSig(params(typs[62]), params(typs[20]))
- typs[139] = newSig(params(typs[26], typs[26]), params(typs[26]))
- typs[140] = newSig(nil, params(typs[5]))
- typs[141] = newSig(params(typs[5], typs[5]), nil)
- typs[142] = newSig(params(typs[5], typs[5], typs[5]), nil)
- typs[143] = newSig(params(typs[7], typs[1], typs[5]), nil)
- typs[144] = types.NewSlice(typs[7])
- typs[145] = newSig(params(typs[7], typs[144]), nil)
- typs[146] = newSig(params(typs[66], typs[66], typs[17]), nil)
- typs[147] = newSig(params(typs[60], typs[60], typs[17]), nil)
- typs[148] = newSig(params(typs[62], typs[62], typs[17]), nil)
- typs[149] = newSig(params(typs[24], typs[24], typs[17]), nil)
- typs[150] = newSig(params(typs[28], typs[28], typs[17]), nil)
- typs[151] = types.NewArray(typs[0], 16)
- typs[152] = newSig(params(typs[7], typs[62], typs[151], typs[28], typs[15], typs[66], typs[66]), params(typs[62]))
+ typs[128] = newSig(params(typs[3], typs[5]), params(typs[5]))
+ typs[129] = newSig(params(typs[22], typs[22]), params(typs[22]))
+ typs[130] = newSig(params(typs[24], typs[24]), params(typs[24]))
+ typs[131] = newSig(params(typs[20]), params(typs[22]))
+ typs[132] = newSig(params(typs[20]), params(typs[24]))
+ typs[133] = newSig(params(typs[20]), params(typs[62]))
+ typs[134] = newSig(params(typs[22]), params(typs[20]))
+ typs[135] = types.Types[types.TFLOAT32]
+ typs[136] = newSig(params(typs[22]), params(typs[135]))
+ typs[137] = newSig(params(typs[24]), params(typs[20]))
+ typs[138] = newSig(params(typs[24]), params(typs[135]))
+ typs[139] = newSig(params(typs[62]), params(typs[20]))
+ typs[140] = newSig(params(typs[26], typs[26]), params(typs[26]))
+ typs[141] = newSig(nil, params(typs[5]))
+ typs[142] = newSig(params(typs[5], typs[5]), nil)
+ typs[143] = newSig(params(typs[5], typs[5], typs[5]), nil)
+ typs[144] = newSig(params(typs[7], typs[1], typs[5]), nil)
+ typs[145] = types.NewSlice(typs[7])
+ typs[146] = newSig(params(typs[7], typs[145]), nil)
+ typs[147] = newSig(params(typs[66], typs[66], typs[17]), nil)
+ typs[148] = newSig(params(typs[60], typs[60], typs[17]), nil)
+ typs[149] = newSig(params(typs[62], typs[62], typs[17]), nil)
+ typs[150] = newSig(params(typs[24], typs[24], typs[17]), nil)
+ typs[151] = newSig(params(typs[28], typs[28], typs[17]), nil)
+ typs[152] = types.NewArray(typs[0], 16)
+ typs[153] = newSig(params(typs[7], typs[62], typs[152], typs[28], typs[15], typs[66], typs[66]), params(typs[62]))
return typs[:]
}