diff options
| author | Lynn Boger <laboger@linux.vnet.ibm.com> | 2023-01-31 14:27:30 -0600 |
|---|---|---|
| committer | Lynn Boger <laboger@linux.vnet.ibm.com> | 2023-02-23 18:57:27 +0000 |
| commit | ebe49f98c89eb19d49738fd5dc2ad4f67b6cede4 (patch) | |
| tree | fde12336d299d995d3eef6e38cec47b826cd8c29 /test/codegen | |
| parent | 612c00bf4d440160e87e983bd8300ad7b08a6ada (diff) | |
| download | go-ebe49f98c89eb19d49738fd5dc2ad4f67b6cede4.tar.xz | |
cmd/compile: inline constant sized memclrNoHeapPointers calls on PPC64
Update the function isInlinableMemclr for ppc64 and ppc64le
to enable inlining for the constant sized cases < 512.
Larger cases can use dcbz which performs better but requires
alignment checking so it is best to continue using memclrNoHeapPointers
for those cases.
Results on p10:
MemclrKnownSize1 2.07ns ± 0% 0.57ns ± 0% -72.59%
MemclrKnownSize2 2.56ns ± 5% 0.57ns ± 0% -77.82%
MemclrKnownSize4 5.15ns ± 0% 0.57ns ± 0% -89.00%
MemclrKnownSize8 2.23ns ± 0% 0.57ns ± 0% -74.57%
MemclrKnownSize16 2.23ns ± 0% 0.50ns ± 0% -77.74%
MemclrKnownSize32 2.28ns ± 0% 0.56ns ± 0% -75.28%
MemclrKnownSize64 2.49ns ± 0% 0.72ns ± 0% -70.95%
MemclrKnownSize112 2.97ns ± 2% 1.14ns ± 0% -61.72%
MemclrKnownSize128 4.64ns ± 6% 2.45ns ± 1% -47.17%
MemclrKnownSize192 5.45ns ± 5% 2.79ns ± 0% -48.87%
MemclrKnownSize248 4.51ns ± 0% 2.83ns ± 0% -37.12%
MemclrKnownSize256 6.34ns ± 1% 3.58ns ± 0% -43.53%
MemclrKnownSize512 3.64ns ± 0% 3.64ns ± 0% -0.03%
MemclrKnownSize1024 4.73ns ± 0% 4.73ns ± 0% +0.01%
MemclrKnownSize4096 17.1ns ± 0% 17.1ns ± 0% +0.07%
MemclrKnownSize512KiB 2.12µs ± 0% 2.12µs ± 0% ~ (all equal)
Change-Id: If1abf5749f4802c64523a41fe0058bd144d0ea46
Reviewed-on: https://go-review.googlesource.com/c/go/+/464340
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Jakub Ciolek <jakub@ciolek.dev>
Reviewed-by: Archana Ravindar <aravind5@in.ibm.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Carlos Eduardo Seo <carlos.seo@linaro.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'test/codegen')
| -rw-r--r-- | test/codegen/slices.go | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/test/codegen/slices.go b/test/codegen/slices.go index e3be6bd76b..a38fe77e3f 100644 --- a/test/codegen/slices.go +++ b/test/codegen/slices.go @@ -47,7 +47,7 @@ func SliceExtensionConst(s []int) []int { // amd64:-`.*runtime\.makeslice` // amd64:-`.*runtime\.panicmakeslicelen` // amd64:"MOVUPS\tX15" - // ppc64x:`.*runtime\.memclrNoHeapPointers` + // ppc64x:-`.*runtime\.memclrNoHeapPointers` // ppc64x:-`.*runtime\.makeslice` // ppc64x:-`.*runtime\.panicmakeslicelen` return append(s, make([]int, 1<<2)...) @@ -58,7 +58,7 @@ func SliceExtensionConstInt64(s []int) []int { // amd64:-`.*runtime\.makeslice` // amd64:-`.*runtime\.panicmakeslicelen` // amd64:"MOVUPS\tX15" - // ppc64x:`.*runtime\.memclrNoHeapPointers` + // ppc64x:-`.*runtime\.memclrNoHeapPointers` // ppc64x:-`.*runtime\.makeslice` // ppc64x:-`.*runtime\.panicmakeslicelen` return append(s, make([]int, int64(1<<2))...) @@ -69,7 +69,7 @@ func SliceExtensionConstUint64(s []int) []int { // amd64:-`.*runtime\.makeslice` // amd64:-`.*runtime\.panicmakeslicelen` // amd64:"MOVUPS\tX15" - // ppc64x:`.*runtime\.memclrNoHeapPointers` + // ppc64x:-`.*runtime\.memclrNoHeapPointers` // ppc64x:-`.*runtime\.makeslice` // ppc64x:-`.*runtime\.panicmakeslicelen` return append(s, make([]int, uint64(1<<2))...) @@ -80,12 +80,20 @@ func SliceExtensionConstUint(s []int) []int { // amd64:-`.*runtime\.makeslice` // amd64:-`.*runtime\.panicmakeslicelen` // amd64:"MOVUPS\tX15" - // ppc64x:`.*runtime\.memclrNoHeapPointers` + // ppc64x:-`.*runtime\.memclrNoHeapPointers` // ppc64x:-`.*runtime\.makeslice` // ppc64x:-`.*runtime\.panicmakeslicelen` return append(s, make([]int, uint(1<<2))...) } +// On ppc64x continue to use memclrNoHeapPointers +// for sizes >= 512. +func SliceExtensionConst512(s []int) []int { + // amd64:-`.*runtime\.memclrNoHeapPointers` + // ppc64x:`.*runtime\.memclrNoHeapPointers` + return append(s, make([]int, 1<<9)...) +} + func SliceExtensionPointer(s []*int, l int) []*int { // amd64:`.*runtime\.memclrHasPointers` // amd64:-`.*runtime\.makeslice` |
