compiler,runtime: pass only ptr and len to some runtime calls
authorIan Lance Taylor <iant@golang.org>
Mon, 27 Jul 2020 22:19:54 +0000 (15:19 -0700)
committerIan Lance Taylor <iant@golang.org>
Tue, 28 Jul 2020 00:05:17 +0000 (17:05 -0700)
commit108fdcc56ee49dd7dc8314ce5022191f406a125f
tree60009bd42da0b9f335a0f4ab9d0179e9db0fd778
parente1d3a86fd3e91ccdbc702fc99595116adeded0d5
compiler,runtime: pass only ptr and len to some runtime calls

This ports https://golang.org/cl/227163 to the Go frontend.
This is a step toward moving up to the go1.15rc1 release.

Original CL description:

    cmd/compile,runtime: pass only ptr and len to some runtime calls

    Some runtime calls accept a slice, but only use ptr and len.
    This change modifies most such routines to accept only ptr and len.

    After this change, the only runtime calls that accept an unnecessary
    cap arg are concatstrings and slicerunetostring.
    Neither is particularly common, and both are complicated to modify.

    Negligible compiler performance impact. Shrinks binaries a little.
    There are only a few regressions; the one I investigated was
    due to register allocation fluctuation.

    Passes 'go test -race std cmd', modulo golang/go#38265 and golang/go#38266.
    Wow, does that take a long time to run.

    file      before    after     Δ       %
    compile   19655024  19655152  +128    +0.001%
    cover     5244840   5236648   -8192   -0.156%
    dist      3662376   3658280   -4096   -0.112%
    link      6680056   6675960   -4096   -0.061%
    pprof     14789844  14777556  -12288  -0.083%
    test2json 2824744   2820648   -4096   -0.145%
    trace     11647876  11639684  -8192   -0.070%
    vet       8260472   8256376   -4096   -0.050%
    total     115163736 115118808 -44928  -0.039%

For golang/go#36890

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/245099
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/runtime.def
libgo/go/runtime/cgocheck.go
libgo/go/runtime/mbarrier.go
libgo/go/runtime/os_linux.go
libgo/go/runtime/slice.go
libgo/go/runtime/string.go