]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: prevent IsNewObject from taking quadratic time
authorKeith Randall <khr@golang.org>
Mon, 9 Jan 2023 17:49:32 +0000 (09:49 -0800)
committerKeith Randall <khr@google.com>
Mon, 9 Jan 2023 22:50:08 +0000 (22:50 +0000)
commit0202ad0b3a2bfddf9f3eafb94e19d5a0fa3d1f31
tree3160c752e8533518d6cfa360c388f779ba5e048b
parent64519baf3802f96a813f3f35e87aefa30a5f5f73
cmd/compile: prevent IsNewObject from taking quadratic time

As part of IsNewObject, we need to go from the SelectN[0] use of
a call to the SelectN[1] use of a call. The current code does this
by just looking through the block. If the block is very large,
this ends up taking quadratic time.

Instead, prepopulate a map from call -> SelectN[1] user of that call.
That lets us find the SelectN[1] user in constant time.

Fixes #57657

Change-Id: Ie2e0b660af5c080314f4f17ba2838510a1147f9e
Reviewed-on: https://go-review.googlesource.com/c/go/+/461080
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
src/cmd/compile/internal/ssa/writebarrier.go