1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-29 19:30:36 +02:00

Fix branch fusing

* libguile/jit.c (analyze): Skip over drop and pop, if present, during
the analysis phase in addition to the compile phase.
This commit is contained in:
Andy Wingo 2023-10-02 14:13:07 +02:00
parent 624dd8a17a
commit 79e836b8cc

View file

@ -5957,6 +5957,19 @@ analyze (scm_jit_state *j)
case scm_op_imm_u64_less:
case scm_op_s64_imm_less:
case scm_op_imm_s64_less:
{
uint8_t next = j->next_ip[0] & 0xff;
if (next == scm_op_drop)
{
j->next_ip += op_lengths[next];
next = j->next_ip[0] & 0xff;
}
if (next == scm_op_pop)
{
j->next_ip += op_lengths[next];
next = j->next_ip[0] & 0xff;
}
}
attrs |= OP_ATTR_BLOCK;
fuse_conditional_branch (j, &target);
j->op_attrs[target - j->start] |= attrs;