From 1bc6c3f40777ca10d8e7df38b775b0bb81a25881 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 1 Feb 2019 05:11:08 +0000 Subject: Revert r63383, r63248 "compile.c: copy a short insn with leave" When copying `leave` insn, TRACE also should be copied if it is present, but this optimization is trivial and not worth the complexity. [ruby-core:91366] [Bug #15578] 4cae5353c03009beb1e0a1619422072773580609 5afd479de63b6609ddcd1510da94d2c1ac384f7f git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'compile.c') diff --git a/compile.c b/compile.c index cab401b895..d3b8453dfc 100644 --- a/compile.c +++ b/compile.c @@ -2709,7 +2709,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal optimize_checktype(iseq, iobj); if (IS_INSN_ID(iobj, jump)) { - INSN *niobj, *diobj, *piobj, *dniobj; + INSN *niobj, *diobj, *piobj; diobj = (INSN *)get_destination_insn(iobj); niobj = (INSN *)get_next_insn(iobj); @@ -2740,11 +2740,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal remove_unreachable_chunk(iseq, iobj->link.next); goto again; } - else if (dniobj = 0, - IS_INSN_ID(diobj, leave) || - (diobj->operand_size == 0 && - (dniobj = (INSN *)get_next_insn(diobj)) != 0 && - (IS_INSN_ID(dniobj, leave) || (dniobj = 0)))) { + else if (IS_INSN_ID(diobj, leave)) { INSN *pop; /* * jump LABEL @@ -2760,19 +2756,12 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal */ /* replace */ unref_destination(iobj, 0); - iobj->insn_id = diobj->insn_id; + iobj->insn_id = BIN(leave); iobj->operand_size = 0; iobj->insn_info = diobj->insn_info; - if (dniobj) { - dniobj = new_insn_body(iseq, dniobj->insn_info.line_no, BIN(leave), 0); - ELEM_INSERT_NEXT(&iobj->link, &dniobj->link); - } - else { - dniobj = iobj; - } /* adjust stack depth */ pop = new_insn_body(iseq, diobj->insn_info.line_no, BIN(pop), 0); - ELEM_INSERT_NEXT(&dniobj->link, &pop->link); + ELEM_INSERT_NEXT(&iobj->link, &pop->link); goto again; } else if ((piobj = (INSN *)get_prev_insn(iobj)) != 0 && -- cgit v1.2.3