Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: kill-gen-store-back-in
Changeset: r65627:4d3199d86bfc
Date: 2013-07-24 21:23 +0200
http://bitbucket.org/pypy/pypy/changeset/4d3199d86bfc/

Log:    merge fast-slowpath

diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py 
b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -250,7 +250,7 @@
                 # This is only safe if the class of the guard_value matches the
                 # class of the guard_*_class, otherwise the intermediate ops 
might
                 # be executed with wrong classes.
-                previous_classbox = 
value.get_constant_class(self.optimizer.cpu)            
+                previous_classbox = 
value.get_constant_class(self.optimizer.cpu)
                 expected_classbox = 
self.optimizer.cpu.ts.cls_of_box(op.getarg(1))
                 assert previous_classbox is not None
                 assert expected_classbox is not None
@@ -343,6 +343,15 @@
         resvalue = self.getvalue(op.result)
         self.loop_invariant_results[key] = resvalue
 
+    def optimize_COND_CALL(self, op):
+        arg = op.getarg(0)
+        val = self.getvalue(arg)
+        if val.is_constant():
+            if val.box.same_constant(CONST_0):
+                return
+            op = op.copy_and_change(rop.CALL, args=op.getarglist()[1:])
+        self.emit_operation(op)
+
     def _optimize_nullness(self, op, box, expect_nonnull):
         value = self.getvalue(box)
         if value.is_nonnull():
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -8165,9 +8165,7 @@
         """
         self.optimize_loop(ops, expected)
 
-
-
-    def test_only_strengthen_guard_if_class_matches(self):
+    def test_only_strengthen_guard_if_class_matches_2(self):
         ops = """
         [p1]
         guard_class(p1, ConstClass(node_vtable2)) []
@@ -8177,6 +8175,30 @@
         self.raises(InvalidLoop, self.optimize_loop,
                        ops, ops)
 
+    def test_cond_call_with_a_constant(self):
+        ops = """
+        [p1]
+        cond_call(1, 123, p1, descr=plaincalldescr)
+        jump(p1)
+        """
+        expected = """
+        [p1]
+        call(123, p1, descr=plaincalldescr)
+        jump(p1)
+        """
+        self.optimize_loop(ops, expected)
+
+    def test_cond_call_with_a_constant_2(self):
+        ops = """
+        [p1]
+        cond_call(0, 123, p1, descr=plaincalldescr)
+        jump(p1)
+        """
+        expected = """
+        [p1]
+        jump(p1)
+        """
+        self.optimize_loop(ops, expected)
 
 class TestLLtype(OptimizeOptTest, LLtypeMixin):
     pass
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to