[pypy-svn] r77301 - in pypy/branch/jit-loop-invaraints/pypy/jit/metainterp: optimizeopt test
hakanardo at codespeak.net
hakanardo at codespeak.net
Thu Sep 23 16:46:10 CEST 2010
Author: hakanardo
Date: Thu Sep 23 16:46:08 2010
New Revision: 77301
Modified:
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/optimizer.py
pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py
Log:
Moving guards requires updating fail_args aswell. Dissabling for now.
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/invariant.py Thu Sep 23 16:46:08 2010
@@ -42,18 +42,17 @@
jmp.descr = loop.token
preamble.operations.append(jmp)
- elif (op.is_always_pure() or op.is_foldable_guard() or
- op.is_ovf()):
+ elif (op.is_always_pure()):# or op.is_foldable_guard() or op.is_ovf()):
if self.has_invariant_args(op):
self.emit_invariant(op)
return
- elif op.is_guard_overflow():
- prev_op = self.optimizer.loop.operations[self.optimizer.i - 1]
- v = self.getvalue(prev_op.result)
- if v.invariant:
- self.emit_invariant(op)
- return
+ #elif op.is_guard_overflow():
+ # prev_op = self.optimizer.loop.operations[self.optimizer.i - 1]
+ # v = self.getvalue(prev_op.result)
+ # if v.invariant:
+ # self.emit_invariant(op)
+ # return
self.emit_operation(op)
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/optimizer.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/optimizer.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/optimizeopt/optimizer.py Thu Sep 23 16:46:08 2010
@@ -342,10 +342,11 @@
elif op.returns_bool_result():
self.bool_boxes[self.getvalue(op.result)] = None
if op.invariant:
+ op.invariant = False
self.preamble.append(op)
else:
self.newoperations.append(op)
-
+
def store_final_boxes_in_guard(self, op):
###pendingfields = self.heap_op_optimizer.force_lazy_setfields_for_guard()
descr = op.descr
Modified: pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/jit-loop-invaraints/pypy/jit/metainterp/test/test_basic.py Thu Sep 23 16:46:08 2010
@@ -321,6 +321,25 @@
'int_mul': 1,
'jump': 2})
+ def test_loop_invariant_mul_ovf(self):
+ myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x'])
+ def f(x, y):
+ res = 0
+ while y > 0:
+ myjitdriver.can_enter_jit(x=x, y=y, res=res)
+ myjitdriver.jit_merge_point(x=x, y=y, res=res)
+ b = y * 2
+ res += ovfcheck(x * x) + b
+ y -= 1
+ return res
+ res = self.meta_interp(f, [6, 7])
+ assert res == 308
+ self.check_loop_count(2)
+ self.check_loops({'guard_true': 1,
+ 'int_add': 1, 'int_sub': 1, 'int_gt': 1,
+ 'int_mul': 1,
+ 'jump': 2})
+
def test_loop_invariant_intbox(self):
myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x'])
class I:
More information about the Pypy-commit
mailing list