Author: Armin Rigo <[email protected]>
Branch: heapcache-refactor
Changeset: r83100:669fec3af2a8
Date: 2016-03-17 11:38 +0100
http://bitbucket.org/pypy/pypy/changeset/669fec3af2a8/
Log: test_known_nullity
diff --git a/rpython/jit/metainterp/heapcache.py
b/rpython/jit/metainterp/heapcache.py
--- a/rpython/jit/metainterp/heapcache.py
+++ b/rpython/jit/metainterp/heapcache.py
@@ -7,6 +7,7 @@
# RefFrontendOp._heapc_flags:
HF_LIKELY_VIRTUAL = 0x01
HF_KNOWN_CLASS = 0x02
+HF_KNOWN_NULLITY = 0x04
@always_inline
def add_flags(ref_frontend_op, flags):
@@ -32,7 +33,6 @@
self.reset_keep_likely_virtual()
def reset_keep_likely_virtual(self):
- self.known_nullity = False
# did we see the allocation during tracing?
self.seen_allocation = False
self.is_unescaped = False
@@ -340,13 +340,14 @@
add_flags(box, HF_KNOWN_CLASS)
def is_nullity_known(self, box):
- value = self.getvalue(box, create=False)
- if value:
- return value.known_nullity
- return False
+ return (isinstance(box, RefFrontendOp) and
+ self.test_head_version(box) and
+ test_flags(box, HF_KNOWN_NULLITY))
def nullity_now_known(self, box):
- self.getvalue(box).known_nullity = True
+ assert isinstance(box, RefFrontendOp)
+ self.update_version(box)
+ add_flags(box, HF_KNOWN_NULLITY)
def is_nonstandard_virtualizable(self, box):
value = self.getvalue(box, create=False)
diff --git a/rpython/jit/metainterp/test/test_heapcache.py
b/rpython/jit/metainterp/test/test_heapcache.py
--- a/rpython/jit/metainterp/test/test_heapcache.py
+++ b/rpython/jit/metainterp/test/test_heapcache.py
@@ -74,15 +74,17 @@
def test_known_nullity(self):
h = HeapCache()
- assert not h.is_nullity_known(1)
- assert not h.is_nullity_known(2)
- h.nullity_now_known(1)
- assert h.is_nullity_known(1)
- assert not h.is_nullity_known(2)
+ box1 = RefFrontendOp(1)
+ box2 = RefFrontendOp(2)
+ assert not h.is_nullity_known(box1)
+ assert not h.is_nullity_known(box2)
+ h.nullity_now_known(box1)
+ assert h.is_nullity_known(box1)
+ assert not h.is_nullity_known(box2)
h.reset()
- assert not h.is_nullity_known(1)
- assert not h.is_nullity_known(2)
+ assert not h.is_nullity_known(box1)
+ assert not h.is_nullity_known(box2)
def test_nonstandard_virtualizable(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit