Author: Remi Meier <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit