[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