Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r61834:4f5cc418bac8
Date: 2013-02-27 11:38 +0200
http://bitbucket.org/pypy/pypy/changeset/4f5cc418bac8/

Log:    a test and a fix (and we're not done yet)

diff --git a/rpython/jit/backend/llsupport/test/test_gc_integration.py 
b/rpython/jit/backend/llsupport/test/test_gc_integration.py
--- a/rpython/jit/backend/llsupport/test/test_gc_integration.py
+++ b/rpython/jit/backend/llsupport/test/test_gc_integration.py
@@ -651,18 +651,21 @@
 
         invoke_around_extcall(before, after)
 
-        def f(x):
+        def f(frame, x):
+            # all the gc pointers are alive p1 -> p7 (but not p0)
+            assert bin(frame.jf_gcmap[0]).count('1') == 7
             assert x == 1
             return 2
         
-        FUNC = lltype.FuncType([lltype.Signed], lltype.Signed)
+        FUNC = lltype.FuncType([JITFRAMEPTR, lltype.Signed], lltype.Signed)
         fptr = llhelper(lltype.Ptr(FUNC), f)
         calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
                                     EffectInfo.MOST_GENERAL)        
         loop = self.parse("""
-        [i0]
-        i1 = call_release_gil(ConstClass(fptr), i0, descr=calldescr)
-        guard_not_forced(descr=faildescr) []
+        [i0, p1, p2, p3, p4, p5, p6, p7]
+        p0 = force_token()
+        i1 = call_release_gil(ConstClass(fptr), p0, i0, descr=calldescr)
+        guard_not_forced(descr=faildescr) [p1, p2, p3, p4, p5, p6, p7]
         finish(i1, descr=finaldescr)
         """, namespace={'fptr': fptr, 'calldescr':calldescr,
                         'faildescr': BasicFailDescr(),
@@ -671,7 +674,8 @@
         cpu.gc_ll_descr.init_nursery(100)
         cpu.setup_once()
         cpu.compile_loop(loop.inputargs, loop.operations, token)
-        frame = cpu.execute_token(token, 1)
+        args = [lltype.nullptr(llmemory.GCREF.TO) for i in range(7)]
+        frame = cpu.execute_token(token, 1, *args)
         frame = rffi.cast(JITFRAMEPTR, frame)
         assert frame.jf_frame[0] == 2
         assert l == ['before', 'after']
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
@@ -876,13 +876,13 @@
         for box, loc in self.rm.reg_bindings.iteritems():
             if loc in forbidden_regs:
                 continue
-            if box.type == REF and self.rm.stays_alive(box):
+            if box.type == REF and self.rm.is_still_alive(box):
                 assert not noregs
                 assert isinstance(loc, RegLoc)
                 val = gpr_reg_mgr_cls.all_reg_indexes[loc.value]
                 gcmap[val // WORD // 8] |= r_uint(1) << (val % (WORD * 8))
         for box, loc in self.fm.bindings.iteritems():
-            if box.type == REF and self.rm.stays_alive(box):
+            if box.type == REF and self.rm.is_still_alive(box):
                 assert isinstance(loc, FrameLoc)
                 val = loc.position + JITFRAME_FIXED_SIZE
                 gcmap[val // WORD // 8] |= r_uint(1) << (val % (WORD * 8))
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to