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:
parent
4d56576ec0
commit
daee726a0b
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user