[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