[pypy-commit] pypy jit-limit_peeling: only skipp peeling if the optimized peeled trace have more than max_retrace_guards guards
hakanardo
noreply at buildbot.pypy.org
Sat Aug 20 09:53:37 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-limit_peeling
Changeset: r46654:59a84d988cdb
Date: 2011-08-20 09:28 +0200
http://bitbucket.org/pypy/pypy/changeset/59a84d988cdb/
Log: only skipp peeling if the optimized peeled trace have more than
max_retrace_guards guards
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -205,7 +205,9 @@
short = self.inline(inputargs, self.cloned_operations,
loop.inputargs, short_inputargs,
virtual_state)
- if not virtual_state.contains_virtuals():
+
+ maxguards = self.optimizer.metainterp_sd.warmrunnerdesc.memory_manager.max_retrace_guards
+ if not virtual_state.contains_virtuals() and self.optimizer.emitted_guards > maxguards:
ops_in_loop = len(self.optimizer.newoperations)
ops_in_preamble = len(loop.preamble.operations) + 1
amount_saved = ((ops_in_preamble - ops_in_loop) * 100) / ops_in_preamble
@@ -225,7 +227,6 @@
loop.preamble.operations.append(jmp)
loop.operations = self.optimizer.newoperations
- maxguards = self.optimizer.metainterp_sd.warmrunnerdesc.memory_manager.max_retrace_guards
if self.optimizer.emitted_guards > maxguards:
loop.preamble.token.retraced_count = sys.maxint
diff --git a/pypy/jit/metainterp/test/test_ajit.py b/pypy/jit/metainterp/test/test_ajit.py
--- a/pypy/jit/metainterp/test/test_ajit.py
+++ b/pypy/jit/metainterp/test/test_ajit.py
@@ -2622,6 +2622,7 @@
myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'a'])
def f(n, limit):
+ myjitdriver.set_param('limit_peeling', -1)
myjitdriver.set_param('retrace_limit', 3)
myjitdriver.set_param('max_retrace_guards', limit)
sa = i = a = 0
@@ -2640,8 +2641,9 @@
def test_limit_peeling(self):
myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'a'])
- def f(n, limit):
+ def f(n, limit, maxguards):
myjitdriver.set_param('limit_peeling', limit)
+ myjitdriver.set_param('max_retrace_guards', maxguards)
sa = i = 0
a = n + 1
while i < n:
@@ -2649,12 +2651,14 @@
sa += a * a
i += 1
return sa
- assert self.meta_interp(f, [20, 0]) == f(20, 0)
+ assert self.meta_interp(f, [20, 0, 0]) == f(20, 0, 0)
self.check_tree_loop_count(2)
- assert self.meta_interp(f, [20, 10]) == f(20, 10)
+ assert self.meta_interp(f, [20, 10, 0]) == f(20, 10, 0)
self.check_tree_loop_count(2)
- assert self.meta_interp(f, [20, 20]) == f(20, 20)
+ assert self.meta_interp(f, [20, 20, 0]) == f(20, 20, 0)
self.check_tree_loop_count(1)
+ assert self.meta_interp(f, [20, 20, 10]) == f(20, 20, 10)
+ self.check_tree_loop_count(2)
def test_retrace_limit_with_extra_guards(self):
More information about the pypy-commit
mailing list