Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit