[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