[pypy-svn] r53238 - in pypy/branch/jit-hotpath/pypy/jit/rainbow: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Apr 1 21:15:58 CEST 2008


Author: cfbolz
Date: Tue Apr  1 21:15:56 2008
New Revision: 53238

Modified:
   pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py
   pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
   pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py
Log:
fix green ptr equality


Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py	Tue Apr  1 21:15:56 2008
@@ -339,6 +339,17 @@
         addr = gv_ptr.revealconst(llmemory.Address)
         return self.rgenop.genconst(not addr)
 
+    @arguments("green", returns="green")
+    def opimpl_green_ptr_nonzero(self, gv_ptr):
+        addr = gv_ptr.revealconst(llmemory.Address)
+        return self.rgenop.genconst(bool(addr))
+
+    @arguments("green", returns="green")
+    def opimpl_green_ptr_iszero(self, gv_ptr):
+        addr = gv_ptr.revealconst(llmemory.Address)
+        return self.rgenop.genconst(not addr)
+
+
     @arguments("red", "red", returns="red")
     def opimpl_red_ptr_eq(self, gv_ptr1, gv_ptr2):
         addr1 = gv_ptr1.revealconst(llmemory.Address)

Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py	Tue Apr  1 21:15:56 2008
@@ -540,6 +540,17 @@
         return rtimeshift.genptreq(self.jitstate, ptrbox1,
                                    ptrbox2, True)
 
+    @arguments("green", returns="green")
+    def opimpl_green_ptr_nonzero(self, gv_ptr):
+        addr = gv_ptr.revealconst(llmemory.Address)
+        return self.rgenop.genconst(bool(addr))
+
+    @arguments("green", returns="green")
+    def opimpl_green_ptr_iszero(self, gv_ptr):
+        addr = gv_ptr.revealconst(llmemory.Address)
+        return self.rgenop.genconst(not bool(addr))
+
+
     @arguments("red", "bool")
     def opimpl_learn_boolvalue(self, redbox, boolval):
         redbox.learn_boolvalue(self.jitstate, boolval)

Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py	Tue Apr  1 21:15:56 2008
@@ -1971,6 +1971,35 @@
         assert res == 7
         self.check_insns(getfield=0)
 
+    def test_green_ptrequality(self):
+        class A(object):
+            _immutable_ = True
+            def __init__(self, a):
+                self.a = a
+
+        five = A(5)
+        seven = A(7)
+
+        def g(x):
+            if x:
+                return seven
+            return five
+        def f(green1, green2):
+            hint(None, global_merge_point=True)
+            hint(green1, concrete=True)
+            hint(green2, concrete=True)
+            if green1:
+                a = seven
+            else:
+                a = five
+            if green2:
+                b = seven
+            else:
+                b = five
+            return int(a is not b) + int(a is b)
+        res = self.interpret(f, [True, True], policy=StopAtXPolicy(g))
+        assert res == f(True, True)
+
     # void tests
     def test_void_args(self):
         class Space(object):
@@ -2097,6 +2126,7 @@
     test_learn_nonzeroness = _skip
     test_void_args = _skip
     test_ptrequality = _skip
+    test_green_ptrequality = _skip
 
 
 



More information about the Pypy-commit mailing list