diff options
| author | Keith Randall <khr@golang.org> | 2022-10-28 14:14:24 -0700 |
|---|---|---|
| committer | Keith Randall <khr@google.com> | 2022-10-31 21:40:49 +0000 |
| commit | 9ce27feaeb91b2f30ff8cbe3be1ece3071f3f6b2 (patch) | |
| tree | 3f11bf7ef196576d855093605a7e03f6dfbb93af /test/codegen | |
| parent | 204be97d24e4d6bbe2d5b8e85feb456e88fe0f6d (diff) | |
| download | go-9ce27feaeb91b2f30ff8cbe3be1ece3071f3f6b2.tar.xz | |
cmd/compile: add rule for post-decomposed growslice optimization
The recently added rule only works before decomposing slices.
Add a rule that works after decomposing slices.
The reason we need the latter is because although the length may
be a constant, it can be hidden inside a slice that is not constant
(its pointer or capacity might be changing). By applying this
optimization after decomposing slices, we can find more cases
where it applies.
Fixes #56440
Change-Id: I0094e59eee3065ab4d210defdda8227a6e897420
Reviewed-on: https://go-review.googlesource.com/c/go/+/446277
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Diffstat (limited to 'test/codegen')
| -rw-r--r-- | test/codegen/issue56440.go | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/codegen/issue56440.go b/test/codegen/issue56440.go index 36b52ace03..c6c1e66789 100644 --- a/test/codegen/issue56440.go +++ b/test/codegen/issue56440.go @@ -16,3 +16,19 @@ func f(x []int) int { // amd64:`MOVQ\t40\(.*\),` return x[len(s)] } + +func g(x []int, p *bool) int { + s := make([]int, 3) + for { + s = s[:3] + if cap(s) < 5 { + s = make([]int, 3, 5) + } + s = append(s, 4, 5) + if *p { + // amd64:`MOVQ\t40\(.*\),` + return x[len(s)] + } + } + return 0 +} |
