[pypy-commit] pypy continulet-jit-3: (fijal, arigo) work in progress
arigo
noreply at buildbot.pypy.org
Tue Oct 16 19:07:35 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: continulet-jit-3
Changeset: r58145:254e7646834e
Date: 2012-10-16 19:07 +0200
http://bitbucket.org/pypy/pypy/changeset/254e7646834e/
Log: (fijal, arigo) work in progress
diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -641,7 +641,7 @@
count_jumps = _stats.exec_jumps
log.trace('ran %d operations, %d jumps' % (count, count_jumps))
- def _normalizedcontainer(self):
+ def _normalizedcontainer(self, check="ignored"):
return self # for lltype
# ----------
diff --git a/pypy/jit/metainterp/heapcache.py b/pypy/jit/metainterp/heapcache.py
--- a/pypy/jit/metainterp/heapcache.py
+++ b/pypy/jit/metainterp/heapcache.py
@@ -19,7 +19,7 @@
# escapes.
self.dependencies = {}
# contains frame boxes that are not virtualizables
- self.nonstandard_virtualizables = {}
+ #self.nonstandard_virtualizables = {}
# heap cache
# maps descrs to {from_box, to_box} dicts
@@ -136,11 +136,11 @@
def class_now_known(self, box):
self.known_class_boxes[box] = None
- def is_nonstandard_virtualizable(self, box):
- return box in self.nonstandard_virtualizables
+ #def is_nonstandard_virtualizable(self, box):
+ # return box in self.nonstandard_virtualizables
- def nonstandard_virtualizables_now_known(self, box):
- self.nonstandard_virtualizables[box] = None
+ #def nonstandard_virtualizables_now_known(self, box):
+ # self.nonstandard_virtualizables[box] = None
def is_unescaped(self, box):
return self.new_boxes.get(box, False)
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -719,8 +719,8 @@
standard_box = self.metainterp.virtualizable_boxes[-1]
if standard_box is box:
return False
- if self.metainterp.heapcache.is_nonstandard_virtualizable(box):
- return True
+ #if self.metainterp.heapcache.is_nonstandard_virtualizable(box):
+ # return True
eqbox = self.metainterp.execute_and_record(rop.PTR_EQ, None,
box, standard_box)
eqbox = self.implement_guard_value(pc, eqbox)
@@ -728,9 +728,30 @@
if isstandard:
self.metainterp.replace_box(box, standard_box)
else:
- self.metainterp.heapcache.nonstandard_virtualizables_now_known(box)
+ self._force_virtualizable_if_necessary(box, pc)
+ pass #self.metainterp.heapcache.nonstandard_virtualizables_now_known(box)
return not isstandard
+ def _force_virtualizable_if_necessary(self, box, orgpc):
+ vinfo = self.metainterp.jitdriver_sd.virtualizable_info
+ if vinfo is None:
+ return # xxx?
+ if self.metainterp.heapcache.is_unescaped(box):
+ return
+ jfbox = self._opimpl_getfield_gc_any(box, vinfo.jit_frame_descr)
+ if not self._establish_nullity(jfbox, orgpc):
+ return # jfbox is NULL
+ cpu = self.metainterp.cpu
+ descr = cpu.jitframe_get_jfdescr_descr()
+ jfdescrbox = self._opimpl_getfield_gc_any(jfbox, descr)
+ jfdescrbox = self.implement_guard_value(pc, jfdescrbox)
+ jfdescr = jfdescrbox.getref_base()
+ descr = cpu.jitframe_cast_jfdescr_to_descr(jfdescr)
+ if not descr:
+ return
+ import pdb; pdb.set_trace()
+ xxx
+
def _get_virtualizable_field_index(self, fielddescr):
# Get the index of a fielddescr. Must only be called for
# the "standard" virtualizable.
More information about the pypy-commit
mailing list