[pypy-commit] pypy result-in-resops: make yet another test pass

fijal noreply at buildbot.pypy.org
Sat Oct 27 11:28:22 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r58492:3945cce69723
Date: 2012-10-27 11:20 +0200
http://bitbucket.org/pypy/pypy/changeset/3945cce69723/

Log:	make yet another test pass

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
@@ -228,14 +228,14 @@
         r.getintbound().intersect(resbound)
 
     def optimize_INT_LT(self, op):
-        v1 = self.getvalue(op.getarg(0))
-        v2 = self.getvalue(op.getarg(1))
+        v1 = self.getforwarded(op.getarg(0))
+        v2 = self.getforwarded(op.getarg(1))
         if v1.getintbound().known_lt(v2.getintbound()):
             self.make_constant_int(op, 1)
         elif v1.getintbound().known_ge(v2.getintbound()) or v1 is v2:
             self.make_constant_int(op, 0)
         else:
-            self.emit_operation(op)
+            return op
 
     def optimize_INT_GT(self, op):
         v1 = self.getvalue(op.getarg(0))
@@ -255,17 +255,17 @@
         elif v1.getintbound().known_gt(v2.getintbound()):
             self.make_constant_int(op, 0)
         else:
-            self.emit_operation(op)
+            return op
 
     def optimize_INT_GE(self, op):
-        v1 = self.getvalue(op.getarg(0))
-        v2 = self.getvalue(op.getarg(1))
+        v1 = self.getforwarded(op.getarg(0))
+        v2 = self.getforwarded(op.getarg(1))
         if v1.getintbound().known_ge(v2.getintbound()) or v1 is v2:
             self.make_constant_int(op, 1)
         elif v1.getintbound().known_lt(v2.getintbound()):
             self.make_constant_int(op, 0)
         else:
-            self.emit_operation(op)
+            return op
 
     def optimize_INT_EQ(self, op):
         v1 = self.getvalue(op.getarg(0))
@@ -326,13 +326,13 @@
         v1 = self.getvalue(op)
         v1.getintbound().make_ge(IntLowerBound(0))
 
-    def make_int_lt(self, box1, box2):
-        v1 = self.getvalue(box1)
-        v2 = self.getvalue(box2)
+    def make_int_lt(self, op1, op2):
+        v1 = self.getforwarded(op1)
+        v2 = self.getforwarded(op2)
         if v1.getintbound().make_lt(v2.getintbound()):
-            self.propagate_bounds_backward(box1)
+            self.propagate_bounds_backward(op1)
         if v2.getintbound().make_gt(v1.getintbound()):
-            self.propagate_bounds_backward(box2)
+            self.propagate_bounds_backward(op2)
 
     def make_int_le(self, box1, box2):
         v1 = self.getvalue(box1)
@@ -349,17 +349,17 @@
         self.make_int_le(box2, box1)
 
     def propagate_bounds_INT_LT(self, op):
-        r = self.getvalue(op)
+        r = self.getforwarded(op)
         if r.is_constant():
-            if r.op.same_constant(CONST_1):
+            if r.same_constant(CONST_1):
                 self.make_int_lt(op.getarg(0), op.getarg(1))
             else:
                 self.make_int_ge(op.getarg(0), op.getarg(1))
 
     def propagate_bounds_INT_GT(self, op):
-        r = self.getvalue(op)
+        r = self.getforwarded(op)
         if r.is_constant():
-            if r.op.same_constant(CONST_1):
+            if r.same_constant(CONST_1):
                 self.make_int_gt(op.getarg(0), op.getarg(1))
             else:
                 self.make_int_le(op.getarg(0), op.getarg(1))
@@ -373,9 +373,9 @@
                 self.make_int_gt(op.getarg(0), op.getarg(1))
 
     def propagate_bounds_INT_GE(self, op):
-        r = self.getvalue(op)
+        r = self.getforwarded(op)
         if r.is_constant():
-            if r.op.same_constant(CONST_1):
+            if r.same_constant(CONST_1):
                 self.make_int_ge(op.getarg(0), op.getarg(1))
             else:
                 self.make_int_lt(op.getarg(0), op.getarg(1))
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -460,11 +460,14 @@
         self._newoperations = []
 
     def make_constant(self, op, constbox):
+        op = self.getforwarded(op)
         if not op.is_constant():
-            self.getforwarded(op)._forwarded = constbox
+            op._forwarded = constbox
 
-    def make_constant_int(self, box, intvalue):
-        self.getvalue(box).make_constant(ConstInt(intvalue))
+    def make_constant_int(self, op, intvalue):
+        op = self.getforwarded(op)
+        if not op.is_constant():
+            op._forwarded = ConstInt(intvalue)
 
     def new_ptr_box(self):
         return self.cpu.ts.BoxRef()
