cmd/compile/internal/walk: expand makeslicecopy optimization
The make+copy optimization previously required both the source and
destination to be simple non-address-taken variables.
Relax this restriction to require only one side to be such a variable.
The other expression only needs to be independent of it, which is
sufficient to preserve the correctness of the transformation.
This allows more make+copy patterns to be lowered to
runtime.makeslicecopy.
The benchmarks results:
goos: linux
goarch: arm64
pkg: runtime
│ base.stat │ improved.stat │
│ sec/op │ sec/op vs base │
MakeSliceCopyComplexExpressions/Src/Byte/mallocmove-4 130.1n ± 2% 124.2n ± 2% -4.53% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Src/Byte/makecopy-4 134.2n ± 2% 126.6n ± 1% -5.66% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Src/Byte/nilappend-4 132.2n ± 2% 132.0n ± 1% ~ (p=0.617 n=10)
MakeSliceCopyComplexExpressions/Src/Int/mallocmove-4 130.6n ± 2% 124.0n ± 2% -5.09% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Src/Int/makecopy-4 131.3n ± 2% 126.7n ± 1% -3.50% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Src/Int/nilappend-4 130.8n ± 4% 130.8n ± 2% ~ (p=0.630 n=10)
MakeSliceCopyComplexExpressions/Src/Ptr/mallocmove-4 157.5n ± 1% 150.1n ± 1% -4.67% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Src/Ptr/makecopy-4 157.1n ± 1% 143.8n ± 1% -8.46% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Src/Ptr/nilappend-4 156.3n ± 1% 156.4n ± 1% ~ (p=0.643 n=10)
MakeSliceCopyComplexExpressions/Dst/Byte/mallocmove-4 132.4n ± 1% 124.6n ± 2% -5.82% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Dst/Byte/makecopy-4 134.7n ± 2% 126.4n ± 2% -6.13% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Dst/Byte/nilappend-4 131.8n ± 1% 130.8n ± 1% ~ (p=0.425 n=10)
MakeSliceCopyComplexExpressions/Dst/Int/mallocmove-4 130.8n ± 3% 122.3n ± 3% -6.42% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Dst/Int/makecopy-4 132.7n ± 2% 125.0n ± 1% -5.80% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Dst/Int/nilappend-4 132.7n ± 2% 130.9n ± 1% ~ (p=0.118 n=10)
MakeSliceCopyComplexExpressions/Dst/Ptr/mallocmove-4 154.8n ± 2% 150.4n ± 0% -2.91% (p=0.000 n=10)
MakeSliceCopyComplexExpressions/Dst/Ptr/makecopy-4 153.7n ± 2% 153.8n ± 2% ~ (p=0.897 n=10)
MakeSliceCopyComplexExpressions/Dst/Ptr/nilappend-4 157.2n ± 2% 156.1n ± 1% ~ (p=0.050 n=10)
geomean 139.6n 134.8n -3.47%
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |