mirror of
https://github.com/golang/go
synced 2024-11-26 07:47:57 -07:00
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
This commit is contained in:
parent
782464aea5
commit
bbccfddb84
@ -371,14 +371,19 @@ cgen_asop(Node *n)
|
||||
case OOR:
|
||||
a = optoas(n->etype, nl->type);
|
||||
if(nl->addable) {
|
||||
regalloc(&n3, nr->type, N);
|
||||
cgen(nr, &n3);
|
||||
if(smallintconst(nr))
|
||||
n3 = *nr;
|
||||
else {
|
||||
regalloc(&n3, nr->type, N);
|
||||
cgen(nr, &n3);
|
||||
}
|
||||
regalloc(&n2, nl->type, N);
|
||||
cgen(nl, &n2);
|
||||
gins(a, &n3, &n2);
|
||||
cgen(&n2, nl);
|
||||
regfree(&n2);
|
||||
regfree(&n3);
|
||||
if(n3.op != OLITERAL)
|
||||
regfree(&n3);
|
||||
goto ret;
|
||||
}
|
||||
if(nr->ullman < UINF)
|
||||
|
Loading…
Reference in New Issue
Block a user