Author: Hakan Ardo <ha...@debian.org>
Branch: jit-short_from_state
Changeset: r46500:44931ec4af34
Date: 2011-08-14 21:58 +0200
http://bitbucket.org/pypy/pypy/changeset/44931ec4af34/

Log:    dont retrace loops with more than 100 emitted guards

diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py 
b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -317,6 +317,7 @@
         self.opaque_pointers = {}
         self.newoperations = []
         self.emitting_dissabled = False
+        self.emitted_guards = 0        
         if loop is not None:
             self.call_pure_results = loop.call_pure_results
 
@@ -491,6 +492,7 @@
         self.metainterp_sd.profiler.count(jitprof.OPT_OPS)
         if op.is_guard():
             self.metainterp_sd.profiler.count(jitprof.OPT_GUARDS)
+            self.emitted_guards += 1 # FIXME: can we reuse above counter?
             op = self.store_final_boxes_in_guard(op)
         elif op.can_raise():
             self.exception_might_have_happened = True
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
@@ -9,6 +9,7 @@
 from pypy.jit.metainterp.resoperation import rop, ResOperation
 from pypy.jit.metainterp.resume import Snapshot
 from pypy.rlib.debug import debug_print
+import sys
 
 # FIXME: Introduce some VirtualOptimizer super class instead
 
@@ -213,6 +214,8 @@
             loop.preamble.operations.append(jmp)
 
             loop.operations = self.optimizer.newoperations
+            if self.optimizer.emitted_guards > 100:
+                loop.preamble.token.retraced_count = sys.maxint
 
             if short:
                 assert short[-1].getopnum() == rop.JUMP
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to