Commit 101fbc2c authored by Ilya Tocar's avatar Ilya Tocar

runtime: make nextFreeFast inlinable

https://golang.org/cl/22598 made nextFreeFast inlinable.
But during https://golang.org/cl/63611 it was discovered, that it is no longer inlinable.
Reduce number of statements below inlining threshold to make it inlinable again.
Also update tests, to prevent regressions.
Doesn't reduce readability.

Change-Id: Ia672784dd48ed3b1ab46e390132f1094fe453de5
Reviewed-on: https://go-review.googlesource.com/65030
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
parent 55ac5b50
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
"bytes" "bytes"
"internal/testenv" "internal/testenv"
"os/exec" "os/exec"
"runtime"
"testing" "testing"
) )
...@@ -34,10 +35,6 @@ func TestIntendedInlining(t *testing.T) { ...@@ -34,10 +35,6 @@ func TestIntendedInlining(t *testing.T) {
"bucketMask", "bucketMask",
"fastrand", "fastrand",
"noescape", "noescape",
// TODO: These were modified at some point to be
// made inlineable, but have since been broken.
// "nextFreeFast",
}, },
"unicode/utf8": { "unicode/utf8": {
"FullRune", "FullRune",
...@@ -47,6 +44,13 @@ func TestIntendedInlining(t *testing.T) { ...@@ -47,6 +44,13 @@ func TestIntendedInlining(t *testing.T) {
}, },
} }
if runtime.GOARCH != "386" {
// nextFreeFast calls sys.Ctz64, which on 386 is implemented in asm and is not inlinable.
// We currently don't have midstack inlining so nextFreeFast is also not inlinable on 386.
// So check for it only on non-386 platforms.
want["runtime"] = append(want["runtime"], "nextFreeFast")
}
m := make(map[string]bool) m := make(map[string]bool)
pkgs := make([]string, 0, len(want)) pkgs := make([]string, 0, len(want))
for pname, fnames := range want { for pname, fnames := range want {
......
...@@ -529,9 +529,8 @@ func nextFreeFast(s *mspan) gclinkptr { ...@@ -529,9 +529,8 @@ func nextFreeFast(s *mspan) gclinkptr {
} }
s.allocCache >>= uint(theBit + 1) s.allocCache >>= uint(theBit + 1)
s.freeindex = freeidx s.freeindex = freeidx
v := gclinkptr(result*s.elemsize + s.base())
s.allocCount++ s.allocCount++
return v return gclinkptr(result*s.elemsize + s.base())
} }
} }
return 0 return 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment