• Michael Munday's avatar
    cmd/compile: merge loads into operations on s390x · 1cfb5c3f
    Michael Munday authored
    Adds the new canMergeLoad function which can be used by rules to
    decide whether a load can be merged into an operation. The function
    ensures that the merge will not reorder the load relative to memory
    operations (for example, stores) in such a way that the block can no
    longer be scheduled.
    
    This new function enables transformations such as:
    
    MOVD 0(R1), R2
    ADD  R2, R3
    
    to:
    
    ADD  0(R1), R3
    
    The two-operand form of the following instructions can now read a
    single memory operand:
    
     - ADD
     - ADDC
     - ADDW
     - MULLD
     - MULLW
     - SUB
     - SUBC
     - SUBE
     - SUBW
     - AND
     - ANDW
     - OR
     - ORW
     - XOR
     - XORW
    
    Improves SHA3 performance by 6-8%.
    
    Updates #15054.
    
    Change-Id: Ibcb9122126cd1a26f2c01c0dfdbb42fe5e7b5b94
    Reviewed-on: https://go-review.googlesource.com/29272
    Run-TryBot: Michael Munday <munday@ca.ibm.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    1cfb5c3f
ssa.go 21.2 KB