• Michael Munday's avatar
    cmd/compile: improve s390x sign/zero extension removal · 5c5f217b
    Michael Munday authored
    This CL gets rid of the MOVDreg and MOVDnop SSA operations on
    s390x. They were originally inserted to help avoid situations
    where a sign/zero extension was elided but a spill invalidated
    the optimization. It's not really clear we need to do this though
    (amd64 doesn't have these ops for example) so long as we are
    careful when removing sign/zero extensions. Also, the MOVDreg
    technique doesn't work if the register is spilled before the
    MOVDreg op (I haven't seen that in practice).
    
    Removing these ops reduces the complexity of the rules and also
    allows us to unblock optimizations. For example, the compiler can
    now merge the loads in binary.{Big,Little}Endian.PutUint16 which
    it wasn't able to do before. This CL reduces the size of the .text
    section in the go tool by about 4.7KB (0.09%).
    
    Change-Id: Icaddae7f2e4f9b2debb6fabae845adb3f73b41db
    Reviewed-on: https://go-review.googlesource.com/c/go/+/173897
    Run-TryBot: Michael Munday <mike.munday@ibm.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    5c5f217b
S390XOps.go 46.2 KB