Revert "Use adjusted sp on iseq_set_sequence()" and "Delay remove_unreachable_chunk() after iseq_set_sequence()"

This reverts commit 3685ed7303fc08bf68cd3cc8d11e22a8ce63a067 and 5dc107b03f5cf32656a5308574b90458486c633c.
Because of some CI failures https://github.com/ruby/ruby/pull/3404#issuecomment-719868313.
This commit is contained in:
wanabe 2020-10-31 11:53:20 +09:00
parent ea8fc7fdd3
commit 4f8d9b0db8

View File

@ -478,7 +478,6 @@ static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, const NODE *n
static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
static int iseq_setup_insn(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_setup_insn(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
static int iseq_optimize_after_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
static int iseq_set_local_table(rb_iseq_t *iseq, const ID *tbl); static int iseq_set_local_table(rb_iseq_t *iseq, const ID *tbl);
@ -1468,7 +1467,6 @@ iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
debugs("[compile step 4.1 (iseq_set_sequence)]\n"); debugs("[compile step 4.1 (iseq_set_sequence)]\n");
if (!iseq_set_sequence(iseq, anchor)) return COMPILE_NG; if (!iseq_set_sequence(iseq, anchor)) return COMPILE_NG;
iseq_optimize_after_set_sequence(iseq, anchor);
if (compile_debug > 5) if (compile_debug > 5)
dump_disasm_list(FIRST_ELEMENT(anchor)); dump_disasm_list(FIRST_ELEMENT(anchor));
@ -2270,14 +2268,16 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
} }
case ISEQ_ELEMENT_ADJUST: case ISEQ_ELEMENT_ADJUST:
{ {
ADJUST *adjust = (ADJUST *)list; ADJUST *adjust = (ADJUST *)list;
int orig_sp = sp; if (adjust->line_no != -1) {
sp = adjust->label ? adjust->label->sp : 0; int orig_sp = sp;
if (adjust->line_no != -1 && orig_sp - sp > 0) { sp = adjust->label ? adjust->label->sp : 0;
if (orig_sp - sp > 1) code_index++; /* 1 operand */ if (orig_sp - sp > 0) {
code_index++; /* insn */ if (orig_sp - sp > 1) code_index++; /* 1 operand */
insn_num++; code_index++; /* insn */
} insn_num++;
}
}
break; break;
} }
default: break; default: break;
@ -2855,20 +2855,6 @@ ci_argc_set(const rb_iseq_t *iseq, const struct rb_callinfo *ci, int argc)
return nci; return nci;
} }
static int
iseq_peephole_optimize_after_set_sequence(rb_iseq_t *iseq, LINK_ELEMENT *list)
{
INSN *const iobj = (INSN *)list;
optimize_checktype(iseq, iobj);
if (IS_INSN_ID(iobj, jump) || IS_INSN_ID(iobj, leave)) {
remove_unreachable_chunk(iseq, iobj->link.next);
}
return COMPILE_OK;
}
static int static int
iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt) iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt)
{ {
@ -2907,6 +2893,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
* LABEL2 directly * LABEL2 directly
*/ */
replace_destination(iobj, diobj); replace_destination(iobj, diobj);
remove_unreachable_chunk(iseq, iobj->link.next);
goto again; goto again;
} }
else if (IS_INSN_ID(diobj, leave)) { else if (IS_INSN_ID(diobj, leave)) {
@ -2980,6 +2967,9 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
ELEM_REPLACE(&piobj->link, &popiobj->link); ELEM_REPLACE(&piobj->link, &popiobj->link);
} }
} }
if (remove_unreachable_chunk(iseq, iobj->link.next)) {
goto again;
}
} }
/* /*
@ -3012,6 +3002,10 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
} }
} }
if (IS_INSN_ID(iobj, leave)) {
remove_unreachable_chunk(iseq, iobj->link.next);
}
if (IS_INSN_ID(iobj, branchif) || if (IS_INSN_ID(iobj, branchif) ||
IS_INSN_ID(iobj, branchnil) || IS_INSN_ID(iobj, branchnil) ||
IS_INSN_ID(iobj, branchunless)) { IS_INSN_ID(iobj, branchunless)) {
@ -3548,25 +3542,6 @@ iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
return COMPILE_OK; return COMPILE_OK;
} }
static int
iseq_optimize_after_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
{
LINK_ELEMENT *list;
const int do_peepholeopt = ISEQ_COMPILE_DATA(iseq)->option->peephole_optimization;
list = FIRST_ELEMENT(anchor);
while (list) {
if (IS_INSN(list)) {
if (do_peepholeopt) {
iseq_peephole_optimize_after_set_sequence(iseq, list);
}
}
list = list->next;
}
return COMPILE_OK;
}
#if OPT_INSTRUCTIONS_UNIFICATION #if OPT_INSTRUCTIONS_UNIFICATION
static INSN * static INSN *
new_unified_insn(rb_iseq_t *iseq, new_unified_insn(rb_iseq_t *iseq,