• Austin Clements's avatar
    [dev.power64] 6g,8g: remove unnecessary and incorrect reg use scanning · c3dadb3d
    Austin Clements authored
    Previously, the 6g and 8g registerizers scanned for used
    registers beyond the end of a region being considered for
    registerization.  This ancient artifact was copied from the C
    compilers, where it was probably necessary to track implicitly
    used registers.  In the Go compilers it's harmless (because it
    can only over-restrict the set of available registers), but no
    longer necessary because the Go compilers correctly track
    register use/set information.  The consequences of this extra
    scan were (at least) that 1) we would not consider allocating
    the AX register if there was a deferproc call in the future
    because deferproc uses AX as a return register, so we see the
    use of AX, but don't track that AX is set by the CALL, and 2)
    we could not consider allocating the DX register if there was
    a MUL in the future because MUL implicitly sets DX and (thanks
    to an abuse of copyu in this code) we would also consider DX
    used.
    
    This commit fixes these problems by nuking this code.
    
    LGTM=rsc
    R=rsc
    CC=golang-codereviews
    https://golang.org/cl/174110043
    c3dadb3d
reg.c 26 KB