diff options
author | Maple Ong <maple.develops@gmail.com> | 2022-09-11 18:50:55 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-12 07:50:55 +0900 |
commit | 89077b4c5a8022ef563e11a7b682a4661dc9278c (patch) | |
tree | 6ad89e32ab2da4f5ee45e7008aa294f10697e51f /compile.c | |
parent | 6f8267b7f3bf6fba065c7abd9d764a801b292ff7 (diff) | |
download | ruby-89077b4c5a8022ef563e11a7b682a4661dc9278c.tar.gz |
Add comments for some peephole optimizations [ci skip]
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -3571,6 +3571,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal if (IS_INSN_ID(iobj, dup)) { if (IS_NEXT_INSN_ID(&iobj->link, setlocal)) { LINK_ELEMENT *set1 = iobj->link.next, *set2 = NULL; + + /* + * dup + * setlocal x, y + * setlocal x, y + * => + * dup + * setlocal x, y + */ if (IS_NEXT_INSN_ID(set1, setlocal)) { set2 = set1->next; if (OPERAND_AT(set1, 0) == OPERAND_AT(set2, 0) && @@ -3579,6 +3588,16 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal ELEM_REMOVE(&iobj->link); } } + + /* + * dup + * setlocal x, y + * dup + * setlocal x, y + * => + * dup + * setlocal x, y + */ else if (IS_NEXT_INSN_ID(set1, dup) && IS_NEXT_INSN_ID(set1->next, setlocal)) { set2 = set1->next->next; @@ -3591,6 +3610,13 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } } + /* + * getlocal x, y + * dup + * setlocal x, y + * => + * dup + */ if (IS_INSN_ID(iobj, getlocal)) { LINK_ELEMENT *niobj = &iobj->link; if (IS_NEXT_INSN_ID(niobj, dup)) { @@ -3606,6 +3632,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } } + /* + * opt_invokebuiltin_delegate + * trace + * leave + * => + * opt_invokebuiltin_delegate_leave + * trace + * leave + */ if (IS_INSN_ID(iobj, opt_invokebuiltin_delegate)) { if (IS_TRACE(iobj->link.next)) { if (IS_NEXT_INSN_ID(iobj->link.next, leave)) { @@ -3614,6 +3649,13 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } } + /* + * getblockparam + * branchif / branchunless + * => + * getblockparamproxy + * branchif / branchunless + */ if (IS_INSN_ID(iobj, getblockparam)) { if (IS_NEXT_INSN_ID(&iobj->link, branchif) || IS_NEXT_INSN_ID(&iobj->link, branchunless)) { iobj->insn_id = BIN(getblockparamproxy); |