Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r67562:8d2f699e2f5b Date: 2013-10-24 11:44 +0200 http://bitbucket.org/pypy/pypy/changeset/8d2f699e2f5b/
Log: merge heads diff --git a/rpython/jit/codewriter/call.py b/rpython/jit/codewriter/call.py --- a/rpython/jit/codewriter/call.py +++ b/rpython/jit/codewriter/call.py @@ -11,6 +11,7 @@ from rpython.rtyper.lltypesystem import lltype, llmemory from rpython.translator.backendopt.canraise import RaiseAnalyzer from rpython.translator.backendopt.writeanalyze import ReadWriteAnalyzer +from rpython.translator.backendopt.graphanalyze import DependencyTracker class CallControl(object): @@ -35,6 +36,7 @@ # for index, jd in enumerate(jitdrivers_sd): jd.index = index + self.seen = DependencyTracker(self.readwrite_analyzer) def find_all_graphs(self, policy): try: @@ -231,8 +233,8 @@ extraeffect = EffectInfo.EF_CANNOT_RAISE # effectinfo = effectinfo_from_writeanalyze( - self.readwrite_analyzer.analyze(op), self.cpu, extraeffect, - oopspecindex, can_invalidate, call_release_gil_target, + self.readwrite_analyzer.analyze(op, self.seen), self.cpu, + extraeffect, oopspecindex, can_invalidate, call_release_gil_target, ) # assert effectinfo is not None diff --git a/rpython/jit/metainterp/heapcache.py b/rpython/jit/metainterp/heapcache.py --- a/rpython/jit/metainterp/heapcache.py +++ b/rpython/jit/metainterp/heapcache.py @@ -82,6 +82,7 @@ # GETFIELD_GC, MARK_OPAQUE_PTR, PTR_EQ, and PTR_NE don't escape their # arguments elif (opnum != rop.GETFIELD_GC and + opnum != rop.GETFIELD_GC_PURE and opnum != rop.MARK_OPAQUE_PTR and opnum != rop.PTR_EQ and opnum != rop.PTR_NE and diff --git a/rpython/rtyper/lltypesystem/lltype.py b/rpython/rtyper/lltypesystem/lltype.py --- a/rpython/rtyper/lltypesystem/lltype.py +++ b/rpython/rtyper/lltypesystem/lltype.py @@ -97,8 +97,16 @@ def __eq__(self, other): if isinstance(other, Typedef): return other.__eq__(self) - return self.__class__ is other.__class__ and ( - self is other or safe_equal(self.__dict__, other.__dict__)) + if self.__class__ is other.__class__: + if self is other: + return True + try: + if hash(self) != hash(other): + return False + except TypeError: + pass # too bad, we can't use a fastpath here + return safe_equal(self.__dict__, other.__dict__) + return False def __ne__(self, other): return not (self == other) @@ -227,6 +235,9 @@ self.OF = OF self.c_name = c_name + def __hash__(self): + return hash(self.OF) + def __repr__(self): return '<Typedef "%s" of %r>' % (self.c_name, self.OF) diff --git a/rpython/translator/backendopt/writeanalyze.py b/rpython/translator/backendopt/writeanalyze.py --- a/rpython/translator/backendopt/writeanalyze.py +++ b/rpython/translator/backendopt/writeanalyze.py @@ -4,6 +4,7 @@ top_set = object() empty_set = frozenset() +CUTOFF = 1000 class WriteAnalyzer(graphanalyze.GraphAnalyzer): def bottom_result(self): @@ -21,6 +22,8 @@ def add_to_result(self, result, other): if other is top_set: return top_set + if len(other) + len(result) > CUTOFF: + return top_set result.update(other) return result _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit