Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r62100:b730d41cd8ab
Date: 2013-03-05 17:19 -0500
http://bitbucket.org/pypy/pypy/changeset/b730d41cd8ab/

Log:    improve generated min/max code by improving hints to jitdriver

diff --git a/pypy/module/__builtin__/functional.py 
b/pypy/module/__builtin__/functional.py
--- a/pypy/module/__builtin__/functional.py
+++ b/pypy/module/__builtin__/functional.py
@@ -134,9 +134,9 @@
     return space.newlist(res_w)
 
 min_jitdriver = jit.JitDriver(name='min',
-        greens=['w_type'], reds='auto')
+        greens=['has_key', 'has_item', 'w_type'], reds='auto')
 max_jitdriver = jit.JitDriver(name='max',
-        greens=['w_type'], reds='auto')
+        greens=['has_key', 'has_item', 'w_type'], reds='auto')
 
 def make_min_max(unroll):
     @specialize.arg(2)
@@ -166,23 +166,26 @@
 
         w_iter = space.iter(w_sequence)
         w_type = space.type(w_iter)
+        has_key = w_key is not None
+        has_item = False
         w_max_item = None
         w_max_val = None
         while True:
             if not unroll:
-                jitdriver.jit_merge_point(w_type=w_type)
+                jitdriver.jit_merge_point(has_key=has_key, has_item=has_item, 
w_type=w_type)
             try:
                 w_item = space.next(w_iter)
             except OperationError, e:
                 if not e.match(space, space.w_StopIteration):
                     raise
                 break
-            if w_key is not None:
+            if has_key:
                 w_compare_with = space.call_function(w_key, w_item)
             else:
                 w_compare_with = w_item
-            if w_max_item is None or \
+            if not has_item or \
                     space.is_true(compare(w_compare_with, w_max_val)):
+                has_item = True
                 w_max_item = w_item
                 w_max_val = w_compare_with
         if w_max_item is None:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to