Author: Maciej Fijalkowski <fij...@gmail.com> Branch: kill-gen-store-back-in Changeset: r65623:ea276f1cdcea Date: 2013-07-24 19:20 +0200 http://bitbucket.org/pypy/pypy/changeset/ea276f1cdcea/
Log: kill teh need for force_virtualizable diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py --- a/rpython/jit/metainterp/pyjitpl.py +++ b/rpython/jit/metainterp/pyjitpl.py @@ -18,7 +18,7 @@ from rpython.rlib.jit import Counters from rpython.rlib.objectmodel import we_are_translated, specialize from rpython.rlib.unroll import unrolling_iterable -from rpython.rtyper.lltypesystem import lltype, rclass +from rpython.rtyper.lltypesystem import lltype, rclass, rffi @@ -731,11 +731,22 @@ self.metainterp.replace_box(box, standard_box) return False if not self.metainterp.heapcache.is_unescaped(box): - self.metainterp.execute_and_record(rop.FORCE_VIRTUALIZABLE, - fielddescr, box) + self.emit_force_virtualizable(fielddescr, box) self.metainterp.heapcache.nonstandard_virtualizables_now_known(box) return True + def emit_force_virtualizable(self, fielddescr, box): + vinfo = fielddescr.get_vinfo() + token_descr = vinfo.vable_token_descr + mi = self.metainterp + tokenbox = mi.execute_and_record(rop.GETFIELD_GC, token_descr, box) + condbox = mi.execute_and_record(rop.PTR_NE, None, tokenbox, + history.CONST_NULL) + funcbox = ConstInt(rffi.cast(lltype.Signed, vinfo.clear_vable_ptr)) + calldescr = vinfo.clear_vable_descr + self.execute_varargs(rop.COND_CALL, [condbox, funcbox, box], + calldescr, False, False) + def _get_virtualizable_field_index(self, fielddescr): # Get the index of a fielddescr. Must only be called for # the "standard" virtualizable. diff --git a/rpython/jit/metainterp/test/test_virtualizable.py b/rpython/jit/metainterp/test/test_virtualizable.py --- a/rpython/jit/metainterp/test/test_virtualizable.py +++ b/rpython/jit/metainterp/test/test_virtualizable.py @@ -202,8 +202,8 @@ return xy.inst_x res = self.meta_interp(f, [20]) assert res == 134 - self.check_simple_loop(setfield_gc=1, getfield_gc=0, force_virtualizable=1) - self.check_resops(setfield_gc=2, getfield_gc=3) + self.check_simple_loop(setfield_gc=1, getfield_gc=0, cond_call=1) + self.check_resops(setfield_gc=2, getfield_gc=4) # ------------------------------ @@ -384,7 +384,7 @@ res = self.meta_interp(f, [20], enable_opts='') assert res == expected self.check_simple_loop(setarrayitem_gc=1, setfield_gc=0, - getarrayitem_gc=1, arraylen_gc=1, getfield_gc=1) + getarrayitem_gc=1, arraylen_gc=1, getfield_gc=2) # ------------------------------ _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit