Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77850:13cfedd23e39
Date: 2015-06-04 11:52 +0200
http://bitbucket.org/pypy/pypy/changeset/13cfedd23e39/

Log:    skip one too direct test. fix one case of virtuals

diff --git a/rpython/jit/metainterp/optimizeopt/info.py 
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -80,6 +80,7 @@
 
     def force_box(self, op, optforce):
         if self.is_virtual():
+            optforce.forget_numberings()
             op.set_forwarded(None)
             optforce._emit_operation(op)
             newop = optforce.getlastop()
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -428,8 +428,8 @@
     def produce_potential_short_preamble_ops(self, potential_ops):
         pass
 
-    def forget_numberings(self, box):
-        self.optimizer.forget_numberings(box)
+    def forget_numberings(self):
+        self.optimizer.forget_numberings()
 
     def _can_optimize_call_pure(self, op):
         arg_consts = []
@@ -513,9 +513,9 @@
         for opt in self.optimizations:
             opt.produce_potential_short_preamble_ops(sb)
 
-    def forget_numberings(self, virtualbox):
+    def forget_numberings(self):
         self.metainterp_sd.profiler.count(jitprof.Counters.OPT_FORCINGS)
-        self.resumedata_memo.forget_numberings(virtualbox)
+        self.resumedata_memo.forget_numberings()
 
     def getinterned(self, box):
         constbox = self.get_constant_box(box)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py 
b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -651,13 +651,16 @@
         # was already forced).
 
     def _optimize_JIT_FORCE_VIRTUAL(self, op):
-        raise Exception("implement me")
-        vref = self.getvalue(op.getarg(1))
+        vref = self.getptrinfo(op.getarg(1))
         vrefinfo = self.optimizer.metainterp_sd.virtualref_info
-        if vref.is_virtual():
-            tokenvalue = vref.getfield(vrefinfo.descr_virtual_token, None)
-            if (tokenvalue is not None and tokenvalue.is_constant() and
-                    not tokenvalue.box.nonnull()):
+        if vref and vref.is_virtual():
+            tokenop = vref.getfield(vrefinfo.descr_virtual_token, None)
+            if tokenop is None:
+                return False
+            tokeninfo = self.getptrinfo(tokenop)
+            if (tokeninfo is not None and tokeninfo.is_constant() and
+                    not tokeninfo.is_null()):
+                xxx
                 forcedvalue = vref.getfield(vrefinfo.descr_forced, None)
                 if forcedvalue is not None and not forcedvalue.is_null():
                     self.make_equal_to(op, forcedvalue)
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py 
b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -79,6 +79,7 @@
     def force_box(self, op, optforce):
         if not self.is_virtual():
             return op
+        optforce.forget_numberings()
         if self.mode is mode_string:
             s = self.get_constant_string_spec(optforce, mode_string)
             if s is not None:
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -240,7 +240,7 @@
         self.numberings[snapshot] = numb, liveboxes, v
         return numb, liveboxes.copy(), v
 
-    def forget_numberings(self, virtualbox):
+    def forget_numberings(self):
         # XXX ideally clear only the affected numberings
         self.numberings.clear()
         self.clear_box_virtual_numbers()
@@ -403,6 +403,7 @@
                 else:
                     assert box.type == 'i'
                     info = optimizer.getrawptrinfo(box)
+                assert info.is_virtual()
                 info.visitor_walk_recursive(box, self, optimizer)
 
         for setfield_op in pending_setfields:
diff --git a/rpython/jit/metainterp/test/support.py 
b/rpython/jit/metainterp/test/support.py
--- a/rpython/jit/metainterp/test/support.py
+++ b/rpython/jit/metainterp/test/support.py
@@ -150,13 +150,13 @@
     faildescr = cpu.get_latest_descr(deadframe)
     assert faildescr.__class__.__name__.startswith('DoneWithThisFrameDescr')
     if metainterp.jitdriver_sd.result_type == history.INT:
-        return cpu.get_int_value(deadframe, 0)
+        return deadframe, cpu.get_int_value(deadframe, 0)
     elif metainterp.jitdriver_sd.result_type == history.REF:
-        return cpu.get_ref_value(deadframe, 0)
+        return deadframe, cpu.get_ref_value(deadframe, 0)
     elif metainterp.jitdriver_sd.result_type == history.FLOAT:
-        return cpu.get_float_value(deadframe, 0)
+        return deadframe, cpu.get_float_value(deadframe, 0)
     else:
-        return None
+        return deadframe, None
 
 
 class JitMixin:
@@ -251,7 +251,8 @@
         result2 = _run_with_pyjitpl(self, args)
         assert result1 == result2 or isnan(result1) and isnan(result2)
         # try to run it by running the code compiled just before
-        result3 = _run_with_machine_code(self, args)
+        df, result3 = _run_with_machine_code(self, args)
+        self._lastframe = df
         assert result1 == result3 or result3 == NotImplemented or 
isnan(result1) and isnan(result3)
         #
         if (longlong.supports_longlong and
diff --git a/rpython/jit/metainterp/test/test_virtualref.py 
b/rpython/jit/metainterp/test/test_virtualref.py
--- a/rpython/jit/metainterp/test/test_virtualref.py
+++ b/rpython/jit/metainterp/test/test_virtualref.py
@@ -105,18 +105,20 @@
         bxs1 = [box for box in guard_op.getfailargs()
                   if '.X' in str(box)]
         assert len(bxs1) == 1
-        bxs2 = [box for box in guard_op.getfailargs()
-                  if 'JitVirtualRef' in str(box)]
+        bxs2 = [(i, box) for i, box in
+                            enumerate(guard_op.getfailargs())
+                            if 'JitVirtualRef' in str(box)]
         assert len(bxs2) == 1
         JIT_VIRTUAL_REF = self.vrefinfo.JIT_VIRTUAL_REF
         FOO = lltype.GcStruct('FOO')
         foo = lltype.malloc(FOO)
         tok = lltype.cast_opaque_ptr(llmemory.GCREF, foo)
+        cpu = self.metainterp.cpu
+        py.test.skip("rewrite this test")
         bxs2[0].getref(lltype.Ptr(JIT_VIRTUAL_REF)).virtual_token = tok
         #
         # try reloading from blackhole.py's point of view
         from rpython.jit.metainterp.resume import ResumeDataDirectReader
-        cpu = self.metainterp.cpu
         cpu.get_int_value = lambda df,i:guard_op.getfailargs()[i].getint()
         cpu.get_ref_value = lambda df,i:guard_op.getfailargs()[i].getref_base()
         class FakeMetaInterpSd:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to