Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: stmgc-c8 Changeset: r76349:f7607bffb63b Date: 2015-03-12 09:33 +0100 http://bitbucket.org/pypy/pypy/changeset/f7607bffb63b/
Log: start fixing jit support for non-zero nursery diff --git a/rpython/jit/backend/llsupport/test/test_stmrewrite.py b/rpython/jit/backend/llsupport/test/test_stmrewrite.py --- a/rpython/jit/backend/llsupport/test/test_stmrewrite.py +++ b/rpython/jit/backend/llsupport/test/test_stmrewrite.py @@ -54,10 +54,11 @@ self.gc_ll_descr.write_barrier_descr.has_write_barrier_from_array = ( lambda cpu: True) self.gc_ll_descr.minimal_size_in_nursery = 16 + self.gc_ll_descr.malloc_zero_filled = False # class FakeCPU(BaseFakeCPU): def sizeof(self, STRUCT): - descr = SizeDescrWithVTable(104) + descr = SizeDescrWithVTable(104, gc_fielddescrs=[]) descr.tid = 9315 return descr @@ -73,7 +74,7 @@ for name, value in self.gc_ll_descr.__dict__.items(): if name.endswith('descr') and name[1] == '2' and len(name) == 8: namespace[name] = value # "X2Ydescr" - self.gc_ll_descr.malloc_zero_filled = True + self.gc_ll_descr.malloc_zero_filled = False RewriteTests.check_rewrite(self, frm_operations, to_operations, **namespace) @@ -226,6 +227,7 @@ setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr) cond_call_gc_wb(p3, descr=wbdescr) setfield_gc(p3, p1, descr=tzdescr) + zero_ptr_field(p2, %(tdescr.gc_fielddescrs[0].offset)s) jump(p2) """) @@ -243,6 +245,7 @@ p3 = call_malloc_nursery(%(tdescr.size)d) setfield_gc(p3, %(tdescr.tid)d, descr=tiddescr) p4 = getfield_gc(p1, descr=tzdescr) + zero_ptr_field(p3, %(tdescr.gc_fielddescrs[0].offset)s) jump(p2) """) @@ -271,6 +274,7 @@ p2 = call_malloc_nursery(%(tdescr.size)d) setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr) p1 = getfield_gc(p2, descr=tzdescr) + zero_ptr_field(p2, %(tdescr.gc_fielddescrs[0].offset)s) jump(p1) """) @@ -605,6 +609,7 @@ [i2, i3] p1 = call_malloc_nursery_varsize(1, 1, i3, descr=strdescr) setfield_gc(p1, i3, descr=strlendescr) + setfield_gc(p1, 0, descr=strhashdescr) cond_call_gc_wb(p1, descr=wbdescr) strsetitem(p1, i2, i3) unicodesetitem(p1, i2, i3) @@ -688,6 +693,7 @@ [p1, i1, i2, i3] p2 = call_malloc_nursery_varsize(1, 1, i3, descr=strdescr) setfield_gc(p2, i3, descr=strlendescr) + setfield_gc(p2, 0, descr=strhashdescr) cond_call_gc_wb(p2, descr=wbdescr) copystrcontent(p1, p2, i1, i2, i3) jump() @@ -892,9 +898,12 @@ %(sdescr.size + tdescr.size + sdescr.size)d) setfield_gc(p0, 1234, descr=tiddescr) p1 = int_add(p0, %(sdescr.size)d) + setfield_gc(p1, 0, descr=stmflagsdescr) setfield_gc(p1, 5678, descr=tiddescr) p2 = int_add(p1, %(tdescr.size)d) + setfield_gc(p2, 0, descr=stmflagsdescr) setfield_gc(p2, 1234, descr=tiddescr) + zero_ptr_field(p1, %(tdescr.gc_fielddescrs[0].offset)s) jump() """) @@ -1005,7 +1014,7 @@ [i0] p0 = call_malloc_nursery_varsize(1, 1, i0, descr=strdescr) setfield_gc(p0, i0, descr=strlendescr) - + setfield_gc(p0, 0, descr=strhashdescr) jump(i0) """) @@ -1123,18 +1132,22 @@ unicodedescr.basesize + 10 * unicodedescr.itemsize)d) setfield_gc(p0, %(strdescr.tid)d, descr=tiddescr) setfield_gc(p0, 14, descr=strlendescr) + setfield_gc(p0, 0, descr=strhashdescr) p1 = int_add(p0, %(strdescr.basesize + 16 * strdescr.itemsize)d) setfield_gc(p1, %(unicodedescr.tid)d, descr=tiddescr) setfield_gc(p1, 10, descr=unicodelendescr) + setfield_gc(p1, 0, descr=unicodehashdescr) p2 = call_malloc_nursery_varsize(2, 4, i2, \ descr=unicodedescr) setfield_gc(p2, i2, descr=unicodelendescr) + setfield_gc(p2, 0, descr=unicodehashdescr) p3 = call_malloc_nursery_varsize(1, 1, i2, \ descr=strdescr) setfield_gc(p3, i2, descr=strlendescr) + setfield_gc(p3, 0, descr=strhashdescr) jump() """) @@ -1142,7 +1155,7 @@ def test_label_makes_size_unknown(self): self.check_rewrite(""" [i2, p3] - p1 = new_array(5, descr=cdescr) + p1 = new_array_clear(5, descr=cdescr) label(p1, i2, p3) setarrayitem_gc(p1, i2, p3, descr=cdescr) """, """ @@ -1151,6 +1164,7 @@ %(cdescr.basesize + 5 * cdescr.itemsize)d) setfield_gc(p1, 8111, descr=tiddescr) setfield_gc(p1, 5, descr=clendescr) + zero_array(p1, 0, 5, descr=cdescr) label(p1, i2, p3) cond_call_gc_wb_array(p1, i2, descr=wbdescr) setarrayitem_gc(p1, i2, p3, descr=cdescr) @@ -1303,6 +1317,7 @@ p2 = call_malloc_nursery(%(tdescr.size)d) setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr) i1 = stm_should_break_transaction() + zero_ptr_field(p2, %(tdescr.gc_fielddescrs[0].offset)s) jump(i1) """) @@ -1331,6 +1346,7 @@ [] p2 = call_malloc_nursery(%(tdescr.size)d) setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr) + zero_ptr_field(p2, %(tdescr.gc_fielddescrs[0].offset)s) label() i1 = stm_should_break_transaction() $DUMMYALLOC @@ -1351,3 +1367,17 @@ guard_not_forced_2() [] finish() """) + + def test_zero_before_maymalloc(self): + self.check_rewrite(""" + [] + p2 = new(descr=tdescr) + escape() + """, """ + [] + p2 = call_malloc_nursery(%(tdescr.size)d) + setfield_gc(p2, %(tdescr.tid)d, descr=tiddescr) + zero_ptr_field(p2, %(tdescr.gc_fielddescrs[0].offset)s) + $INEV + escape() + """) diff --git a/rpython/jit/metainterp/gc.py b/rpython/jit/metainterp/gc.py --- a/rpython/jit/metainterp/gc.py +++ b/rpython/jit/metainterp/gc.py @@ -29,7 +29,7 @@ malloc_zero_filled = False class GC_stmgc(GcDescription): - malloc_zero_filled = True + malloc_zero_filled = False def get_description(config): name = config.translation.gc _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit