cmd/5g: avoid temporary during constant asop
func add() int {
var a int
a += 10
a += 20
a += 30
a -= 10
a -= 20
a -= 30
return a
}
before
--- prog list "add" ---
0000 (/home/dfc/src/add.go:5) TEXT add+0(SB),$0-4
0001 (/home/dfc/src/add.go:6) MOVW $0,R2
0002 (/home/dfc/src/add.go:7) MOVW $10,R0
0003 (/home/dfc/src/add.go:7) ADD R0,R2,R1
0004 (/home/dfc/src/add.go:8) MOVW $20,R0
0005 (/home/dfc/src/add.go:8) ADD R0,R1
0006 (/home/dfc/src/add.go:9) MOVW $30,R0
0007 (/home/dfc/src/add.go:9) ADD R0,R1
0008 (/home/dfc/src/add.go:10) MOVW $10,R0
0009 (/home/dfc/src/add.go:10) SUB R0,R1
0010 (/home/dfc/src/add.go:11) MOVW $20,R0
0011 (/home/dfc/src/add.go:11) SUB R0,R1
0012 (/home/dfc/src/add.go:12) MOVW $30,R0
0013 (/home/dfc/src/add.go:12) SUB R0,R1,R2
0014 (/home/dfc/src/add.go:12) MOVW R2,R0
0015 (/home/dfc/src/add.go:13) MOVW R2,R1
0016 (/home/dfc/src/add.go:13) MOVW R2,.noname+0(FP)
0017 (/home/dfc/src/add.go:13) RET ,
after
--- prog list "add" ---
0000 (/home/dfc/src/add.go:5) TEXT add+0(SB),$0-4
0001 (/home/dfc/src/add.go:6) MOVW $0,R0
0002 (/home/dfc/src/add.go:7) ADD $10,R0
0003 (/home/dfc/src/add.go:8) ADD $20,R0
0004 (/home/dfc/src/add.go:9) ADD $30,R0
0005 (/home/dfc/src/add.go:10) SUB $10,R0
0006 (/home/dfc/src/add.go:11) SUB $20,R0
0007 (/home/dfc/src/add.go:12) SUB $30,R0,R2
0008 (/home/dfc/src/add.go:13) MOVW R2,R0
0009 (/home/dfc/src/add.go:13) MOVW R2,.noname+0(FP)
0010 (/home/dfc/src/add.go:13) RET ,
R=rsc, minux.ma, remyoudompheng
CC=golang-dev
https://golang.org/cl/
6584056