[pypy-commit] pypy result-in-resops: some fixes
fijal
noreply at buildbot.pypy.org
Tue Sep 25 17:03:14 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r57578:8c16939c1313
Date: 2012-09-25 14:50 +0200
http://bitbucket.org/pypy/pypy/changeset/8c16939c1313/
Log: some fixes
diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py
--- a/pypy/jit/metainterp/optimizeopt/heap.py
+++ b/pypy/jit/metainterp/optimizeopt/heap.py
@@ -360,7 +360,7 @@
assert itemindex >= 0
else:
assert 0
- pendingfields.append((op.getdescr(), value.box,
+ pendingfields.append((op.getdescr(), value.op,
fieldvalue.get_key_box(), itemindex))
else:
cf.force_lazy_setfield(self)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -1598,8 +1598,8 @@
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p0, p1, descr=nextdescr)
setfield_raw(i1, i1, descr=valuedescr) # random op with side-effects
- p2 = getfield_gc(p0, descr=nextdescr)
- i2 = getfield_gc(p2, descr=valuedescr)
+ p2 = getfield_gc_p(p0, descr=nextdescr)
+ i2 = getfield_gc_i(p2, descr=valuedescr)
setfield_gc(p0, NULL, descr=nextdescr)
escape(i2)
jump(p0, i1)
@@ -1641,7 +1641,7 @@
[p1, i2, i3]
p2 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, p2, descr=nextdescr)
- guard_true(i3) []
+ guard_true(i3) [p1]
i4 = int_neg(i2)
setfield_gc(p1, NULL, descr=nextdescr)
jump(p1, i2, i4)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_util.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py
@@ -401,16 +401,12 @@
return parse(s, self.cpu, self.namespace,
type_system=self.type_system,
boxkinds=boxkinds,
- results=results)
+ results=results, process_guard=self.process_guard)
- def invent_fail_descr(self, model, fail_args):
- xxx
- if fail_args is None:
- return None
- descr = Storage()
- descr.rd_frame_info_list = resume.FrameInfo(None, "code", 11)
- descr.rd_snapshot = resume.Snapshot(None, _sortboxes(fail_args))
- return descr
+ def process_guard(self, guard_op):
+ fail_args = guard_op.get_extra("failargs")
+ guard_op.set_rd_frame_info_list(resume.FrameInfo(None, "code", 11))
+ guard_op.set_rd_snapshot(resume.Snapshot(None, _sortboxes(fail_args)))
def assert_equal(self, optimized, expected, text_right=None):
from pypy.jit.metainterp.optimizeopt.util import equaloplists
diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py b/pypy/jit/metainterp/optimizeopt/virtualize.py
--- a/pypy/jit/metainterp/optimizeopt/virtualize.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualize.py
@@ -24,11 +24,6 @@
def is_virtual(self):
return not self.forced
- def get_key_box(self):
- if self.box is None:
- return self.keybox
- return self.box
-
def force_box(self, optforce):
if not self.forced:
optforce.forget_numberings(self.op)
@@ -186,12 +181,12 @@
return lst
def get_args_for_fail(self, modifier):
- if self.box is None and not modifier.already_seen_virtual(self.keybox):
+ if not self.forced and not modifier.already_seen_virtual(self.op):
# checks for recursion: it is False unless
# we have already seen the very same keybox
lst = self._get_field_descr_list()
fieldboxes = [self._fields[ofs].get_key_box() for ofs in lst]
- modifier.register_virtual_fields(self.keybox, fieldboxes)
+ modifier.register_virtual_fields(self.op, fieldboxes)
for ofs in lst:
fieldvalue = self._fields[ofs]
fieldvalue.get_args_for_fail(modifier)
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -300,7 +300,7 @@
self._register_boxes(fieldboxes)
def register_box(self, box):
- if (isinstance(box, Box) and box not in self.liveboxes_from_env
+ if (not box.is_constant() and box not in self.liveboxes_from_env
and box not in self.liveboxes):
self.liveboxes[box] = UNASSIGNED
diff --git a/pypy/jit/tool/oparser.py b/pypy/jit/tool/oparser.py
--- a/pypy/jit/tool/oparser.py
+++ b/pypy/jit/tool/oparser.py
@@ -289,8 +289,6 @@
r = create_resop_dispatch(opnum, result, args)
if descr is not None:
r.setdescr(descr)
- if self.process_guard and r.is_guard():
- self.process_guard(r)
return r
def parse_result_op(self, line, num):
@@ -308,6 +306,8 @@
self.vars[res] = opres
if fail_args is not None:
opres.set_extra("failargs", fail_args)
+ if self.process_guard and opres.is_guard():
+ self.process_guard(opres)
return opres
def parse_op_no_result(self, line):
@@ -315,6 +315,8 @@
res = self.create_op(opnum, None, args, descr)
if fail_args is not None:
res.set_extra("failargs", fail_args)
+ if self.process_guard and res.is_guard():
+ self.process_guard(res)
return res
def parse_next_op(self, line, num):
More information about the pypy-commit
mailing list