compiler: record pointer var values to remove write barriers
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 23 Aug 2019 22:38:58 +0000 (22:38 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 23 Aug 2019 22:38:58 +0000 (22:38 +0000)
commit6ae361ae458d4056d6c36fa42f1775c417457b10
tree2abbeb7a9dc1276b8a53259a89738319fdee0f45
parent457dac402027dd7e14543fbd59a75858422cf6c6
compiler: record pointer var values to remove write barriers

    Record when a local pointer variable is set to a value such that
    indirecting through the pointer does not require a write barrier.  Use
    that to eliminate write barriers when indirecting through that local
    pointer variable.  Only keep this information per-block, so it's not
    all that applicable.

    This reduces the number of write barriers generated when compiling the
    runtime package from 553 to 524.

    The point of this is to eliminate a bad write barrier in the bytes
    function in runtime/print.go.  Mark that function nowritebarrier so
    that the problem does not recur.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/191581

From-SVN: r274890
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/gogo.h
gcc/go/gofrontend/wb.cc
libgo/go/runtime/print.go