diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-07-28 11:23:29 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-07-28 11:23:29 +0900 |
| commit | 7f8076ef90be326d7a199baad32d0a84ebbec6d3 (patch) | |
| tree | e74dc35fa8aacb9a2a37ede5ecbb0b8f19604df4 /src/codegen.c | |
| parent | 88043c5ccd198b60b54b97d103d3f420c698c882 (diff) | |
| download | mruby-7f8076ef90be326d7a199baad32d0a84ebbec6d3.tar.gz mruby-7f8076ef90be326d7a199baad32d0a84ebbec6d3.zip | |
more peephole optimization on OP_MOVE
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/codegen.c b/src/codegen.c index e032ec509..3bf0e496c 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -145,7 +145,7 @@ genop(codegen_scope *s, mrb_code i) static void genop_peep(codegen_scope *s, mrb_code i, int val) { - // peephole optimization + /* peephole optimization */ if (!val && s->lastlabel != s->pc && s->pc > 0) { mrb_code i0 = s->iseq[s->pc-1]; int c1 = GET_OPCODE(i); @@ -156,9 +156,13 @@ genop_peep(codegen_scope *s, mrb_code i, int val) switch (c0) { case OP_MOVE: if (GETARG_B(i) == GETARG_A(i0) && GETARG_A(i) == GETARG_B(i0) && GETARG_A(i) >= s->nlocals) { - // skip swapping OP_MOVE + /* skip swapping OP_MOVE */ return; } + if (GETARG_B(i) == GETARG_A(i0) && GETARG_A(i0) >= s->nlocals) { + s->iseq[s->pc-1] = MKOP_AB(OP_MOVE, GETARG_A(i), GETARG_B(i0)); + return; + } break; case OP_LOADI: if (GETARG_B(i) == GETARG_A(i0) && GETARG_A(i0) >= s->nlocals) { |
