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:
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_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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue