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