[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