1
0
mirror of https://github.com/golang/go synced 2024-11-26 17:46:57 -07:00

cmd/compile: don't accumulate duplicated named slots

Currently, in expand_calls, for each appearance of a named
variables's component, we add the named slot to f.Names list. If
a variable appears many times, we add it to f.Names many times.
Furthure, for each duplicated named slot, its entry in
f.NamedValues is a slice that contains all Values associated with
that name. This leads to quadratic behavior when iterating named
values like

	for _, name := range f.Names {
		for _, v := range f.NamedValues[name] {
			...
		}
	}

This CL makes it not to add duplicated entries to f.Names.

Change-Id: I82a8d009db81ecf48b4577e0bca501feff677cdf
Reviewed-on: https://go-review.googlesource.com/c/go/+/312093
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
This commit is contained in:
Cherry Zhang 2021-04-20 20:33:43 -04:00
parent 4d56576ec0
commit daee726a0b

View File

@ -1378,9 +1378,11 @@ func expandCalls(f *Func) {
// Leaf types may have debug locations // Leaf types may have debug locations
if !x.isAlreadyExpandedAggregateType(v.Type) { if !x.isAlreadyExpandedAggregateType(v.Type) {
for _, l := range locs { for _, l := range locs {
if _, ok := f.NamedValues[l]; !ok {
f.Names = append(f.Names, l)
}
f.NamedValues[l] = append(f.NamedValues[l], v) f.NamedValues[l] = append(f.NamedValues[l], v)
} }
f.Names = append(f.Names, locs...)
continue continue
} }
// Not-leaf types that had debug locations need to lose them. // Not-leaf types that had debug locations need to lose them.