What version of Go are you using (go version)?
$ go version
go version go1.18beta2 linux/amd64
Does this issue reproduce with the latest release?
Not for go1.17.6, only for 1.18 beta 2.
What did you do?
package copycost
import "testing"
const N = 1024
func Sum_RangeSliceIdx_Inline(a []int) (r int) {
for i := range a {
r += a[i]
}
return
}
//go:noinline
func Sum_RangeSliceIdx_NoInline(a []int) (r int) {
for i := range a {
r += a[i]
}
return
}
func buildArray() [N]int {
var a [N]int
for i := 0; i < N; i++ {
a[i] = (N - i) & i
}
return a
}
var r [128]int
func Benchmark_Sum_RangeSliceIdx_Inline(b *testing.B) {
var a = buildArray()
b.ResetTimer()
for i := 0; i < b.N; i++ {
r[i&127] = Sum_RangeSliceIdx_Inline(a[:])
}
}
func Benchmark_Sum_RangeSliceIdx_NoInline(b *testing.B) {
var a = buildArray()
b.ResetTimer()
for i := 0; i < b.N; i++ {
r[i&127] = Sum_RangeSliceIdx_NoInline(a[:])
}
}
What did you expect to see?
The inlined function is faster.
What did you see instead?
The inlined one is slower.
$ go version
go version go1.18beta2 linux/amd64
$ go test -bench=.
goos: linux
goarch: amd64
pkg: example.com
cpu: Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
Benchmark_Sum_RangeSliceIdx_Inline-4 1996579 603.2 ns/op
Benchmark_Sum_RangeSliceIdx_NoInline-4 2176748 545.0 ns/op
$ go version
go version go1.17.6 linux/amd64
$ go test -bench=.
...
Benchmark_Sum_RangeSliceIdx_Inline-4 2201970 534.3 ns/op
Benchmark_Sum_RangeSliceIdx_NoInline-4 2250338 535.2 ns/op
What version of Go are you using (
go version)?Does this issue reproduce with the latest release?
Not for go1.17.6, only for 1.18 beta 2.
What did you do?
What did you expect to see?
The inlined function is faster.
What did you see instead?
The inlined one is slower.