[pypy-svn] r73979 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test
arigo at codespeak.net
arigo at codespeak.net
Thu Apr 22 16:58:27 CEST 2010
Author: arigo
Date: Thu Apr 22 16:58:26 2010
New Revision: 73979
Modified:
pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py
Log:
Remove same_as and other operations that are no-ops at this level.
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py Thu Apr 22 16:58:26 2010
@@ -153,14 +153,12 @@
def insert_renamings(self, link):
renamings = {}
- lst = [(v, self.getcolor(link.target.inputargs[i]))
+ lst = [(self.getcolor(v), self.getcolor(link.target.inputargs[i]))
for i, v in enumerate(link.args)]
lst.sort(key=lambda(v, w): w.index)
for v, w in lst:
- if isinstance(v, Variable):
- v = self.getcolor(v)
- if v == w:
- continue
+ if v == w:
+ continue
frm, to = renamings.setdefault(w.kind, ([], []))
frm.append(v)
to.append(w)
@@ -189,11 +187,7 @@
elif isinstance(v, Constant):
pass
elif isinstance(v, ListOfKind):
- lst = []
- for x in v:
- if isinstance(x, Variable):
- x = self.getcolor(x)
- lst.append(x)
+ lst = [self.getcolor(x) for x in v]
v = ListOfKind(v.kind, lst)
else:
raise NotImplementedError(type(v))
@@ -207,6 +201,8 @@
self.emitline(op.opname, *args)
def getcolor(self, v):
+ if isinstance(v, Constant):
+ return v
kind = getkind(v.concretetype)
col = self.regallocs[kind].getcolor(v) # if kind=='void', fix caller
try:
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py Thu Apr 22 16:58:26 2010
@@ -9,8 +9,18 @@
being flattened in a JitCode.
"""
for block in graph.iterblocks():
- for i in range(len(block.operations)):
- block.operations[i] = rewrite_operation(block.operations[i])
+ rename = {}
+ newoperations = []
+ for op in block.operations:
+ if is_noop_operation(op):
+ rename[op.result] = rename.get(op.args[0], op.args[0])
+ else:
+ for i, v in enumerate(op.args):
+ if v in rename:
+ op = SpaceOperation(op.opname, op.args[:], op.result)
+ op.args[i] = rename[v]
+ newoperations.append(rewrite_operation(op))
+ block.operations = newoperations
optimize_goto_if_not(block)
@@ -40,6 +50,13 @@
# ____________________________________________________________
+def is_noop_operation(op):
+ return op.opname in _noop_operations
+
+_noop_operations = {'same_as': True,
+ 'cast_int_to_char': True,
+ 'cast_char_to_int': True}
+
def rewrite_operation(op):
try:
return _rewrite_ops[op.opname](op)
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py Thu Apr 22 16:58:26 2010
@@ -136,3 +136,12 @@
self.assert_format(flattener.ssarepr, """
residual_call_ir_f $12345, i[%i0, %i1], r[%r0, %r1], %f0
""")
+
+ def test_same_as_removal(self):
+ def f(a):
+ b = chr(a)
+ return ord(b) + a
+ self.encoding_test(f, [65], """
+ int_add %i0, %i0, %i1
+ int_return %i1
+ """, transform=True)
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py Thu Apr 22 16:58:26 2010
@@ -8,8 +8,7 @@
class TestRegAlloc:
def make_graphs(self, func, values, type_system='lltype'):
- self.rtyper = support.annotate(func, values, type_system=type_system,
- backendoptimize=False)
+ self.rtyper = support.annotate(func, values, type_system=type_system)
return self.rtyper.annotator.translator.graphs
def check_assembler(self, graph, expected):
More information about the Pypy-commit
mailing list