diff options
| author | Russ Cox <rsc@golang.org> | 2009-12-02 17:30:07 -0800 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2009-12-02 17:30:07 -0800 |
| commit | 7a63a65d3419ee33662b45e84f36ba50e520aef6 (patch) | |
| tree | 358ee5cb2af08fd44f08fecb9b60f7de8a0b5bad /src/cmd/gc/range.c | |
| parent | 4e9883e6a66afdc7b79cad82f8f615b6ce93e53f (diff) | |
| download | golang-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.c | 9 |
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: |
