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