From: Shenghou Ma Date: Fri, 11 Jan 2013 04:29:14 +0000 (+0800) Subject: cmd/5g: allow optimization of return registers. X-Git-Tag: go1.1rc2~1421 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bdd9f29780f7045f6e4c3782f38386d869542eef;p=gostls13.git cmd/5g: allow optimization of return registers. Modeled after CL 7030046 by daniel.morsing. example program: func f(x int) int { x -= 10; return x } 5g -S difference: --- prog list "f" --- 0011 (x.go:7) TEXT add+0(SB),$0-8 0012 (x.go:7) MOVW x+0(FP),R0 -0013 (x.go:7) SUB $10,R0,R2 -0014 (x.go:7) MOVW R2,R0 -0015 (x.go:7) MOVW R2,.noname+4(FP) -0016 (x.go:7) RET , +0013 (x.go:7) SUB $10,R0 +0014 (x.go:7) MOVW R0,.noname+4(FP) +0015 (x.go:7) RET , R=dave, rsc CC=golang-dev https://golang.org/cl/7030047 --- diff --git a/src/cmd/5g/peep.c b/src/cmd/5g/peep.c index 10551e3c61..4e35cf75a7 100644 --- a/src/cmd/5g/peep.c +++ b/src/cmd/5g/peep.c @@ -1160,12 +1160,9 @@ copyu(Prog *p, Adr *v, Adr *s) return 0; case ARET: /* funny */ - if(v->type == D_REG) - if(v->reg == REGRET) - return 2; - if(v->type == D_FREG) - if(v->reg == FREGRET) - return 2; + if(s != A) + return 1; + return 3; case ABL: /* funny */ if(v->type == D_REG) {