@@ -536,13 +539,6 @@
         dispatch_opt(self, op)
 
     def emit_operation(self, op):
-        if op.returns_bool_result():
-            xxxx
-            self.getvalue(op).is_bool_box = True
-        self._emit_operation(op)
-
-    @specialize.argtype(0)
-    def _emit_operation(self, op):
         assert op.getopnum() not in opgroups.CALL_PURE
         assert not op._forwarded
         if isinstance(op, Const):
diff --git a/pypy/jit/metainterp/optimizeopt/pure.py b/pypy/jit/metainterp/optimizeopt/pure.py
--- a/pypy/jit/metainterp/optimizeopt/pure.py
+++ b/pypy/jit/metainterp/optimizeopt/pure.py
@@ -12,6 +12,7 @@
         self.emitted_pure_operations = []
 
     def optimize_default(self, op):
+        op = self.getforwarded(op)
         canfold = op.is_always_pure()
         if op.is_ovf():
             self.posponedop = op
@@ -24,7 +25,6 @@
         else:
             nextop = None
 
-        newop = self.getforwarded(op)
         if canfold:
             for i in range(op.numargs()):
                 if self.get_constant_op(op.getarg(i)) is None:
@@ -38,20 +38,18 @@
                 return
 
             # did we do the exact same operation already?
-            oldop = self.pure_operations.get(newop)
+            oldop = self.pure_operations.get(op)
             if oldop is not None:
                 self.replace(op, oldop)
                 return
             else:
-                self.pure_operations.set(newop, op)
+                self.pure_operations.set(op, op)
                 self.remember_emitting_pure(op)
 
         # otherwise, the operation remains
-        if newop.returns_bool_result():
-            newop.setboolbox(True)
         if nextop:
-            self.emit_operation(nextop)
-        return newop
+            return nextop
+        return op
 
     def _new_optimize_call_pure(opnum):
         def optimize_CALL_PURE(self, op):
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -280,10 +280,10 @@
         return self.optimize_guard(op, constbox, emit_operation=emit_operation)
 
     def optimize_GUARD_TRUE(self, op):
-        self.optimize_guard(op, CONST_1)
+        return self.optimize_guard(op, CONST_1)
 
     def optimize_GUARD_FALSE(self, op):
-        self.optimize_guard(op, CONST_0)
+        return self.optimize_guard(op, CONST_0)
 
     def optimize_RECORD_KNOWN_CLASS(self, op):
         value = self.getvalue(op.getarg(0))
@@ -380,8 +380,7 @@
             self.emit_operation(op)
 
     def optimize_INT_IS_TRUE(self, op):
-        value = self.getforwarded(op.getarg(0))
-        if value.getboolbox():
+        if op.getarg(0).returns_bool_result():
             self.replace(op, op.getarg(0))
             return
         return self._optimize_nullness(op, op.getarg(0), True)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -268,15 +268,15 @@
         ops = """
         [i0]
         i1 = int_lt(i0, 0)
-        guard_true(i1) []
+        guard_true(i1)
         i2 = int_ge(i0, 0)
-        guard_false(i2) []
+        guard_false(i2)
         jump(i0)
         """
         expected = """
         [i0]
         i1 = int_lt(i0, 0)
-        guard_true(i1) []
+        guard_true(i1)
         jump(i0)
         """
         self.optimize_loop(ops, expected)
diff --git a/pypy/jit/metainterp/optmodel.py b/pypy/jit/metainterp/optmodel.py
--- a/pypy/jit/metainterp/optmodel.py
+++ b/pypy/jit/metainterp/optmodel.py
@@ -12,7 +12,7 @@
     def getintbound(self):
         return ConstantIntBound(self.getint())
 
-    def getboolbox(self):
+    def getboolres(self):
         return False # for optimization
 
 class __extend__(Const):
@@ -63,7 +63,7 @@
             if cls.type == INT:
                 # all the integers have bounds
                 addattr(Mutable, 'intbound', imm_int_unbound)
-                addattr(Mutable, 'boolbox', False)
+                addattr(Mutable, 'boolres', False)
             elif cls.type == REF:
                 addattr(Mutable, 'knownclass', None)
             # for tracking last guard and merging GUARD_VALUE with
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -650,8 +650,6 @@
         opnum = cls.getopnum()
         if we_are_translated():
             assert opnum >= 0
-        elif opnum < 0:
-            return False     # for tests
         return opboolresult[opnum]
 
     def _copy_extra_attrs(self, new):


More information about the pypy-commit mailing list