[pypy-svn] r77470 - in pypy/trunk/pypy: jit/metainterp jit/metainterp/test rlib
fijal at codespeak.net
fijal at codespeak.net
Wed Sep 29 17:23:51 CEST 2010
Author: fijal
Date: Wed Sep 29 17:23:49 2010
New Revision: 77470
Added:
pypy/trunk/pypy/jit/metainterp/optimize_nopspec.py
pypy/trunk/pypy/jit/metainterp/test/test_loop_nopspec.py
Modified:
pypy/trunk/pypy/jit/metainterp/optimizefindnode.py
pypy/trunk/pypy/jit/metainterp/warmstate.py
pypy/trunk/pypy/rlib/jit.py
Log:
Have an optimization level which is normal, but does not perform perfect spec.
Added: pypy/trunk/pypy/jit/metainterp/optimize_nopspec.py
==============================================================================
--- (empty file)
+++ pypy/trunk/pypy/jit/metainterp/optimize_nopspec.py Wed Sep 29 17:23:49 2010
@@ -0,0 +1,41 @@
+
+from pypy.rlib.debug import debug_start, debug_stop
+from pypy.jit.metainterp.optimizeopt import optimize_loop_1, optimize_bridge_1
+from pypy.jit.metainterp.optimizefindnode import PerfectSpecializationFinder
+from pypy.jit.metainterp.optimizefindnode import BridgeSpecializationFinder
+
+def optimize_loop(metainterp_sd, old_loop_tokens, loop):
+ debug_start("jit-optimize")
+ try:
+ return _optimize_loop(metainterp_sd, old_loop_tokens, loop)
+ finally:
+ debug_stop("jit-optimize")
+
+def _optimize_loop(metainterp_sd, old_loop_tokens, loop):
+ cpu = metainterp_sd.cpu
+ metainterp_sd.logger_noopt.log_loop(loop.inputargs, loop.operations)
+ finder = PerfectSpecializationFinder(cpu)
+ finder.find_nodes_loop(loop, False)
+ if old_loop_tokens:
+ return old_loop_tokens[0]
+ optimize_loop_1(metainterp_sd, loop)
+ return None
+
+def optimize_bridge(metainterp_sd, old_loop_tokens, bridge):
+ debug_start("jit-optimize")
+ try:
+ return _optimize_bridge(metainterp_sd, old_loop_tokens, bridge)
+ finally:
+ debug_stop("jit-optimize")
+
+def _optimize_bridge(metainterp_sd, old_loop_tokens, bridge):
+ cpu = metainterp_sd.cpu
+ metainterp_sd.logger_noopt.log_loop(bridge.inputargs, bridge.operations)
+ finder = BridgeSpecializationFinder(cpu)
+ finder.find_nodes_bridge(bridge)
+ if old_loop_tokens:
+ old_loop_token = old_loop_tokens[0]
+ bridge.operations[-1].setdescr(old_loop_token) # patch jump target
+ optimize_bridge_1(metainterp_sd, bridge)
+ return old_loop_token
+ return None
Modified: pypy/trunk/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizefindnode.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizefindnode.py Wed Sep 29 17:23:49 2010
@@ -319,11 +319,12 @@
class PerfectSpecializationFinder(NodeFinder):
node_fromstart = InstanceNode(fromstart=True)
- def find_nodes_loop(self, loop):
+ def find_nodes_loop(self, loop, build_specnodes=True):
self._loop = loop
self.setup_input_nodes(loop.inputargs)
self.find_nodes(loop.operations)
- self.build_result_specnodes(loop)
+ if build_specnodes:
+ self.build_result_specnodes(loop)
def show(self):
from pypy.jit.metainterp.viewnode import viewnodes, view
Added: pypy/trunk/pypy/jit/metainterp/test/test_loop_nopspec.py
==============================================================================
--- (empty file)
+++ pypy/trunk/pypy/jit/metainterp/test/test_loop_nopspec.py Wed Sep 29 17:23:49 2010
@@ -0,0 +1,27 @@
+
+from pypy.jit.metainterp.test import test_loop, test_send
+from pypy.jit.metainterp.warmspot import ll_meta_interp
+from pypy.rlib.jit import OPTIMIZER_NO_PERFECTSPEC
+from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
+
+class LoopNoPSpecTest(test_send.SendTests):
+ def meta_interp(self, func, args, **kwds):
+ return ll_meta_interp(func, args, optimizer=OPTIMIZER_NO_PERFECTSPEC,
+ CPUClass=self.CPUClass,
+ type_system=self.type_system,
+ **kwds)
+
+ def check_loops(self, *args, **kwds):
+ pass
+
+ def check_loop_count(self, count):
+ pass
+
+ def check_jumps(self, maxcount):
+ pass
+
+class TestLLtype(LoopNoPSpecTest, LLJitMixin):
+ pass
+
+class TestOOtype(LoopNoPSpecTest, OOJitMixin):
+ pass
Modified: pypy/trunk/pypy/jit/metainterp/warmstate.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/warmstate.py (original)
+++ pypy/trunk/pypy/jit/metainterp/warmstate.py Wed Sep 29 17:23:49 2010
@@ -7,7 +7,8 @@
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.nonconst import NonConstant
from pypy.rlib.unroll import unrolling_iterable
-from pypy.rlib.jit import PARAMETERS, OPTIMIZER_SIMPLE, OPTIMIZER_FULL
+from pypy.rlib.jit import (PARAMETERS, OPTIMIZER_SIMPLE, OPTIMIZER_FULL,
+ OPTIMIZER_NO_PERFECTSPEC)
from pypy.rlib.jit import DEBUG_PROFILE
from pypy.rlib.jit import BaseJitCell
from pypy.rlib.debug import debug_start, debug_stop, debug_print
@@ -190,6 +191,10 @@
from pypy.jit.metainterp import simple_optimize
self.optimize_loop = simple_optimize.optimize_loop
self.optimize_bridge = simple_optimize.optimize_bridge
+ elif optimizer == OPTIMIZER_NO_PERFECTSPEC:
+ from pypy.jit.metainterp import optimize_nopspec
+ self.optimize_loop = optimize_nopspec.optimize_loop
+ self.optimize_bridge = optimize_nopspec.optimize_bridge
elif optimizer == OPTIMIZER_FULL:
from pypy.jit.metainterp import optimize
self.optimize_loop = optimize.optimize_loop
Modified: pypy/trunk/pypy/rlib/jit.py
==============================================================================
--- pypy/trunk/pypy/rlib/jit.py (original)
+++ pypy/trunk/pypy/rlib/jit.py Wed Sep 29 17:23:49 2010
@@ -224,7 +224,8 @@
"""Inconsistency in the JIT hints."""
OPTIMIZER_SIMPLE = 0
-OPTIMIZER_FULL = 1
+OPTIMIZER_NO_PERFECTSPEC = 1
+OPTIMIZER_FULL = 2
DEBUG_OFF = 0
DEBUG_PROFILE = 1
More information about the Pypy-commit
mailing list