From f42a251ff14e14d44f9cdb07be58cd5b1149452b Mon Sep 17 00:00:00 2001 From: pcpa Date: Tue, 1 Oct 2013 13:51:01 -0300 Subject: [PATCH] Correct misplaced check for already visited blocks --- ChangeLog | 9 +++++++++ lib/jit_print.c | 6 +++--- lib/lightning.c | 6 +++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60851b38d..351166b56 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-10-30 Paulo Andrade + + * 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 * lib/jit_x86-cpu.c: Correct not properly tested case of using diff --git a/lib/jit_print.c b/lib/jit_print.c index a5cdc217a..17d2559cd 100644 --- a/lib/jit_print.c +++ b/lib/jit_print.c @@ -396,14 +396,14 @@ _jit_print(jit_state_t *_jit) continue; case jit_code_name: print_chr(' '); - if (node->v.p) + if (node->v.p && _jitc->emit) print_str(node->v.n->u.p); break; case jit_code_note: print_chr(' '); - if (node->v.p) + if (node->v.p && _jitc->emit) 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(':'); if (node->w.w) print_dec(node->w.w); diff --git a/lib/lightning.c b/lib/lightning.c index e6c7f4b13..635a20180 100644 --- a/lib/lightning.c +++ b/lib/lightning.c @@ -1983,15 +1983,15 @@ _jit_update(jit_state_t *_jit, jit_node_t *node, goto restart; } 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); if (jit_regset_set_p(&ztmp)) { jit_regset_ior(live, live, &ztmp); jit_regset_com(&ztmp, &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) return; /* restore mask if branch is conditional */