Author: Ronan Lamy <ronan.l...@gmail.com> Branch: inline-earlier Changeset: r73894:4834be503b4d Date: 2014-10-10 05:20 +0100 http://bitbucket.org/pypy/pypy/changeset/4834be503b4d/
Log: deJavaise r/t/b/inline.py diff --git a/rpython/memory/gctransform/transform.py b/rpython/memory/gctransform/transform.py --- a/rpython/memory/gctransform/transform.py +++ b/rpython/memory/gctransform/transform.py @@ -125,14 +125,14 @@ if not self.prepared: raise Exception("Need to call prepare_inline_helpers first") if self.inline: - raise_analyzer = RaiseAnalyzer(self.translator) + can_raise = RaiseAnalyzer(self.translator).can_raise to_enum = self.graph_dependencies.get(graph, self.graphs_to_inline) must_constfold = False for inline_graph in to_enum: try: inline.inline_function(self.translator, inline_graph, graph, self.lltype_to_classdef, - raise_analyzer, + can_raise, cleanup=False) must_constfold = True except inline.CannotInline, e: diff --git a/rpython/translator/backendopt/inline.py b/rpython/translator/backendopt/inline.py --- a/rpython/translator/backendopt/inline.py +++ b/rpython/translator/backendopt/inline.py @@ -68,16 +68,16 @@ return False def inline_function(translator, inline_func, graph, lltype_to_classdef, - raise_analyzer, call_count_pred=None, cleanup=True): + can_raise, call_count_pred=None, cleanup=True): inliner = Inliner(translator, graph, inline_func, lltype_to_classdef, - raise_analyzer=raise_analyzer, + can_raise=can_raise, call_count_pred=call_count_pred, cleanup=cleanup) return inliner.inline_all() def simple_inline_function(translator, inline_func, graph): inliner = Inliner(translator, graph, inline_func, translator.rtyper.lltype_to_classdef_mapping(), - raise_analyzer=RaiseAnalyzer(translator)) + can_raise=RaiseAnalyzer(translator).can_raise) return inliner.inline_all() @@ -101,25 +101,24 @@ elif op.opname == "malloc" and op.result is currvar: return Ptr(op.args[0].value), block.exits[0] -def does_raise_directly(graph, raise_analyzer): +def does_raise_directly(graph, can_raise): """ this function checks, whether graph contains operations which can raise and which are not exception guarded """ for block in graph.iterblocks(): if block is graph.exceptblock: return True # the except block is reachable if block.exitswitch == c_last_exception: - consider_ops_to = -1 + ops = block.operations[:-1] else: - consider_ops_to = len(block.operations) - for op in block.operations[:consider_ops_to]: - if raise_analyzer.can_raise(op): - return True + ops = block.operations + if any(can_raise(op) for op in ops): + return True return False -def any_call_to_raising_graphs(from_graph, translator, raise_analyzer): +def any_call_to_raising_graphs(from_graph, translator, can_raise): for graph_or_something in collect_called_graphs(from_graph, translator): if isinstance(graph_or_something, FunctionGraph): - if does_raise_directly(graph_or_something, raise_analyzer): + if does_raise_directly(graph_or_something, can_raise): return True else: return True # conservatively @@ -129,7 +128,7 @@ else: consider_ops_to = len(block.operations) for op in block.operations[:consider_ops_to]: - if raise_analyzer.can_raise(op): + if can_raise(op): return True return False @@ -137,7 +136,7 @@ def __init__(self, translator, graph, lltype_to_classdef, inline_guarded_calls=False, inline_guarded_calls_no_matter_what=False, - raise_analyzer=None, + can_raise=None, call_count_pred=None, cleanup=True): self.translator = translator @@ -147,8 +146,8 @@ # if this argument is set, the inliner will happily produce wrong code! # it is used by the exception transformation self.inline_guarded_calls_no_matter_what = inline_guarded_calls_no_matter_what - assert raise_analyzer is not None - self.raise_analyzer = raise_analyzer + assert can_raise is not None + self.can_raise = can_raise self.lltype_to_classdef = lltype_to_classdef self.call_count_pred = call_count_pred @@ -193,10 +192,10 @@ self.exception_guarded = True if self.inline_guarded_calls: if (not self.inline_guarded_calls_no_matter_what and - does_raise_directly(self.graph_to_inline, self.raise_analyzer)): + does_raise_directly(self.graph_to_inline, self.can_raise)): raise CannotInline("can't inline because the call is exception guarded") elif any_call_to_raising_graphs(self.graph_to_inline, - self.translator, self.raise_analyzer): + self.translator, self.can_raise): raise CannotInline("can't handle exceptions") self._passon_vars = {} self.entrymap = mkentrymap(self.graph_to_inline) @@ -423,13 +422,13 @@ def __init__(self, translator, graph, inline_func, lltype_to_classdef, inline_guarded_calls=False, inline_guarded_calls_no_matter_what=False, - raise_analyzer=None, + can_raise=None, call_count_pred=None, cleanup=True): BaseInliner.__init__(self, translator, graph, lltype_to_classdef, inline_guarded_calls, inline_guarded_calls_no_matter_what, - raise_analyzer, + can_raise, call_count_pred, cleanup) self.inline_func = inline_func @@ -629,7 +628,7 @@ valid_weight = {} try_again = {} lltype_to_classdef = translator.rtyper.lltype_to_classdef_mapping() - raise_analyzer = RaiseAnalyzer(translator) + can_raise = RaiseAnalyzer(translator).can_raise count = 0 while heap: weight, _, graph = heap[0] @@ -673,7 +672,7 @@ subcount = 0 try: subcount = inline_function(translator, graph, parentgraph, - lltype_to_classdef, raise_analyzer, + lltype_to_classdef, can_raise, call_count_pred, cleanup=False) to_cleanup[parentgraph] = True res = bool(subcount) diff --git a/rpython/translator/backendopt/test/test_inline.py b/rpython/translator/backendopt/test/test_inline.py --- a/rpython/translator/backendopt/test/test_inline.py +++ b/rpython/translator/backendopt/test/test_inline.py @@ -65,11 +65,11 @@ sanity_check(t) # also check before inlining (so we don't blame it) if option.view: t.view() - raise_analyzer = canraise.RaiseAnalyzer(t) + can_raise = canraise.RaiseAnalyzer(t).can_raise inliner = Inliner(t, graphof(t, in_func), func, t.rtyper.lltype_to_classdef_mapping(), inline_guarded_calls, - raise_analyzer=raise_analyzer) + can_raise=can_raise) inliner.inline_all() if option.view: t.view() diff --git a/rpython/translator/exceptiontransform.py b/rpython/translator/exceptiontransform.py --- a/rpython/translator/exceptiontransform.py +++ b/rpython/translator/exceptiontransform.py @@ -334,7 +334,7 @@ inliner = inline.OneShotInliner( self.translator, graph, self.lltype_to_classdef, inline_guarded_calls=True, inline_guarded_calls_no_matter_what=True, - raise_analyzer=self.raise_analyzer) + can_raise=self.raise_analyzer.can_raise) inliner.inline_once(block, len(block.operations)-1) #block.exits[0].exitcase = block.exits[0].llexitcase = False _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit