From 08bb3640d750980b634e93972ed3761582f8e364 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 17 Sep 2017 09:21:47 +0000 Subject: compile.c: optimize unnecessary concatstrings * compile.c (iseq_peephole_optimize): optimize away unnecessary concatenation of single string, following tostring which always puts a String instance. https://github.com/ruby/ruby/pull/1626#discussion_r139285653 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compile.c b/compile.c index 77553c6e1f..7ba0604699 100644 --- a/compile.c +++ b/compile.c @@ -2509,6 +2509,14 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } } + if (IS_INSN_ID(iobj, tostring)) { + LINK_ELEMENT *next = iobj->link.next; + if (IS_INSN(next) && IS_INSN_ID(next, concatstrings) && + OPERAND_AT(next, 0) == INT2FIX(1)) { + REMOVE_ELEM(next); + } + } + if (do_tailcallopt && (IS_INSN_ID(iobj, send) || IS_INSN_ID(iobj, opt_aref_with) || -- cgit v1.2.3