]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/5g: avoid temporary during constant OINDEX
authorDave Cheney <dave@cheney.net>
Sat, 6 Oct 2012 01:51:06 +0000 (11:51 +1000)
committerDave Cheney <dave@cheney.net>
Sat, 6 Oct 2012 01:51:06 +0000 (11:51 +1000)
func addr(s[]int) *int {
return &s[2]
}

--- prog list "addr" ---
0000 (/home/dfc/src/addr.go:5) TEXT     addr+0(SB),$0-16
0001 (/home/dfc/src/addr.go:6) MOVW     $s+0(FP),R0
0002 (/home/dfc/src/addr.go:6) MOVW     4(R0),R1
0003 (/home/dfc/src/addr.go:6) MOVW     $2,R2
0004 (/home/dfc/src/addr.go:6) CMP      R2,R1,
0005 (/home/dfc/src/addr.go:6) BHI      ,7(APC)
0006 (/home/dfc/src/addr.go:6) BL       ,runtime.panicindex+0(SB)
0007 (/home/dfc/src/addr.go:6) MOVW     0(R0),R0
0008 (/home/dfc/src/addr.go:6) MOVW     $8,R1
0009 (/home/dfc/src/addr.go:6) ADD      R1,R0
0010 (/home/dfc/src/addr.go:6) MOVW     R0,.noname+12(FP)
0011 (/home/dfc/src/addr.go:6) RET      ,

becomes

--- prog list "addr" ---
0000 (/home/dfc/src/addr.go:5) TEXT     addr+0(SB),$0-16
0001 (/home/dfc/src/addr.go:6) MOVW     $s+0(FP),R0
0002 (/home/dfc/src/addr.go:6) MOVW     4(R0),R1
0003 (/home/dfc/src/addr.go:6) MOVW     $2,R2
0004 (/home/dfc/src/addr.go:6) CMP      R2,R1,
0005 (/home/dfc/src/addr.go:6) BHI      ,7(APC)
0006 (/home/dfc/src/addr.go:6) BL       ,runtime.panicindex+0(SB)
0007 (/home/dfc/src/addr.go:6) MOVW     0(R0),R0
0008 (/home/dfc/src/addr.go:6) ADD      $8,R0
0009 (/home/dfc/src/addr.go:6) MOVW     R0,.noname+12(FP)
0010 (/home/dfc/src/addr.go:6) RET      ,

R=rsc, remyoudompheng, minux.ma
CC=golang-dev
https://golang.org/cl/6590056

src/cmd/5g/cgen.c

index eaa813fcf7fc1a17c2a6938deaff541a45707d0a..5065e0cd9b966cf5938f55a6c1c947895f6daeca 100644 (file)
@@ -733,11 +733,7 @@ agen(Node *n, Node *res)
                        }
 
                        nodconst(&n2, types[tptr], v*w);
-                       regalloc(&n4, n2.type, N);
-                       gmove(&n2, &n4);
-                       gins(optoas(OADD, types[tptr]), &n4, &n3);
-                       regfree(&n4);
-
+                       gins(optoas(OADD, types[tptr]), &n2, &n3);
                        gmove(&n3, res);
                        regfree(&n3);
                        break;