[pypy-commit] pypy int-tag-untag-as-operations: make all optimizeopt tests pass

cfbolz noreply at buildbot.pypy.org
Thu Oct 27 11:53:19 CEST 2011


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: int-tag-untag-as-operations
Changeset: r48498:5dea661f90f6
Date: 2011-10-25 13:53 +0200
http://bitbucket.org/pypy/pypy/changeset/5dea661f90f6/

Log:	make all optimizeopt tests pass

diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -87,10 +87,13 @@
     'int_is_true'     : (('int',), 'bool'),
     'int_is_zero'     : (('int',), 'bool'),
     'int_neg'         : (('int',), 'int'),
+    'int_tag'         : (('int', ), 'int'),
+    'int_untag'       : (('int', ), 'int'),
     'int_invert'      : (('int',), 'int'),
     'int_add_ovf'     : (('int', 'int'), 'int'),
     'int_sub_ovf'     : (('int', 'int'), 'int'),
     'int_mul_ovf'     : (('int', 'int'), 'int'),
+    'int_tag_ovf'     : (('int', ), 'int'),
     'uint_add'        : (('int', 'int'), 'int'),
     'uint_sub'        : (('int', 'int'), 'int'),
     'uint_mul'        : (('int', 'int'), 'int'),
diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py
--- a/pypy/jit/metainterp/optimizeopt/intbounds.py
+++ b/pypy/jit/metainterp/optimizeopt/intbounds.py
@@ -305,20 +305,20 @@
 
     def optimize_INT_TAG(self, op):
         v1 = self.getvalue(op.getarg(0))
+        self.emit_operation(op)
         r = self.getvalue(op.result)
         resbound = v1.intbound.mul(2).add(1)
         r.intbound.intersect(resbound)
         maxbounds = IntBound((-sys.maxint-1) >> 1, sys.maxint >> 1)
         v1.intbound.intersect(maxbounds)
         self.pure(rop.INT_UNTAG, [op.result], op.getarg(0))
-        self.emit_operation(op)
 
     def optimize_INT_UNTAG(self, op):
         v1 = self.getvalue(op.getarg(0))
         self.pure(rop.INT_TAG, [op.result], op.getarg(0))
+        self.emit_operation(op)
         r = self.getvalue(op.result)
         r.intbound.intersect(v1.intbound.rshift_bound(IntBound(1, 1)))
-        self.emit_operation(op)
 
     def optimize_ARRAYLEN_GC(self, op):
         self.emit_operation(op)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -5124,6 +5124,7 @@
         [i0]
         i1 = int_lt(i0, 1000)
         guard_true(i1), []
+        i2 = int_tag(i0)
         i3 = int_add(i0, 1)
         jump(i3)
         """


More information about the pypy-commit mailing list