Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit