diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-08-10 15:11:00 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-08-10 15:11:00 +0900 |
| commit | dfaff83eba8fbf3953b6ab0e92df41899de2eccc (patch) | |
| tree | c0913219aee810ccd439e74475ab02af7cca5f4e /mrbgems/mruby-compiler/core/codegen.c | |
| parent | b34ee9a4b4cf75135ab8c6887068687bbd9f5b06 (diff) | |
| download | mruby-dfaff83eba8fbf3953b6ab0e92df41899de2eccc.tar.gz mruby-dfaff83eba8fbf3953b6ab0e92df41899de2eccc.zip | |
codegen: add peep hole optimization to skip overridden OP_MOVE
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index b128231cf..ba451309e 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -188,6 +188,11 @@ genop_peep(codegen_scope *s, mrb_code i, int val) if (val) break; switch (c0) { case OP_MOVE: + if (GETARG_A(i) == GETARG_A(i0)) { + /* skip overriden OP_MOVE */ + s->pc--; + return genop_peep(s, i, val); + } if (GETARG_B(i) == GETARG_A(i0) && GETARG_A(i) == GETARG_B(i0)) { /* skip swapping OP_MOVE */ return 0; |
