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

Reply via email to