ruby-changes:73686
From: HParker <ko1@a...>
Date: Fri, 23 Sep 2022 01:47:32 +0900 (JST)
Subject: [ruby-changes:73686] aafbc9068f (master): avoid extra dup and pop in compile_op_log
https://git.ruby-lang.org/ruby.git/commit/?id=aafbc9068f From aafbc9068f96e5e1f7f5c2c1fa6cba01ec8422db Mon Sep 17 00:00:00 2001 From: HParker <HParker@g...> Date: Wed, 21 Sep 2022 13:53:10 -0700 Subject: avoid extra dup and pop in compile_op_log Co-authored-by: John Hawthorn <jhawthorn@g...> --- compile.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/compile.c b/compile.c index 7d553bfba1..c6cd941d22 100644 --- a/compile.c +++ b/compile.c @@ -8831,7 +8831,10 @@ compile_op_log(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, https://github.com/ruby/ruby/blob/trunk/compile.c#L8831 } CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head)); - ADD_INSN(ret, node, dup); + + if (!popped) { + ADD_INSN(ret, node, dup); + } if (type == NODE_OP_ASGN_AND) { ADD_INSNL(ret, node, branchunless, lfin); @@ -8840,15 +8843,15 @@ compile_op_log(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, https://github.com/ruby/ruby/blob/trunk/compile.c#L8843 ADD_INSNL(ret, node, branchif, lfin); } - ADD_INSN(ret, node, pop); - ADD_LABEL(ret, lassign); - CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value)); - ADD_LABEL(ret, lfin); - - if (popped) { - /* we can apply more optimize */ + if (!popped) { ADD_INSN(ret, node, pop); } + + ADD_LABEL(ret, lassign); + + CHECK(COMPILE_(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value, popped)); + + ADD_LABEL(ret, lfin); return COMPILE_OK; } -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/