[pypy-commit] pypy optresult: fixes

fijal noreply at buildbot.pypy.org
Fri May 29 19:24:58 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r77695:02acbb0f8f39
Date: 2015-05-29 19:25 +0200
http://bitbucket.org/pypy/pypy/changeset/02acbb0f8f39/

Log:	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
@@ -436,11 +436,14 @@
                 # SETFIELD_GC or SETARRAYITEM_GC.
                 opinfo = self.getptrinfo(op.getarg(0))
                 assert not opinfo.is_virtual()      # it must be a non-virtual
-                fieldinfo = self.getptrinfo(op.getarg(2))
-                if fieldinfo.is_virtual():
-                    pendingfields.append(op)
+                if op.getarg(2).type == 'r':
+                    fieldinfo = self.getptrinfo(op.getarg(2))
+                    if fieldinfo.is_virtual():
+                        pendingfields.append(op)
+                    else:
+                        cf.force_lazy_setfield(self, descr)
                 else:
-                    cf.force_lazy_setfield(self, descr)
+                    cf.force_lazy_setfield(self, descr)                    
         return pendingfields
 
     def optimize_GETFIELD_GC_I(self, op):
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -423,9 +423,9 @@
 
     def optimize_COND_CALL(self, op):
         arg = op.getarg(0)
-        val = self.getvalue(arg)
-        if val.is_constant():
-            if val.box.same_constant(CONST_0):
+        b = self.getintbound(arg)
+        if b.is_constant():
+            if b.getint() == 0:
                 self.last_emitted_operation = REMOVED
                 return
             opnum = OpHelpers.call_for_type(op)
@@ -472,7 +472,10 @@
             self.make_constant_int(op, not expect_isnot)
         else:
             if instance:
-                cls0 = info0.get_known_class(self.optimizer.cpu)
+                if info0 is None:
+                    cls0 = None
+                else:
+                    cls0 = info0.get_known_class(self.optimizer.cpu)
                 if cls0 is not None:
                     cls1 = info1.get_known_class(self.optimizer.cpu)
                     if cls1 is not None and not cls0.same_constant(cls1):
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
@@ -615,14 +615,20 @@
         return sbox
 
     @arguments("box", "box", "descr", "descr")
-    def _opimpl_getlistitem_gc_any(self, listbox, indexbox,
+    def opimpl_getlistitem_gc_i(self, listbox, indexbox,
                                    itemsdescr, arraydescr):
-        arraybox = self._opimpl_getfield_gc_any(listbox, itemsdescr)
-        return self._opimpl_getarrayitem_gc_any(arraybox, indexbox, arraydescr)
-
-    opimpl_getlistitem_gc_i = _opimpl_getlistitem_gc_any
-    opimpl_getlistitem_gc_r = _opimpl_getlistitem_gc_any
-    opimpl_getlistitem_gc_f = _opimpl_getlistitem_gc_any
+        arraybox = self.opimpl_getfield_gc_r(listbox, itemsdescr)
+        return self.opimpl_getarrayitem_gc_i(arraybox, indexbox, arraydescr)
+    @arguments("box", "box", "descr", "descr")
+    def opimpl_getlistitem_gc_r(self, listbox, indexbox,
+                                   itemsdescr, arraydescr):
+        arraybox = self.opimpl_getfield_gc_r(listbox, itemsdescr)
+        return self.opimpl_getarrayitem_gc_r(arraybox, indexbox, arraydescr)
+    @arguments("box", "box", "descr", "descr")
+    def opimpl_getlistitem_gc_f(self, listbox, indexbox,
+                                   itemsdescr, arraydescr):
+        arraybox = self.opimpl_getfield_gc_r(listbox, itemsdescr)
+        return self.opimpl_getarrayitem_gc_f(arraybox, indexbox, arraydescr)
 
     @arguments("box", "box", "box", "descr", "descr")
     def _opimpl_setlistitem_gc_any(self, listbox, indexbox, valuebox,
@@ -668,7 +674,7 @@
             # if 'box' is directly a ConstPtr, bypass the heapcache completely
             resbox = executor.execute(self.metainterp.cpu, self.metainterp,
                                       rop.GETFIELD_GC_PURE_I, fielddescr, box)
-            return resbox.constbox()
+            return ConstInt(resbox)
         return self._opimpl_getfield_gc_any_pureornot(
                 rop.GETFIELD_GC_PURE_I, box, fielddescr, 'i')
 
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
@@ -132,8 +132,10 @@
 
     @specialize.argtype(1)
     def setvalue(self, value):
-        if isinstance(value, int):
+        if lltype.typeOf(value) == lltype.Signed:
             self._resint = value
+        elif type(value) == bool:
+            self._resint = int(value)
         elif isinstance(value, float):
             self._resfloat = value
         elif value is None:
diff --git a/rpython/jit/metainterp/test/test_blackhole.py b/rpython/jit/metainterp/test/test_blackhole.py
--- a/rpython/jit/metainterp/test/test_blackhole.py
+++ b/rpython/jit/metainterp/test/test_blackhole.py
@@ -4,7 +4,7 @@
 from rpython.jit.metainterp.blackhole import BlackholeInterpBuilder
 from rpython.jit.metainterp.blackhole import BlackholeInterpreter
 from rpython.jit.metainterp.blackhole import convert_and_run_from_pyjitpl
-from rpython.jit.metainterp import history, pyjitpl, jitexc
+from rpython.jit.metainterp import history, pyjitpl, jitexc, resoperation
 from rpython.jit.codewriter.assembler import JitCode
 from rpython.rtyper.lltypesystem import lltype, llmemory
 from rpython.rtyper.llinterp import LLException
@@ -121,7 +121,7 @@
                       num_regs_i=3, num_regs_r=0, num_regs_f=0)
         jitcode.is_portal = True
         pc = 1
-        registers_i = [history.BoxInt(40), history.ConstInt(2), None]
+        registers_i = [resoperation.InputArgInt(40), history.ConstInt(2), None]
     class MyMetaInterp:
         class staticdata:
             result_type = 'int'
diff --git a/rpython/jit/metainterp/test/test_compile.py b/rpython/jit/metainterp/test/test_compile.py
--- a/rpython/jit/metainterp/test/test_compile.py
+++ b/rpython/jit/metainterp/test/test_compile.py
@@ -71,9 +71,9 @@
     #
     loop = parse('''
     [p1]
-    i1 = getfield_gc(p1, descr=valuedescr)
+    i1 = getfield_gc_i(p1, descr=valuedescr)
     i2 = int_add(i1, 1)
-    p2 = new_with_vtable(ConstClass(node_vtable))
+    p2 = new_with_vtable(descr=nodesize)
     setfield_gc(p2, i2, descr=valuedescr)
     jump(p2)
     ''', namespace=LLtypeMixin.__dict__.copy())


More information about the pypy-commit mailing list