1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-15 18:20:42 +02:00

Correct misplaced check for already visited blocks

This commit is contained in:
pcpa 2013-10-01 13:51:01 -03:00
parent 1bd169cfa3
commit f42a251ff1
3 changed files with 15 additions and 6 deletions

View file

@ -1,3 +1,12 @@
2013-10-30 Paulo Andrade <pcpa@gnu.org>
* lib/jit_print.c: Do not crash if calling jit_print from
gdb before actually emitting code.
* lib/lightning.c: Correct misplaced check for already
visited blocks on conditional branches, what was preventing
proper merge live bit masks of forward blocks.
2013-10-30 Paulo Andrade <pcpa@gnu.org> 2013-10-30 Paulo Andrade <pcpa@gnu.org>
* lib/jit_x86-cpu.c: Correct not properly tested case of using * lib/jit_x86-cpu.c: Correct not properly tested case of using

View file

@ -396,14 +396,14 @@ _jit_print(jit_state_t *_jit)
continue; continue;
case jit_code_name: case jit_code_name:
print_chr(' '); print_chr(' ');
if (node->v.p) if (node->v.p && _jitc->emit)
print_str(node->v.n->u.p); print_str(node->v.n->u.p);
break; break;
case jit_code_note: case jit_code_note:
print_chr(' '); print_chr(' ');
if (node->v.p) if (node->v.p && _jitc->emit)
print_str(node->v.n->u.p); print_str(node->v.n->u.p);
if (node->v.p && node->w.w) if (node->v.p && _jitc->emit && node->w.w)
print_chr(':'); print_chr(':');
if (node->w.w) if (node->w.w)
print_dec(node->w.w); print_dec(node->w.w);

View file

@ -1983,15 +1983,15 @@ _jit_update(jit_state_t *_jit, jit_node_t *node,
goto restart; goto restart;
} }
block = _jitc->blocks.ptr + label->v.w; block = _jitc->blocks.ptr + label->v.w;
if (bmp_tst(label->v.w))
continue;
bmp_set(label->v.w);
jit_regset_and(&ztmp, mask, &block->reglive); jit_regset_and(&ztmp, mask, &block->reglive);
if (jit_regset_set_p(&ztmp)) { if (jit_regset_set_p(&ztmp)) {
jit_regset_ior(live, live, &ztmp); jit_regset_ior(live, live, &ztmp);
jit_regset_com(&ztmp, &ztmp); jit_regset_com(&ztmp, &ztmp);
jit_regset_and(mask, mask, &ztmp); jit_regset_and(mask, mask, &ztmp);
} }
if (bmp_tst(label->v.w))
continue;
bmp_set(label->v.w);
if (jit_regset_set_p(mask) == 0) if (jit_regset_set_p(mask) == 0)
return; return;
/* restore mask if branch is conditional */ /* restore mask if branch is conditional */