• Michael Munday's avatar
    cmd/compile: add generic rules to eliminate some unnecessary stores · 4fc498d8
    Michael Munday authored
    Eliminates stores of values that have just been loaded from the same
    location. Handles the common case where there are up to 3 intermediate
    stores to non-overlapping struct fields.
    
    For example the loads and stores of x.a, x.b and x.d in the following
    function are now removed:
    
    type T struct {
    	a, b, c, d int
    }
    
    func f(x *T) {
    	y := *x
    	y.c += 8
    	*x = y
    }
    
    Before this CL (s390x):
    
    TEXT    "".f(SB)
    	MOVD    "".x(R15), R5
    	MOVD    (R5), R1
    	MOVD    8(R5), R2
    	MOVD    16(R5), R0
    	MOVD    24(R5), R4
    	ADD     $8, R0, R3
    	STMG    R1, R4, (R5)
    	RET
    
    After this CL (s390x):
    
    TEXT	"".f(SB)
    	MOVD	"".x(R15), R1
    	MOVD	16(R1), R0
    	ADD	$8, R0, R0
    	MOVD	R0, 16(R1)
    	RET
    
    In total these rules are triggered ~5091 times during all.bash,
    which is broken down as:
    
    Intermediate stores | Triggered
    --------------------+----------
    0                   | 1434
    1                   | 2508
    2                   | 888
    3                   | 261
    --------------------+----------
    
    Change-Id: Ia4721ae40146aceec1fdd3e65b0e9283770bfba5
    Reviewed-on: https://go-review.googlesource.com/38793
    Run-TryBot: Michael Munday <munday@ca.ibm.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    4fc498d8
Name
Last commit
Last update
..
amd64 Loading commit data...
arm Loading commit data...
arm64 Loading commit data...
gc Loading commit data...
mips Loading commit data...
mips64 Loading commit data...
ppc64 Loading commit data...
s390x Loading commit data...
ssa Loading commit data...
syntax Loading commit data...
test Loading commit data...
types Loading commit data...
x86 Loading commit data...