[pypy-commit] pypy fold-arith-ops: reduce code duplication by folding the two cases into one

cfbolz noreply at buildbot.pypy.org
Thu May 21 10:28:13 CEST 2015


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: fold-arith-ops
Changeset: r77446:8773f0ce3059
Date: 2015-05-21 10:27 +0200
http://bitbucket.org/pypy/pypy/changeset/8773f0ce3059/

Log:	reduce code duplication by folding the two cases into one

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
@@ -124,12 +124,17 @@
             r.getintbound().intersect(b)
 
     def optimize_INT_ADD(self, op):
-        v1 = self.getvalue(op.getarg(0))
-        v2 = self.getvalue(op.getarg(1))
+        arg1 = op.getarg(0)
+        arg2 = op.getarg(1)
+        v1 = self.getvalue(arg1)
+        v2 = self.getvalue(arg2)
 
+        if v1.is_constant():
+            arg1, arg2 = arg2, arg1
+            v1, v2 = v2, v1
         if v2.is_constant():
             try:
-                prod_op = self.optimizer.producer[op.getarg(0)]
+                prod_op = self.optimizer.producer[arg1]
                 if prod_op.getopnum() == rop.INT_ADD:
                     prod_v1 = self.getvalue(prod_op.getarg(0))
                     prod_v2 = self.getvalue(prod_op.getarg(1))
@@ -140,27 +145,7 @@
                             arg2 = ConstInt(sum)
                             op = op.copy_and_change(rop.INT_ADD, args=[arg1, arg2])
                     elif prod_v1.is_constant():
-                        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():
-            try:
-                prod_op = self.optimizer.producer[op.getarg(1)]
-                if prod_op.getopnum() == rop.INT_ADD:
-                    prod_v1 = self.getvalue(prod_op.getarg(0))
-                    prod_v2 = self.getvalue(prod_op.getarg(1))
-                    if prod_v2.is_constant():
-                        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():
-                        sum = v1.box.getint() + prod_v1.box.getint()
+                        sum = arg2.getint() + prod_v1.box.getint()
                         if is_valid_int(sum):
                             arg1 = prod_op.getarg(1)
                             arg2 = ConstInt(sum)


More information about the pypy-commit mailing list