[pypy-commit] pypy optresult: pass some more tests

fijal noreply at buildbot.pypy.org
Mon Mar 9 09:41:48 CET 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r76287:643f3c00c690
Date: 2015-03-08 10:55 +0200
http://bitbucket.org/pypy/pypy/changeset/643f3c00c690/

Log:	pass some more tests

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
@@ -1,6 +1,7 @@
 
 from rpython.jit.metainterp.resoperation import AbstractValue, ResOperation,\
      rop
+from rpython.jit.metainterp.history import ConstInt
 
 """ The tag field on PtrOptInfo has a following meaning:
 
@@ -112,6 +113,9 @@
 class ArrayPtrInfo(AbstractVirtualPtrInfo):
     _attrs_ = ('_is_virtual', 'length', '_items', '_descr')
 
+    def getlength(self):
+        return self.length
+
 class ArrayStructInfo(ArrayPtrInfo):
     def __init__(self, descr, size, is_virtual):
         self.length = size
@@ -140,7 +144,7 @@
                 if fld is not None:
                     subbox = optforce.force_box(fld)
                     setfieldop = ResOperation(rop.SETINTERIORFIELD_GC,
-                                              [op, subbox],
+                                              [op, ConstInt(index), subbox],
                                               descr=flddescr)
                     optforce.emit_operation(setfieldop)
                 i += 1
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -352,26 +352,27 @@
             self.emit_operation(op)
 
     def optimize_INT_SIGNEXT(self, op):
-        value = self.getvalue(op.getarg(0))
+        b = self.getintbound(op.getarg(0))
         numbits = op.getarg(1).getint() * 8
         start = -(1 << (numbits - 1))
         stop = 1 << (numbits - 1)
         bounds = IntBound(start, stop - 1)
-        if bounds.contains_bound(value.getintbound()):
-            self.make_equal_to(op, value)
+        if bounds.contains_bound(b):
+            self.make_equal_to(op, op.getarg(0))
         else:
             self.emit_operation(op)
-            vres = self.getvalue(op)
-            vres.getintbound().intersect(bounds)
+            bres = self.getintbound(op)
+            bres.intersect(bounds)
 
     def optimize_ARRAYLEN_GC(self, op):
         self.emit_operation(op)
-        array = self.getvalue(op.getarg(0))
-        result = self.getvalue(op)
-        array.make_len_gt(MODE_ARRAY, op.getdescr(), -1)
-        array.getlenbound().bound.intersect(result.getintbound())
-        assert isinstance(result, IntOptValue)
-        result.intbound = array.getlenbound().bound
+        # XXX
+        #array = self.getvalue(op.getarg(0))
+        #result = self.getvalue(op)
+        #array.make_len_gt(MODE_ARRAY, op.getdescr(), -1)
+        #array.getlenbound().bound.intersect(result.getintbound())
+        #assert isinstance(result, IntOptValue)
+        #result.intbound = array.getlenbound().bound
 
     def optimize_STRLEN(self, op):
         self.emit_operation(op)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -963,8 +963,8 @@
         [f0, f1]
         f2 = float_mul(f0, f1)
         p0 = new_array_clear(1, descr=complexarraydescr)
+        setinteriorfield_gc(p0, 0, f0, descr=complexrealdescr)
         setinteriorfield_gc(p0, 0, f1, descr=compleximagdescr)
-        setinteriorfield_gc(p0, 0, f0, descr=complexrealdescr)
         i0 = escape_i(f2, p0)
         finish(i0)
         """
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
@@ -777,11 +777,11 @@
         self.emit_operation(op)
 
     def optimize_ARRAYLEN_GC(self, op):
-        value = self.getvalue(op.getarg(0))
-        if value.is_virtual():
-            self.make_constant_int(op, value.getlength())
+        opinfo = self.getptrinfo(op.getarg(0))
+        if opinfo and opinfo.is_virtual():
+            self.make_constant_int(op, opinfo.getlength())
         else:
-            value.ensure_nonnull()
+            self.make_nonnull(op.getarg(0))
             self.emit_operation(op)
 
     def optimize_GETARRAYITEM_GC_I(self, op):


More information about the pypy-commit mailing list