Author: Manuel Jacob Branch: remove-tuple-smm Changeset: r64456:85528249a156 Date: 2013-05-22 17:21 +0200 http://bitbucket.org/pypy/pypy/changeset/85528249a156/
Log: Add more jit unroll predicates. diff --git a/pypy/objspace/std/tupleobject.py b/pypy/objspace/std/tupleobject.py --- a/pypy/objspace/std/tupleobject.py +++ b/pypy/objspace/std/tupleobject.py @@ -17,7 +17,11 @@ UNROLL_CUTOFF = 10 -def tuple_unroll_condition(self, space, other): +def _unroll_condition(self): + return jit.loop_unrolling_heuristic(self, self.length(), UNROLL_CUTOFF) + + +def _unroll_condition_cmp(self, space, other): return (jit.loop_unrolling_heuristic(self, self.length(), UNROLL_CUTOFF) or jit.loop_unrolling_heuristic(other, other.length(), UNROLL_CUTOFF)) @@ -96,7 +100,7 @@ return space.w_NotImplemented return _compare_tuples(self, space, w_other) - @jit.look_inside_iff(tuple_unroll_condition) + @jit.look_inside_iff(_unroll_condition_cmp) def _compare_tuples(self, space, w_other): items1 = self.tolist() items2 = w_other.tolist() @@ -115,8 +119,7 @@ descr_gt = _make_tuple_comparison('gt') descr_ge = _make_tuple_comparison('ge') - @jit.look_inside_iff(lambda self, space, w_obj: - jit.loop_unrolling_heuristic(self, self.length(), UNROLL_CUTOFF)) + @jit.look_inside_iff(lambda self, _1, _2: _unroll_condition(self)) def descr_contains(self, space, w_obj): for w_item in self.tolist(): if space.eq_w(w_item, w_obj): @@ -167,6 +170,7 @@ def descr_getnewargs(self, space): return space.newtuple([space.newtuple(self.tolist())]) + @jit.look_inside_iff(lambda self, _1, _2: _unroll_condition(self)) def descr_count(self, space, w_obj): """count(obj) -> number of times obj appears in the tuple""" count = 0 @@ -177,6 +181,7 @@ @gateway.unwrap_spec(w_start=gateway.WrappedDefault(0), w_stop=gateway.WrappedDefault(sys.maxint)) + @jit.look_inside_iff(lambda self, _1, _2, _3, _4: _unroll_condition(self)) def descr_index(self, space, w_obj, w_start, w_stop): """index(obj, [start, [stop]]) -> first index that obj appears in the tuple @@ -191,7 +196,8 @@ raise OperationError(space.w_ValueError, space.wrap("tuple.index(x): x not in tuple")) -W_AbstractTupleObject.typedef = StdTypeDef("tuple", +W_AbstractTupleObject.typedef = StdTypeDef( + "tuple", __doc__ = '''tuple() -> an empty tuple tuple(sequence) -> tuple initialized from sequence's items @@ -240,8 +246,7 @@ def length(self): return len(self.wrappeditems) - @jit.look_inside_iff(lambda self, space: jit.loop_unrolling_heuristic( - self.wrappeditems, len(self.wrappeditems), UNROLL_CUTOFF)) + @jit.look_inside_iff(lambda self, _1: _unroll_condition(self)) def descr_hash(self, space): # this is the CPython 2.4 algorithm (changed from 2.3) mult = 1000003 @@ -260,7 +265,7 @@ return space.w_NotImplemented return self._descr_eq(space, w_other) - @jit.look_inside_iff(tuple_unroll_condition) + @jit.look_inside_iff(_unroll_condition_cmp) def _descr_eq(self, space, w_other): items1 = self.wrappeditems items2 = w_other.tolist() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit