[pypy-svn] r25233 - pypy/dist/pypy/translator/squeak

nik at codespeak.net nik at codespeak.net
Sun Apr 2 20:07:47 CEST 2006


Author: nik
Date: Sun Apr  2 20:07:46 2006
New Revision: 25233

Modified:
   pypy/dist/pypy/translator/squeak/node.py
   pypy/dist/pypy/translator/squeak/opformatter.py
Log:
use remove_unaryops in gensqueak to remove noops from function graphs.


Modified: pypy/dist/pypy/translator/squeak/node.py
==============================================================================
--- pypy/dist/pypy/translator/squeak/node.py	(original)
+++ pypy/dist/pypy/translator/squeak/node.py	Sun Apr  2 20:07:46 2006
@@ -1,5 +1,6 @@
 import datetime
 from pypy.objspace.flow.model import Constant, Variable, c_last_exception
+from pypy.translator.backendopt.removenoops import remove_unaryops
 from pypy.translator.squeak.opformatter import OpFormatter
 from pypy.translator.squeak.codeformatter import CodeFormatter, Message
 from pypy.translator.squeak.codeformatter import Field, Assignment, CustomVariable
@@ -195,6 +196,9 @@
                     yield "    %s" % line
                 yield "]"
 
+    def apply_backendopt(self, graph):
+        remove_unaryops(graph, OpFormatter.noops)
+
 class MethodNode(CallableNode):
 
     def __init__(self, gen, INSTANCE, method_name):
@@ -219,6 +223,7 @@
         yield self.render_fileout_header(
                 codef.format(self.INSTANCE), "methods")
         graph = self.INSTANCE._methods[self.name].graph
+        self.apply_backendopt(graph)
         self.self = graph.startblock.inputargs[0]
         for line in self.render_body(graph.startblock):
             yield line
@@ -245,6 +250,7 @@
     def render(self):
         yield self.render_fileout_header(
                 "%s class" % self._class_name, "functions")
+        self.apply_backendopt(self.graph)
         for line in self.render_body(self.graph.startblock):
             yield line
 

Modified: pypy/dist/pypy/translator/squeak/opformatter.py
==============================================================================
--- pypy/dist/pypy/translator/squeak/opformatter.py	(original)
+++ pypy/dist/pypy/translator/squeak/opformatter.py	Sun Apr  2 20:07:46 2006
@@ -71,6 +71,11 @@
 
     wrapping_ops = "neg", "invert", "add", "sub", "mul", "lshift"
 
+    noops = "ooupcast", "oodowncast", "cast_char_to_int", \
+            "cast_unichar_to_int", "cast_int_to_unichar", \
+            "cast_int_to_char", "cast_int_to_longlong", \
+            "truncate_longlong_to_int"
+
     int_masks = _setup_int_masks()
 
     def __init__(self, gen, node):
@@ -150,12 +155,6 @@
             # Public field access
             return Message(field_name).send_to(op.args[0], [field_value])
 
-    def noop(self, op):
-        return Assignment(op.result, op.args[0])
-
-    op_oodowncast = noop
-    op_ooupcast = noop
-
     def op_direct_call(self, op):
         # XXX how do i get rid of this import?
         from pypy.translator.squeak.node import FunctionNode
@@ -170,18 +169,10 @@
     def op_cast_bool_to_int(self, op):
         return self.cast_bool(op, "1", "0")
 
-    def op_cast_bool_to_float(self, op):
-        return self.cast_bool(op, "1.0", "0.0")
-
     op_cast_bool_to_uint = op_cast_bool_to_int
 
-    op_cast_char_to_int = noop
-    op_cast_unichar_to_int = noop
-
-    # NB: behaviour for casts to chars is undefined for too wide ints
-    op_cast_int_to_char = noop
-    op_cast_int_to_unichar = noop
-    op_cast_int_to_longlong = noop
+    def op_cast_bool_to_float(self, op):
+        return self.cast_bool(op, "1.0", "0.0")
 
     def masking_cast(self, op, mask):
         cast = self.apply_mask_helper(op.args[0], mask)
@@ -193,8 +184,6 @@
     def op_cast_uint_to_int(self, op):
         return self.masking_cast(op, "int")
 
-    op_truncate_longlong_to_int = noop
-
     def op_cast_float_to_uint(self, op):
         truncated = Message("truncated").send_to(op.args[0], [])
         return Assignment(op.result, self.apply_mask_helper(truncated, "uint"))



More information about the Pypy-commit mailing list