[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