Author: Maciej Fijalkowski <[email protected]>
Branch: improve-consecutive-dict-lookups
Changeset: r70008:0fdf94cb8da0
Date: 2014-03-17 11:54 +0200
http://bitbucket.org/pypy/pypy/changeset/0fdf94cb8da0/
Log: fix guard_exception and write a failing test
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
@@ -177,6 +177,7 @@
self._remove_guard_not_invalidated = False
self._seen_guard_not_invalidated = False
self.postponed_op = None
+ self.remove_next_guard = False
def force_at_end_of_preamble(self):
self.cached_dict_reads.clear()
@@ -306,6 +307,7 @@
try:
res_v = d[args]
self.optimizer.make_equal_to(op.result, res_v, True)
+ self.remove_next_guard = True
res = True
except KeyError:
d[args] = res_v
@@ -313,6 +315,14 @@
self.cached_dict_reads[descr] = d
return res
+ def optimize_GUARD_NO_EXCEPTION(self, op):
+ if self.remove_next_guard:
+ self.remove_next_guard = False
+ return
+ self.emit_operation(op)
+
+ optimize_GUARD_EXCEPTION = optimize_GUARD_NO_EXCEPTION
+
def force_from_effectinfo(self, effectinfo):
# XXX we can get the wrong complexity here, if the lists
# XXX stored on effectinfo are large
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
@@ -5434,6 +5434,21 @@
"""
self.optimize_loop(ops, expected)
+ def test_consecutive_getinteriorfields(self):
+ py.test.skip("we want this to pass")
+ ops = """
+ [p0, i0]
+ i1 = getinteriorfield_gc(p0, i0, descr=valuedescr)
+ i2 = getinteriorfield_gc(p0, i0, descr=valuedescr)
+ jump(i1, i2)
+ """
+ expected = """
+ [p0, i0]
+ i1 = getinteriorfield_gc(p0, i0, descr=valuedescr)
+ jump(i1, i1)
+ """
+ self.optimize_loop(ops, expected)
+
class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
pass
diff --git a/rpython/jit/metainterp/test/test_dict.py
b/rpython/jit/metainterp/test/test_dict.py
--- a/rpython/jit/metainterp/test/test_dict.py
+++ b/rpython/jit/metainterp/test/test_dict.py
@@ -208,6 +208,8 @@
return s
self.meta_interp(f, [10])
+ self.check_simple_loop(call=1, getinteriorfield_gc=1,
+ guard_no_exception=1)
class TestLLtype(DictTests, LLJitMixin):
pass
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit