[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