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/walk.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/walk.c')
| -rw-r--r-- | src/cmd/gc/walk.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 3c3a00cfd..62bbf9f5a 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -787,6 +787,14 @@ walkexpr(Node **np, NodeList **init) case OINDEX: walkexpr(&n->left, init); walkexpr(&n->right, init); + + // if range of type cannot exceed static array bound, + // disable bounds check + if(!isslice(n->left->type)) + if(n->right->type->width < 4) + if((1<<(8*n->right->type->width)) <= n->left->type->bound) + n->etype = 1; + goto ret; case OINDEXMAP: |
