]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: don't merge load+op if other op arg is still live
authorKeith Randall <khr@golang.org>
Sat, 18 Mar 2017 18:16:30 +0000 (11:16 -0700)
committerKeith Randall <khr@golang.org>
Thu, 23 Mar 2017 15:53:04 +0000 (15:53 +0000)
commit86dc86b4f948e16001903879162e9cf8da8f0537
treefd31c4246b4f7ba8711f4384a282103a9da1ac3f
parentd0ff9ece2b36bd4470b4388602a757d50c4c3607
cmd/compile: don't merge load+op if other op arg is still live

We want to merge a load and op into a single instruction

    l = LOAD ptr mem
    y = OP x l

into

    y = OPload x ptr mem

However, all of our OPload instructions require that y uses
the same register as x. If x is needed past this instruction, then
we must copy x somewhere else, losing the whole benefit of merging
the instructions in the first place.

Disable this optimization if x is live past the OP.

Also disable this optimization if the OP is in a deeper loop than the load.

Update #19595

Change-Id: I87f596aad7e91c9127bfb4705cbae47106e1e77a
Reviewed-on: https://go-review.googlesource.com/38337
Reviewed-by: Ilya Tocar <ilya.tocar@intel.com>
src/cmd/compile/internal/gc/asm_test.go
src/cmd/compile/internal/ssa/gen/AMD64.rules
src/cmd/compile/internal/ssa/gen/S390X.rules
src/cmd/compile/internal/ssa/likelyadjust.go
src/cmd/compile/internal/ssa/rewrite.go
src/cmd/compile/internal/ssa/rewriteAMD64.go
src/cmd/compile/internal/ssa/rewriteS390X.go