[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