Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult
Changeset: r77765:24891008629e
Date: 2015-06-02 15:24 +0200
http://bitbucket.org/pypy/pypy/changeset/24891008629e/

Log:    fixes to virtualizable

diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -329,7 +329,7 @@
     for descr in vinfo.array_field_descrs:
         vable = vable_box.getref_base()
         arraylen = vinfo.get_array_length(vable, arrayindex)
-        arrayop = ResOperation(rop.GETFIELD_GC, [vable_box], descr)
+        arrayop = ResOperation(rop.GETFIELD_GC_R, [vable_box], descr)
         emit_op(extra_ops, arrayop)
         arraydescr = vinfo.array_descrs[arrayindex]
         assert i + arraylen <= len(inputargs)
@@ -337,7 +337,7 @@
             opnum = OpHelpers.getarrayitem_for_descr(arraydescr)
             box = inputargs[i]
             emit_op(extra_ops,
-                ResOperation(rop.GETARRAYITEM_GC,
+                ResOperation(opnum,
                              [arrayop, ConstInt(index)],
                              descr=arraydescr))
             i += 1
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
@@ -594,8 +594,8 @@
         effectinfo = op.getdescr().get_extra_info()
         oopspecindex = effectinfo.oopspecindex
         if oopspecindex == EffectInfo.OS_JIT_FORCE_VIRTUALIZABLE:
-            value = self.getvalue(op.getarg(2))
-            if value.is_virtual():
+            opinfo = self.getptrinfo(op.getarg(2))
+            if opinfo and opinfo.is_virtual():
                 return
         self.emit_operation(op)
 
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
@@ -876,7 +876,7 @@
         assert vinfo is not None
         token_descr = vinfo.vable_token_descr
         mi = self.metainterp
-        tokenbox = mi.execute_and_record(rop.GETFIELD_GC, token_descr, box)
+        tokenbox = mi.execute_and_record(rop.GETFIELD_GC_R, 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))
@@ -945,8 +945,13 @@
     @arguments("box", "box", "descr", "descr", "orgpc")
     def _opimpl_getarrayitem_vable(self, box, indexbox, fdescr, adescr, pc):
         if self._nonstandard_virtualizable(pc, box, fdescr):
-            arraybox = self._opimpl_getfield_gc_any(box, fdescr)
-            return self._opimpl_getarrayitem_gc_any(arraybox, indexbox, adescr)
+            arraybox = self.opimpl_getfield_gc_r(box, fdescr)
+            if adescr.is_array_of_pointers():
+                return self.opimpl_getarrayitem_gc_r(arraybox, indexbox, 
adescr)
+            elif adescr.is_array_of_floats():
+                return self.opimpl_getarrayitem_gc_f(arraybox, indexbox, 
adescr)
+            else:
+                return self.opimpl_getarrayitem_gc_i(arraybox, indexbox, 
adescr)
         self.metainterp.check_synchronized_virtualizable()
         index = self._get_arrayitem_vable_index(pc, fdescr, indexbox)
         return self.metainterp.virtualizable_boxes[index]
@@ -959,7 +964,7 @@
     def _opimpl_setarrayitem_vable(self, box, indexbox, valuebox,
                                    fdescr, adescr, pc):
         if self._nonstandard_virtualizable(pc, box, fdescr):
-            arraybox = self._opimpl_getfield_gc_any(box, fdescr)
+            arraybox = self.opimpl_getfield_gc_r(box, fdescr)
             self._opimpl_setarrayitem_gc_any(arraybox, indexbox, valuebox,
                                              adescr)
             return
@@ -975,7 +980,7 @@
     @arguments("box", "descr", "descr", "orgpc")
     def opimpl_arraylen_vable(self, box, fdescr, adescr, pc):
         if self._nonstandard_virtualizable(pc, box, fdescr):
-            arraybox = self._opimpl_getfield_gc_any(box, fdescr)
+            arraybox = self.opimpl_getfield_gc_r(box, fdescr)
             return self.opimpl_arraylen_gc(arraybox, adescr)
         vinfo = self.metainterp.jitdriver_sd.virtualizable_info
         virtualizable_box = self.metainterp.virtualizable_boxes[-1]
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to