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.

Change-Id: I17dd74183baf50049944452c37586deefc0c59b5
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/191581
Reviewed-by: Cherry Zhang <cherryyz@google.com>
4 files changed