[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