1
0
mirror of https://github.com/golang/go synced 2024-11-14 08:50:22 -07:00
go/misc/cgo
Egon Elbre e85ffec784 cmd/cgo: optimize cgoCheckPointer call
Currently cgoCheckPointer is only used with one optional argument.
Using a slice for the optional arguments is quite expensive, hence
replace it with a single interface{}. This results in ~30% improvement.

When checking struct fields, they quite often end up being without
pointers. Check this before calling cgoCheckPointer, which results in
additional ~20% improvement.

Inline some p == nil checks from cgoIsGoPointer which gives
additional ~15% improvement.

All of this translates to:

name                             old time/op  new time/op  delta
CgoCall/add-int-32               46.9ns ± 1%  46.6ns ± 1%   -0.75%  (p=0.000 n=18+20)
CgoCall/one-pointer-32            143ns ± 1%    87ns ± 1%  -38.96%  (p=0.000 n=20+20)
CgoCall/eight-pointers-32         767ns ± 0%   327ns ± 1%  -57.30%  (p=0.000 n=18+16)
CgoCall/eight-pointers-nil-32     110ns ± 1%    89ns ± 2%  -19.10%  (p=0.000 n=19+19)
CgoCall/eight-pointers-array-32  5.09µs ± 1%  3.56µs ± 2%  -30.09%  (p=0.000 n=19+19)
CgoCall/eight-pointers-slice-32  3.92µs ± 0%  2.57µs ± 2%  -34.48%  (p=0.000 n=20+20)

Change-Id: I2aa9f5ae8962a9a41a7fb1db0c300893109d0d75
Reviewed-on: https://go-review.googlesource.com/c/go/+/198081
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-10-02 20:51:29 +00:00
..
errors cmd/cgo: do not rewrite call if there are more args than parameters 2019-07-12 17:31:29 +00:00
fortran cmd/compile, misc/cgo: fix fortran tests on aix/ppc64 2019-03-22 13:52:59 +00:00
gmp all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00
life misc/android: enable many more tests on GOOS=android 2019-03-08 23:32:03 +00:00
nocgo cmd/ld: really import runtime/cgo for external link 2014-05-20 21:36:50 -07:00
stdio misc/android: enable many more tests on GOOS=android 2019-03-08 23:32:03 +00:00
test cmd/cgo: optimize cgoCheckPointer call 2019-10-02 20:51:29 +00:00
testasan runtime: more flexible heap memory mapping on 64-bits 2013-06-12 18:47:16 +04:00
testcarchive runtime: don't forward SIGPIPE on macOS 2019-08-31 06:19:40 +00:00
testcshared misc/cgo: disable testcarchive, testplugin during -short test (including all.bash) 2019-05-16 03:25:04 +00:00
testgodefs misc/cgo/testgodefs: move source files into testdata 2019-02-26 02:44:12 +00:00
testplugin misc/cgo: disable testcarchive, testplugin during -short test (including all.bash) 2019-05-16 03:25:04 +00:00
testsanitizers runtime: save/restore callee saved registers in arm64's sigtramp 2019-06-03 19:02:11 +00:00
testshared cmd/link: put shlib ".type" functions in internal ABI 2019-07-15 22:54:39 +00:00
testsigfwd misc/cgo/testsigfwd: add missing return statement 2016-08-30 21:44:14 +00:00
testso misc/cgo: enable testso and testsovar on aix/ppc64 2019-03-27 17:21:28 +00:00
testsovar misc/cgo: enable testso and testsovar on aix/ppc64 2019-03-27 17:21:28 +00:00
testtls all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00