Author: Berkin Ilbeyi <[email protected]>
Branch: fold-arith-ops
Changeset: r77440:dc93155130b4
Date: 2015-05-20 16:41 -0400
http://bitbucket.org/pypy/pypy/changeset/dc93155130b4/

Log:    check if the addition is a valid int before folding int_add's

diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py 
b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -8,6 +8,7 @@
 from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
 from rpython.jit.metainterp.resoperation import rop
 from rpython.jit.backend.llsupport import symbolic
+from rpython.rlib.rarithmetic import is_valid_int
 
 
 def get_integer_min(is_unsigned, byte_size):
@@ -133,13 +134,17 @@
                     prod_v1 = self.getvalue(prod_op.getarg(0))
                     prod_v2 = self.getvalue(prod_op.getarg(1))
                     if prod_v2.is_constant():
-                        arg1 = prod_op.getarg(0)
-                        arg2 = ConstInt(v2.box.getint() + prod_v2.box.getint())
-                        op = op.copy_and_change(rop.INT_ADD, args=[arg1, arg2])
+                        sum = v2.box.getint() + prod_v2.box.getint()
+                        if is_valid_int(sum):
+                            arg1 = prod_op.getarg(0)
+                            arg2 = ConstInt(sum)
+                            op = op.copy_and_change(rop.INT_ADD, args=[arg1, 
arg2])
                     elif prod_v1.is_constant():
-                        arg1 = prod_op.getarg(1)
-                        arg2 = ConstInt(v2.box.getint() + prod_v1.box.getint())
-                        op = op.copy_and_change(rop.INT_ADD, args=[arg1, arg2])
+                        sum = v2.box.getint() + prod_v1.box.getint()
+                        if is_valid_int(sum):
+                            arg1 = prod_op.getarg(1)
+                            arg2 = ConstInt(sum)
+                            op = op.copy_and_change(rop.INT_ADD, args=[arg1, 
arg2])
             except KeyError:
                 pass
         if v1.is_constant():
@@ -149,13 +154,17 @@
                     prod_v1 = self.getvalue(prod_op.getarg(0))
                     prod_v2 = self.getvalue(prod_op.getarg(1))
                     if prod_v2.is_constant():
-                        arg1 = prod_op.getarg(0)
-                        arg2 = ConstInt(v1.box.getint() + prod_v2.box.getint())
-                        op = op.copy_and_change(rop.INT_ADD, args=[arg1, arg2])
+                        sum = v1.box.getint() + prod_v2.box.getint()
+                        if is_valid_int(sum):
+                            arg1 = prod_op.getarg(0)
+                            arg2 = ConstInt(sum)
+                            op = op.copy_and_change(rop.INT_ADD, args=[arg1, 
arg2])
                     elif prod_v1.is_constant():
-                        arg1 = prod_op.getarg(1)
-                        arg2 = ConstInt(v1.box.getint() + prod_v1.box.getint())
-                        op = op.copy_and_change(rop.INT_ADD, args=[arg1, arg2])
+                        sum = v1.box.getint() + prod_v1.box.getint()
+                        if is_valid_int(sum):
+                            arg1 = prod_op.getarg(1)
+                            arg2 = ConstInt(sum)
+                            op = op.copy_and_change(rop.INT_ADD, args=[arg1, 
arg2])
             except KeyError:
                 pass
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to