[pypy-commit] pypy const-fold-we-are-jitted: an optimization to replace we_are_jitted() with 0

cfbolz pypy.commits at gmail.com
Sat Aug 20 10:31:36 EDT 2016


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: const-fold-we-are-jitted
Changeset: r86346:aabd56db32d1
Date: 2016-08-20 14:18 +0200
http://bitbucket.org/pypy/pypy/changeset/aabd56db32d1/

Log:	an optimization to replace we_are_jitted() with 0

diff --git a/rpython/translator/backendopt/constfold.py b/rpython/translator/backendopt/constfold.py
--- a/rpython/translator/backendopt/constfold.py
+++ b/rpython/translator/backendopt/constfold.py
@@ -276,3 +276,25 @@
             rewire_links(splitblocks, graph)
         if not diffused and not splitblocks:
             break # finished
+
+def replace_symbolic(graph, symbolic, value):
+    result = False
+    for block in graph.iterblocks():
+        for op in block.operations:
+            for i, arg in enumerate(op.args):
+                if isinstance(arg, Constant) and arg.value is symbolic:
+                    op.args[i] = value
+                    result = True
+        if block.exitswitch is symbolic:
+            block.exitswitch = value
+            result = True
+    return result
+
+def replace_we_are_jitted(graph):
+    from rpython.rlib import jit
+    replacement = Constant(0)
+    replacement.concretetype = lltype.Signed
+    did_replacement = replace_symbolic(graph, jit._we_are_jitted, replacement)
+    if did_replacement:
+        constant_fold_graph(graph)
+    return did_replacement
diff --git a/rpython/translator/backendopt/test/test_constfold.py b/rpython/translator/backendopt/test/test_constfold.py
--- a/rpython/translator/backendopt/test/test_constfold.py
+++ b/rpython/translator/backendopt/test/test_constfold.py
@@ -7,6 +7,7 @@
 from rpython.rtyper import rclass
 from rpython.rlib import objectmodel
 from rpython.translator.backendopt.constfold import constant_fold_graph
+from rpython.translator.backendopt.constfold import replace_we_are_jitted
 from rpython.conftest import option
 
 def get_graph(fn, signature):
@@ -343,3 +344,20 @@
     merge_if_blocks.merge_if_blocks_once(graph)
     constant_fold_graph(graph)
     check_graph(graph, [], 66, t)
+
+def test_replace_we_are_jitted():
+    from rpython.flowspace import model
+    from rpython.rtyper.lltypesystem import lltype
+    from rpython.rlib import jit
+    def fn():
+        if jit.we_are_jitted():
+            return 1
+        return 2 + jit.we_are_jitted()
+    graph, t = get_graph(fn, [])
+    result = replace_we_are_jitted(graph)
+    assert result
+    checkgraph(graph)
+    # check shape of graph
+    assert len(graph.startblock.operations) == 0
+    assert graph.startblock.exitswitch is None
+    assert graph.startblock.exits[0].target.exits[0].args[0].value == 2


More information about the pypy-commit mailing list