mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-29 22:40:34 +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:
parent
624dd8a17a
commit
79e836b8cc
1 changed files with 13 additions and 0 deletions
|
@ -5957,6 +5957,19 @@ analyze (scm_jit_state *j)
|
||||||
case scm_op_imm_u64_less:
|
case scm_op_imm_u64_less:
|
||||||
case scm_op_s64_imm_less:
|
case scm_op_s64_imm_less:
|
||||||
case scm_op_imm_s64_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;
|
attrs |= OP_ATTR_BLOCK;
|
||||||
fuse_conditional_branch (j, &target);
|
fuse_conditional_branch (j, &target);
|
||||||
j->op_attrs[target - j->start] |= attrs;
|
j->op_attrs[target - j->start] |= attrs;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue