[pypy-commit] pypy gc_no_cleanup_nursery: only store gc fielddescrs
fijal
noreply at buildbot.pypy.org
Thu Sep 25 12:12:38 CEST 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: gc_no_cleanup_nursery
Changeset: r73697:bd40306ca234
Date: 2014-09-25 12:11 +0200
http://bitbucket.org/pypy/pypy/changeset/bd40306ca234/
Log: only store gc fielddescrs
diff --git a/rpython/jit/backend/llsupport/descr.py b/rpython/jit/backend/llsupport/descr.py
--- a/rpython/jit/backend/llsupport/descr.py
+++ b/rpython/jit/backend/llsupport/descr.py
@@ -36,10 +36,10 @@
tid = llop.combine_ushort(lltype.Signed, 0, 0)
def __init__(self, size, count_fields_if_immut=-1,
- fielddescrs=None):
+ gc_fielddescrs=None):
self.size = size
self.count_fields_if_immut = count_fields_if_immut
- self.fielddescrs = fielddescrs
+ self.gc_fielddescrs = gc_fielddescrs
def count_fields_if_immutable(self):
return self.count_fields_if_immut
@@ -60,13 +60,13 @@
except KeyError:
size = symbolic.get_size(STRUCT, gccache.translate_support_code)
count_fields_if_immut = heaptracker.count_fields_if_immutable(STRUCT)
- fielddescrs = heaptracker.fielddescrs(gccache, STRUCT)
+ gc_fielddescrs = heaptracker.gc_fielddescrs(gccache, STRUCT)
if heaptracker.has_gcstruct_a_vtable(STRUCT):
sizedescr = SizeDescrWithVTable(size, count_fields_if_immut,
- fielddescrs)
+ gc_fielddescrs)
else:
sizedescr = SizeDescr(size, count_fields_if_immut,
- fielddescrs)
+ gc_fielddescrs)
gccache.init_size_descr(STRUCT, sizedescr)
cache[STRUCT] = sizedescr
return sizedescr
diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -135,10 +135,9 @@
except KeyError:
d = {}
self.delayed_zero_setfields[result] = d
- for fielddescr in descr.fielddescrs:
- if fielddescr.is_pointer_field():
- ofs = self.cpu.unpack_fielddescr(fielddescr)
- d[ofs] = None
+ for fielddescr in descr.gc_fielddescrs:
+ ofs = self.cpu.unpack_fielddescr(fielddescr)
+ d[ofs] = None
def consider_setfield_gc(self, op):
offset = self.cpu.unpack_fielddescr(op.getdescr())
diff --git a/rpython/jit/backend/llsupport/test/test_descr.py b/rpython/jit/backend/llsupport/test/test_descr.py
--- a/rpython/jit/backend/llsupport/test/test_descr.py
+++ b/rpython/jit/backend/llsupport/test/test_descr.py
@@ -19,8 +19,8 @@
assert descr_t.size == symbolic.get_size(T, False)
assert descr_s.count_fields_if_immutable() == -1
assert descr_t.count_fields_if_immutable() == -1
- assert descr_t.fielddescrs == []
- assert len(descr_s.fielddescrs) == 2
+ assert descr_t.gc_fielddescrs == []
+ assert len(descr_s.gc_fielddescrs) == 1
assert descr_s == get_size_descr(c0, S)
assert descr_s != get_size_descr(c1, S)
#
@@ -31,7 +31,7 @@
PARENT = lltype.Struct('P', ('x', lltype.Ptr(T)))
STRUCT = lltype.GcStruct('S', ('parent', PARENT), ('y', lltype.Ptr(T)))
descr_struct = get_size_descr(c0, STRUCT)
- assert len(descr_struct.fielddescrs) == 2
+ assert len(descr_struct.gc_fielddescrs) == 2
def test_get_size_descr_immut():
S = lltype.GcStruct('S', hints={'immutable': True})
diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py b/rpython/jit/backend/llsupport/test/test_rewrite.py
--- a/rpython/jit/backend/llsupport/test/test_rewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_rewrite.py
@@ -154,7 +154,7 @@
def setup_method(self, meth):
class FakeCPU(BaseFakeCPU):
def sizeof(self, STRUCT):
- return SizeDescrWithVTable(102, fielddescrs=[])
+ return SizeDescrWithVTable(102, gc_fielddescrs=[])
self.cpu = FakeCPU()
self.gc_ll_descr = GcLLDescr_boehm(None, None, None)
@@ -291,7 +291,7 @@
#
class FakeCPU(BaseFakeCPU):
def sizeof(self, STRUCT):
- descr = SizeDescrWithVTable(104, fielddescrs=[])
+ descr = SizeDescrWithVTable(104, gc_fielddescrs=[])
descr.tid = 9315
return descr
self.cpu = FakeCPU()
@@ -324,7 +324,7 @@
setfield_gc(p1, 5678, descr=tiddescr)
p2 = int_add(p1, %(tdescr.size)d)
setfield_gc(p2, 1234, descr=tiddescr)
- zero_ptr_field(p1, %(tdescr.fielddescrs[1].offset)s)
+ zero_ptr_field(p1, %(tdescr.gc_fielddescrs[0].offset)s)
jump()
""")
@@ -771,7 +771,7 @@
[i0]
p0 = call_malloc_nursery(%(tdescr.size)d)
setfield_gc(p0, 5678, descr=tiddescr)
- zero_ptr_field(p0, %(tdescr.fielddescrs[1].offset)s)
+ zero_ptr_field(p0, %(tdescr.gc_fielddescrs[0].offset)s)
p1 = call_malloc_nursery_varsize(1, 1, i0, \
descr=strdescr)
setfield_gc(p1, i0, descr=strlendescr)
@@ -792,7 +792,7 @@
[p1]
p0 = call_malloc_nursery(%(tdescr.size)d)
setfield_gc(p0, 5678, descr=tiddescr)
- zero_ptr_field(p0, %(tdescr.fielddescrs[1].offset)s)
+ zero_ptr_field(p0, %(tdescr.gc_fielddescrs[0].offset)s)
label(p0, p1)
cond_call_gc_wb(p0, descr=wbdescr)
setfield_gc(p0, p1, descr=tzdescr)
diff --git a/rpython/jit/codewriter/heaptracker.py b/rpython/jit/codewriter/heaptracker.py
--- a/rpython/jit/codewriter/heaptracker.py
+++ b/rpython/jit/codewriter/heaptracker.py
@@ -126,7 +126,7 @@
vtable = llmemory.cast_ptr_to_adr(vtable)
return adr2int(vtable)
-def fielddescrs(gccache, STRUCT, res=None):
+def gc_fielddescrs(gccache, STRUCT, res=None):
from rpython.jit.backend.llsupport import descr
if res is None:
@@ -137,7 +137,7 @@
if FIELD is lltype.Void:
continue
elif isinstance(FIELD, lltype.Struct):
- fielddescrs(gccache, FIELD, res)
- else:
+ gc_fielddescrs(gccache, FIELD, res)
+ elif isinstance(FIELD, lltype.Ptr) and FIELD._needsgc():
res.append(descr.get_field_descr(gccache, STRUCT, name))
return res
More information about the pypy-commit
mailing list