On Fri Nov 10 17:36:05 2006, mdiep wrote: > This was taken from t/pmc/iterator.t: > > # XXX > # swapping the next two lines breaks JIT/i386 > # the reason is the if/unless optimization: When the > # previous opcode sets flags, these are used - but > # there is no check, that the same register is used in the "if". > inc I0 > dec I1 > if I1, fill > > I've taken this comment out of the test file because it's in no way > relevant to Iterator. It needs to be confirmed or rejected. And if it > *is* confirmed, it needs to be added as a test somewhere else. > Well, in core.jit I see:
TEMPLATE Parrot_ifunless_x_ic { /* * FIXME - the compare prev_op[1] == cur_op[1] should do it * dec I1 * inc I0 * if I1, boom */ if ( P_ARITH && jit_info->prev_op[1] == jit_info->cur_op[1]) { It's not clear to me from that comment if the text after FIXME explains that the test does not work or that it was added to do the fix. I suspect the second - it's the Right Thing to do as far as I can see, and trying to re-create the bug does not show it up. I swapped those lines round on the test, and it still passes under -j. I think maybe this bug is resolved and the FIXME comment should go, but a comment from someone who's worked on the JIT would be nice. Jonathan