diff options
Diffstat (limited to 'test/codegen')
| -rw-r--r-- | test/codegen/append.go | 91 | ||||
| -rw-r--r-- | test/codegen/append_freegc.go | 217 |
2 files changed, 274 insertions, 34 deletions
diff --git a/test/codegen/append.go b/test/codegen/append.go index e90fa87ed2..d232f0b170 100644 --- a/test/codegen/append.go +++ b/test/codegen/append.go @@ -1,5 +1,7 @@ // asmcheck +//go:build !goexperiment.runtimefreegc + // Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -9,114 +11,135 @@ package codegen func Append1(n int) []int { var r []int for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append2(n int) (r []int) { for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return } func Append3(n int) (r []int) { for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append4(n int) []int { var r []int for i := range n { - // amd64:`.*growsliceBuf` + // amd64:`.*growsliceBuf\b` r = append(r, i) } println(cap(r)) - // amd64:`.*moveSliceNoScan` + // amd64:`.*moveSliceNoScan\b` return r } func Append5(n int) []int { var r []int for i := range n { - // amd64:`.*growsliceBuf` + // amd64:`.*growsliceBuf\b` r = append(r, i) } useSlice(r) - // amd64:`.*moveSliceNoScan` + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append5b(n int) []int { + var r []int + useSlice(r) + for i := range n { + // amd64:`.*growsliceBuf\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoScan\b` return r } func Append6(n int) []*int { var r []*int for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, new(i)) } - // amd64:`.*moveSliceNoCap` + // amd64:`.*moveSliceNoCap\b` return r } func Append7(n int) []*int { var r []*int for i := range n { - // amd64:`.*growsliceBuf` + // amd64:`.*growsliceBuf\b` r = append(r, new(i)) } println(cap(r)) - // amd64:`.*moveSlice` + // amd64:`.*moveSlice\b` return r } func Append8(n int, p *[]int) { var r []int for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` *p = r } +func Append8b(n int, p *[]int) { + var r []int + // amd64:`.*moveSliceNoCapNoScan\b` + *p = r + for i := range n { + // amd64:`.*growslice\b` + r = append(r, i) + } +} + func Append9(n int) []int { var r []int for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } println(len(r)) - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append10(n int) []int { var r []int for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } println(r[3]) - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append11(n int) []int { var r []int for i := range n { - // amd64:`.*growsliceBuf` + // amd64:`.*growsliceBuf\b` r = append(r, i) } r = r[3:5] - // amd64:`.*moveSliceNoScan` + // amd64:`.*moveSliceNoScan\b` return r } @@ -124,10 +147,10 @@ func Append12(n int) []int { var r []int r = nil for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } @@ -135,10 +158,10 @@ func Append13(n int) []int { var r []int r, r = nil, nil for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } @@ -146,42 +169,42 @@ func Append14(n int) []int { var r []int r = []int{3, 4, 5} for i := range n { - // amd64:`.*growsliceBuf` + // amd64:`.*growsliceBuf\b` r = append(r, i) } - // amd64:`.*moveSliceNoScan` + // amd64:`.*moveSliceNoScan\b` return r } func Append15(n int) []int { r := []int{3, 4, 5} for i := range n { - // amd64:`.*growsliceBuf` + // amd64:`.*growsliceBuf\b` r = append(r, i) } - // amd64:`.*moveSliceNoScan` + // amd64:`.*moveSliceNoScan\b` return r } func Append16(r []int, n int) []int { for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append17(n int) []int { var r []int for i := range n { - // amd64:`.*growslice` + // amd64:`.*growslice\b` r = append(r, i) } for i, x := range r { println(i, x) } - // amd64:`.*moveSliceNoCapNoScan` + // amd64:`.*moveSliceNoCapNoScan\b` return r } diff --git a/test/codegen/append_freegc.go b/test/codegen/append_freegc.go new file mode 100644 index 0000000000..91f0901e35 --- /dev/null +++ b/test/codegen/append_freegc.go @@ -0,0 +1,217 @@ +// asmcheck + +//go:build goexperiment.runtimefreegc + +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package codegen + +func Append1(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceNoAlias\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append2(n int) (r []int) { + for i := range n { + // amd64:`.*growslice\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return +} + +func Append3(n int) (r []int) { + for i := range n { + // amd64:`.*growslice\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append4(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceBufNoAlias\b` + r = append(r, i) + } + println(cap(r)) + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append5(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceBufNoAlias\b` + r = append(r, i) + } + useSlice(r) + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append5b(n int) []int { + var r []int + useSlice(r) + for i := range n { + // amd64:`.*growsliceBuf\b` -`.*growsliceBufNoAlias\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append6(n int) []*int { + var r []*int + for i := range n { + // TODO(thepudds): for now, the compiler only uses the NoAlias version + // for element types without pointers. + // amd64:`.*growslice\b` + r = append(r, new(i)) + } + // amd64:`.*moveSliceNoCap\b` + return r +} + +func Append7(n int) []*int { + var r []*int + for i := range n { + // TODO(thepudds): for now, the compiler only uses the NoAlias version + // for element types without pointers. + // amd64:`.*growsliceBuf\b` + r = append(r, new(i)) + } + println(cap(r)) + // amd64:`.*moveSlice\b` + return r +} + +func Append8(n int, p *[]int) { + var r []int + for i := range n { + // amd64:`.*growsliceNoAlias\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + *p = r +} + +func Append8b(n int, p *[]int) { + var r []int + // amd64:`.*moveSliceNoCapNoScan\b` + *p = r + for i := range n { + // amd64:`.*growslice\b` -`.*growsliceNoAlias\b` + r = append(r, i) + } +} + +func Append9(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceNoAlias\b` + r = append(r, i) + } + println(len(r)) + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append10(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceNoAlias\b` + r = append(r, i) + } + println(r[3]) + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append11(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceBufNoAlias\b` + r = append(r, i) + } + r = r[3:5] + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append12(n int) []int { + var r []int + r = nil + for i := range n { + // amd64:`.*growslice\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append13(n int) []int { + var r []int + r, r = nil, nil + for i := range n { + // amd64:`.*growslice\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append14(n int) []int { + var r []int + r = []int{3, 4, 5} + for i := range n { + // amd64:`.*growsliceBufNoAlias\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append15(n int) []int { + r := []int{3, 4, 5} + for i := range n { + // amd64:`.*growsliceBufNoAlias\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoScan\b` + return r +} + +func Append16(r []int, n int) []int { + for i := range n { + // amd64:`.*growslice\b` + r = append(r, i) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +func Append17(n int) []int { + var r []int + for i := range n { + // amd64:`.*growsliceNoAlias\b` + r = append(r, i) + } + for i, x := range r { + println(i, x) + } + // amd64:`.*moveSliceNoCapNoScan\b` + return r +} + +//go:noinline +func useSlice(s []int) { +} |
