[pypy-commit] pypy optresult: small fixes
fijal
noreply at buildbot.pypy.org
Fri May 29 15:48:29 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r77686:b0ad8d63a2e4
Date: 2015-05-29 14:44 +0200
http://bitbucket.org/pypy/pypy/changeset/b0ad8d63a2e4/
Log: small fixes
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -321,10 +321,10 @@
#
from rpython.rtyper.lltypesystem.rordereddict import FLAG_LOOKUP
from rpython.rtyper.lltypesystem.rordereddict import FLAG_STORE
- flag_value = self.getvalue(op.getarg(4))
+ flag_value = self.getintbound(op.getarg(4))
if not flag_value.is_constant():
return False
- flag = flag_value.get_constant_int()
+ flag = flag_value.getint()
if flag != FLAG_LOOKUP and flag != FLAG_STORE:
return False
#
@@ -344,11 +344,11 @@
res_v = d[key]
except KeyError:
if flag == FLAG_LOOKUP:
- d[key] = self.getvalue(op)
+ d[key] = op
return False
else:
if flag != FLAG_LOOKUP:
- if not res_v.getintbound().known_ge(IntBound(0, 0)):
+ if not self.getintbound(res_v).known_ge(IntBound(0, 0)):
return False
self.make_equal_to(op, res_v)
self.last_emitted_operation = REMOVED
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
@@ -205,7 +205,7 @@
count += 1
return count
- def setitem(self, index, item, cf=None):
+ def setitem(self, index, item, cf=None, optheap=None):
if self._items is None:
self._items = [None] * (index + 1)
if index >= len(self._items):
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
@@ -456,7 +456,12 @@
# corresponds to what the cache thinks the value is
resvalue = executor.execute(self.metainterp.cpu, self.metainterp,
op, arraydescr, arraybox, indexbox)
- assert resvalue == tobox.getref_base()
+ if op == 'i':
+ assert resvalue == tobox.getint()
+ elif op == 'r':
+ assert resvalue == tobox.getref_base()
+ elif op == 'f':
+ assert resvalue == tobox.getfloat()
return tobox
resop = self.execute_with_descr(op, arraydescr, arraybox, indexbox)
self.metainterp.heapcache.getarrayitem_now_known(
@@ -1568,7 +1573,9 @@
else:
effect = effectinfo.extraeffect
if effect == effectinfo.EF_LOOPINVARIANT:
- return self.execute_varargs(rop.CALL_LOOPINVARIANT, allboxes,
+ opnum = OpHelpers.call_loopinvariant_for_descr(descr)
+ return self.execute_varargs(opnum,
+ allboxes,
descr, False, False)
exc = effectinfo.check_can_raise()
pure = effectinfo.check_is_elidable()
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -1055,6 +1055,18 @@
return rop.CALL_ASSEMBLER_N
@staticmethod
+ def call_loopinvariant_for_descr(descr):
+ tp = descr.get_result_type()
+ if tp == 'i':
+ return rop.CALL_LOOPINVARIANT_I
+ elif tp == 'r':
+ return rop.CALL_LOOPINVARIANT_R
+ elif tp == 'f':
+ return rop.CALL_LOOPINVARIANT_F
+ assert tp == 'v'
+ return rop.CALL_LOOPINVARIANT_N
+
+ @staticmethod
def getfield_pure_for_descr(descr):
if descr.is_pointer_field():
return rop.GETFIELD_GC_PURE_R
More information about the pypy-commit
mailing list