summaryrefslogtreecommitdiff
path: root/src/cmd/gc/range.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-12-02 17:30:07 -0800
committerRuss Cox <rsc@golang.org>2009-12-02 17:30:07 -0800
commit7a63a65d3419ee33662b45e84f36ba50e520aef6 (patch)
tree358ee5cb2af08fd44f08fecb9b60f7de8a0b5bad /src/cmd/gc/range.c
parent4e9883e6a66afdc7b79cad82f8f615b6ce93e53f (diff)
downloadgolang-7a63a65d3419ee33662b45e84f36ba50e520aef6.tar.gz
6g etc: groundwork for eliminating redundant bounds checks.
drop check in range over array. drop check in [256]array indexed by byte. R=ken2 http://codereview.appspot.com/163088
Diffstat (limited to 'src/cmd/gc/range.c')
-rw-r--r--src/cmd/gc/range.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/cmd/gc/range.c b/src/cmd/gc/range.c
index 758cd4f29..4147e8e6c 100644
--- a/src/cmd/gc/range.c
+++ b/src/cmd/gc/range.c
@@ -91,7 +91,7 @@ walkrange(Node *n)
Node *ohv1, *hv1, *hv2; // hidden (old) val 1, 2
Node *ha, *hit; // hidden aggregate, iterator
Node *a, *v1, *v2; // not hidden aggregate, val 1, 2
- Node *fn;
+ Node *fn, *tmp;
NodeList *body, *init;
Type *th, *t;
@@ -128,8 +128,11 @@ walkrange(Node *n)
n->nincr = nod(OASOP, hv1, nodintconst(1));
n->nincr->etype = OADD;
body = list1(nod(OAS, v1, hv1));
- if(v2)
- body = list(body, nod(OAS, v2, nod(OINDEX, ha, hv1)));
+ if(v2) {
+ tmp = nod(OINDEX, ha, hv1);
+ tmp->etype = 1; // no bounds check
+ body = list(body, nod(OAS, v2, tmp));
+ }
break;
case TMAP: