[pypy-commit] pypy optresult: fix the backend
fijal
noreply at buildbot.pypy.org
Tue Jun 2 13:47:06 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r77757:4180412b78a9
Date: 2015-06-02 13:47 +0200
http://bitbucket.org/pypy/pypy/changeset/4180412b78a9/
Log: fix the backend
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
@@ -66,7 +66,7 @@
BaseSizeDescr = SizeDescr
-def get_size_descr(cpu, gccache, STRUCT, is_object):
+def get_size_descr(gccache, STRUCT, is_object):
cache = gccache._cache_size
try:
return cache[STRUCT]
@@ -74,13 +74,13 @@
size = symbolic.get_size(STRUCT, gccache.translate_support_code)
count_fields_if_immut = heaptracker.count_fields_if_immutable(STRUCT)
gc_fielddescrs = heaptracker.gc_fielddescrs(gccache, STRUCT)
- if is_object: #heaptracker.has_gcstruct_a_vtable(STRUCT):
- #assert is_object
+ if is_object:
+ assert heaptracker.has_gcstruct_a_vtable(STRUCT)
sizedescr = SizeDescrWithVTable(size, count_fields_if_immut,
gc_fielddescrs, None,
- heaptracker.get_vtable_for_gcstruct(cpu, STRUCT))
+ heaptracker.get_vtable_for_gcstruct(gccache, STRUCT))
else:
- #assert not is_object
+ assert not heaptracker.has_gcstruct_a_vtable(STRUCT)
sizedescr = SizeDescr(size, count_fields_if_immut,
gc_fielddescrs, None)
gccache.init_size_descr(STRUCT, sizedescr)
@@ -172,7 +172,8 @@
fielddescr = FieldDescr(name, offset, size, flag, index_in_parent)
cachedict = cache.setdefault(STRUCT, {})
cachedict[fieldname] = fielddescr
- fielddescr.parent_descr = get_size_descr(None, gccache, STRUCT, False)
+ fielddescr.parent_descr = get_size_descr(gccache, STRUCT,
+ heaptracker.has_gcstruct_a_vtable(STRUCT))
return fielddescr
def get_type_flag(TYPE):
diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -299,7 +299,7 @@
return rffi.cast(TYPE, x)
def sizeof(self, S, is_object):
- return get_size_descr(self, self.gc_ll_descr, S, is_object)
+ return get_size_descr(self.gc_ll_descr, S, is_object)
def fielddescrof(self, STRUCT, fieldname):
return get_field_descr(self.gc_ll_descr, STRUCT, fieldname)
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
@@ -56,24 +56,24 @@
return False
return True
-def get_vtable_for_gcstruct(cpu, GCSTRUCT):
+def get_vtable_for_gcstruct(gccache, GCSTRUCT):
# xxx hack: from a GcStruct representing an instance's
# lowleveltype, return the corresponding vtable pointer.
# Returns None if the GcStruct does not belong to an instance.
assert isinstance(GCSTRUCT, lltype.GcStruct)
if not has_gcstruct_a_vtable(GCSTRUCT):
return None
- setup_cache_gcstruct2vtable(cpu)
- return cpu._cache_gcstruct2vtable[GCSTRUCT]
+ setup_cache_gcstruct2vtable(gccache)
+ return gccache._cache_gcstruct2vtable[GCSTRUCT]
-def setup_cache_gcstruct2vtable(cpu):
- if not hasattr(cpu, '_cache_gcstruct2vtable'):
+def setup_cache_gcstruct2vtable(gccache):
+ if not hasattr(gccache, '_cache_gcstruct2vtable'):
cache = {}
cache.update(testing_gcstruct2vtable)
- if cpu.rtyper:
- for rinstance in cpu.rtyper.instance_reprs.values():
+ if gccache.rtyper:
+ for rinstance in gccache.rtyper.instance_reprs.values():
cache[rinstance.lowleveltype.TO] = rinstance.rclass.getvtable()
- cpu._cache_gcstruct2vtable = cache
+ gccache._cache_gcstruct2vtable = cache
def set_testing_vtable_for_gcstruct(GCSTRUCT, vtable, name):
# only for tests that need to register the vtable of their malloc'ed
diff --git a/rpython/jit/metainterp/virtualref.py b/rpython/jit/metainterp/virtualref.py
--- a/rpython/jit/metainterp/virtualref.py
+++ b/rpython/jit/metainterp/virtualref.py
@@ -27,6 +27,7 @@
adr = heaptracker.adr2int(adr)
self.jit_virtual_ref_const_class = history.ConstInt(adr)
fielddescrof = self.cpu.fielddescrof
+ self.cpu.gc_ll_descr._cache_gcstruct2vtable[self.JIT_VIRTUAL_REF] = self.jit_virtual_ref_vtable
self.descr_virtual_token = fielddescrof(self.JIT_VIRTUAL_REF,
'virtual_token')
self.descr_forced = fielddescrof(self.JIT_VIRTUAL_REF, 'forced')
More information about the pypy-commit
mailing list