[pypy-commit] pypy stmgc-c7: progress
arigo
noreply at buildbot.pypy.org
Sat Mar 22 12:58:34 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r70165:829d58f318f1
Date: 2014-03-22 12:57 +0100
http://bitbucket.org/pypy/pypy/changeset/829d58f318f1/
Log: progress
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
@@ -160,9 +160,10 @@
else:
raise NotImplementedError(op.getopname())
- def gen_malloc_frame(self, frame_info, frame, size_box):
+ def gen_malloc_frame(self, frame_info, frame):
descrs = self.gc_ll_descr.getframedescrs(self.cpu)
- if self.gc_ll_descr.kind == 'boehm' or self.gc_ll_descr.stm:
+ if self.gc_ll_descr.kind == 'boehm':
+ size_box = history.BoxInt()
op0 = ResOperation(rop.GETFIELD_GC, [history.ConstInt(frame_info)],
size_box,
descr=descrs.jfi_frame_depth)
@@ -170,9 +171,9 @@
op1 = ResOperation(rop.NEW_ARRAY, [size_box], frame,
descr=descrs.arraydescr)
self.handle_new_array(descrs.arraydescr, op1)
- else:
+ elif not self.gc_ll_descr.stm:
# we read size in bytes here, not the length
- # jfi_frame_size not set in STM!
+ size_box = history.BoxInt()
op0 = ResOperation(rop.GETFIELD_GC, [history.ConstInt(frame_info)],
size_box,
descr=descrs.jfi_frame_size)
@@ -186,6 +187,17 @@
self.newops.append(op1)
self.gen_initialize_len(frame, length_box,
descrs.arraydescr.lendescr)
+ else:
+ # jfi_frame_size not set in STM!
+ length_box = history.BoxInt()
+ op0 = ResOperation(rop.GETFIELD_GC, [history.ConstInt(frame_info)],
+ length_box,
+ descr=descrs.jfi_frame_depth)
+ self.newops.append(op0)
+ self.gen_malloc_nursery_varsize_frame(length_box, frame)
+ self.gen_initialize_tid(frame, descrs.arraydescr.tid)
+ self.gen_initialize_len(frame, length_box,
+ descrs.arraydescr.lendescr)
def handle_call_assembler(self, op):
descrs = self.gc_ll_descr.getframedescrs(self.cpu)
@@ -193,9 +205,8 @@
assert isinstance(loop_token, history.JitCellToken)
jfi = loop_token.compiled_loop_token.frame_info
llfi = heaptracker.adr2int(llmemory.cast_ptr_to_adr(jfi))
- size_box = history.BoxInt()
frame = history.BoxPtr()
- self.gen_malloc_frame(llfi, frame, size_box)
+ self.gen_malloc_frame(llfi, frame)
op2 = ResOperation(rop.SETFIELD_GC, [frame, history.ConstInt(llfi)],
None, descr=descrs.jf_frame_info)
self.newops.append(op2)
@@ -329,7 +340,7 @@
"""
self.emitting_an_operation_that_can_collect()
op = ResOperation(rop.CALL_MALLOC_NURSERY_VARSIZE_FRAME,
- [sizebox],
+ [sizebox], # if STM, this is actually lengthbox!
v_result)
self.newops.append(op)
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
@@ -723,32 +723,28 @@
jump(p1)
""" % (op, guard), """
[p1]
- cond_call_stm_b(p1, descr=A2Vdescr)
+ cond_call_gc_wb(p1, descr=wbdescr)
setfield_gc(p1, 10, descr=tydescr)
%s
%s
%s
- cond_call_stm_b(p1, descr=A2Vdescr)
+ cond_call_gc_wb(p1, descr=wbdescr)
setfield_gc(p1, 20, descr=tydescr)
jump(p1)
""" % (op, guard, tr_break), calldescr2=calldescr2)
def test_call_assembler(self):
- py.test.skip("XXX: works, but somehow the test doesn't")
-
self.check_rewrite("""
[i0, f0]
i2 = call_assembler(i0, f0, descr=casmdescr)
guard_not_forced()[]
""", """
[i0, f0]
- i1 = getfield_gc(ConstClass(frame_info), descr=jfi_frame_size)
+ i1 = getfield_gc(ConstClass(frame_info), descr=jfi_frame_depth)
p1 = call_malloc_nursery_varsize_frame(i1)
setfield_gc(p1, 0, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
- i2 = getfield_gc(ConstClass(frame_info), descr=jfi_frame_depth)
- setfield_gc(p1, i2, descr=framelendescr)
+ setfield_gc(p1, i1, descr=framelendescr)
setfield_gc(p1, ConstClass(frame_info), descr=jf_frame_info)
setarrayitem_gc(p1, 0, i0, descr=signedframedescr)
setarrayitem_gc(p1, 1, f0, descr=floatframedescr)
@@ -817,11 +813,8 @@
jump(i1)
""")
- def test_ptr_eq_other_direct_cases(self):
- py.test.skip("can also keep ptr_eq if both args are L or W, "
- "or if one arg is freshly malloced")
+ # ----------- tests copied from rewrite.py -------------
- # ----------- tests copied from rewrite.py -------------
def test_rewrite_assembler_new_to_malloc(self):
self.check_rewrite("""
[p1]
@@ -830,7 +823,6 @@
[p1]
p0 = call_malloc_nursery(%(sdescr.size)d)
setfield_gc(p0, 1234, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
""")
def test_rewrite_assembler_new3_to_malloc(self):
@@ -844,13 +836,10 @@
p0 = call_malloc_nursery( \
%(sdescr.size + tdescr.size + sdescr.size)d)
setfield_gc(p0, 1234, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
p1 = int_add(p0, %(sdescr.size)d)
setfield_gc(p1, 5678, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
p2 = int_add(p1, %(tdescr.size)d)
setfield_gc(p2, 1234, descr=tiddescr)
- stm_set_revision_gc(p2, descr=revdescr)
""")
def test_rewrite_assembler_new_array_fixed_to_malloc(self):
@@ -862,7 +851,6 @@
p0 = call_malloc_nursery( \
%(adescr.basesize + 10 * adescr.itemsize)d)
setfield_gc(p0, 4321, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, 10, descr=alendescr)
""")
@@ -877,10 +865,8 @@
%(sdescr.size + \
adescr.basesize + 10 * adescr.itemsize)d)
setfield_gc(p0, 1234, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
p1 = int_add(p0, %(sdescr.size)d)
setfield_gc(p1, 4321, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
setfield_gc(p1, 10, descr=alendescr)
""")
@@ -892,7 +878,6 @@
[]
p0 = call_malloc_nursery(%(bdescr.basesize + 8)d)
setfield_gc(p0, 8765, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, 6, descr=blendescr)
""")
@@ -907,19 +892,15 @@
[]
p0 = call_malloc_nursery(%(4 * (bdescr.basesize + 8))d)
setfield_gc(p0, 8765, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, 5, descr=blendescr)
p1 = int_add(p0, %(bdescr.basesize + 8)d)
setfield_gc(p1, 8765, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
setfield_gc(p1, 5, descr=blendescr)
p2 = int_add(p1, %(bdescr.basesize + 8)d)
setfield_gc(p2, 8765, descr=tiddescr)
- stm_set_revision_gc(p2, descr=revdescr)
setfield_gc(p2, 5, descr=blendescr)
p3 = int_add(p2, %(bdescr.basesize + 8)d)
setfield_gc(p3, 8765, descr=tiddescr)
- stm_set_revision_gc(p3, descr=revdescr)
setfield_gc(p3, 5, descr=blendescr)
""")
@@ -932,10 +913,8 @@
[]
p0 = call_malloc_nursery(%(4*WORD)d)
setfield_gc(p0, 9000, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
p1 = int_add(p0, %(2*WORD)d)
setfield_gc(p1, 9000, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
""")
def test_rewrite_assembler_variable_size(self):
@@ -1015,16 +994,13 @@
p0 = call_malloc_nursery( \
%(2 * (bdescr.basesize + 104))d)
setfield_gc(p0, 8765, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, 101, descr=blendescr)
p1 = int_add(p0, %(bdescr.basesize + 104)d)
setfield_gc(p1, 8765, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
setfield_gc(p1, 102, descr=blendescr)
p2 = call_malloc_nursery( \
%(bdescr.basesize + 104)d)
setfield_gc(p2, 8765, descr=tiddescr)
- stm_set_revision_gc(p2, descr=revdescr)
setfield_gc(p2, 103, descr=blendescr)
""")
@@ -1051,7 +1027,6 @@
[p1]
p0 = call_malloc_nursery(104) # rounded up
setfield_gc(p0, 9315, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, ConstClass(o_vtable), descr=vtable_descr)
""")
@@ -1080,11 +1055,9 @@
%(strdescr.basesize + 16 * strdescr.itemsize + \
unicodedescr.basesize + 10 * unicodedescr.itemsize)d)
setfield_gc(p0, %(strdescr.tid)d, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, 14, descr=strlendescr)
p1 = int_add(p0, %(strdescr.basesize + 16 * strdescr.itemsize)d)
setfield_gc(p1, %(unicodedescr.tid)d, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
setfield_gc(p1, 10, descr=unicodelendescr)
p2 = call_malloc_nursery_varsize(2, 4, i2, \
descr=unicodedescr)
@@ -1105,10 +1078,9 @@
p1 = call_malloc_nursery( \
%(cdescr.basesize + 5 * cdescr.itemsize)d)
setfield_gc(p1, 8111, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
setfield_gc(p1, 5, descr=clendescr)
label(p1, i2, p3)
- cond_call_stm_b(p1, descr=A2Wdescr)
+ cond_call_gc_wb(p1, descr=wbdescr)
setarrayitem_gc(p1, i2, p3, descr=cdescr)
""")
@@ -1132,11 +1104,9 @@
p0 = call_malloc_nursery( \
%(2 * (bdescr.basesize + 8))d)
setfield_gc(p0, 8765, descr=tiddescr)
- stm_set_revision_gc(p0, descr=revdescr)
setfield_gc(p0, 5, descr=blendescr)
p1 = int_add(p0, %(bdescr.basesize + 8)d)
setfield_gc(p1, 8765, descr=tiddescr)
- stm_set_revision_gc(p1, descr=revdescr)
setfield_gc(p1, 5, descr=blendescr)
stm_transaction_break(1)
@@ -1144,7 +1114,6 @@
p2 = call_malloc_nursery( \
%(bdescr.basesize + 8)d)
setfield_gc(p2, 8765, descr=tiddescr)
- stm_set_revision_gc(p2, descr=revdescr)
setfield_gc(p2, 5, descr=blendescr)
""", calldescr2=calldescr2)
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -865,6 +865,7 @@
self.rm.possibly_free_var(tmp_box)
#
if gc_ll_descr.stm:
+ xxxxxx
self.assembler.malloc_cond_varsize_frame_stm(sizeloc, gcmap)
else:
self.assembler.malloc_cond_varsize_frame(
More information about the pypy-commit
mailing list