[pypy-commit] pypy stmgc-c7: Revert changes to 'make_sure_does_not_move(faildescr)'

arigo noreply at buildbot.pypy.org
Thu Mar 20 11:12:45 CET 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r70108:a68436ce38ec
Date: 2014-03-20 11:12 +0100
http://bitbucket.org/pypy/pypy/changeset/a68436ce38ec/

Log:	Revert changes to 'make_sure_does_not_move(faildescr)'

diff --git a/rpython/jit/backend/arm/assembler.py b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -623,7 +623,7 @@
 
         ops_offset = self.mc.ops_offset
         if logger is not None:
-            logger.log_loop(inputargs, operations, looptoken.number, "rewritten",
+            logger.log_loop(inputargs, operations, 0, "rewritten",
                             name=loopname, ops_offset=ops_offset)
         self.teardown()
 
diff --git a/rpython/jit/backend/arm/regalloc.py b/rpython/jit/backend/arm/regalloc.py
--- a/rpython/jit/backend/arm/regalloc.py
+++ b/rpython/jit/backend/arm/regalloc.py
@@ -630,10 +630,10 @@
         # the frame is in fp, but we have to point where in the frame is
         # the potential argument to FINISH
         descr = op.getdescr()
-        fail_descr = rgc.cast_instance_to_gcref(descr)
+        fail_descr = cast_instance_to_gcref(descr)
         # we know it does not move, but well
-        fail_descr = rgc._make_sure_does_not_move(fail_descr)
-        fail_descr = rgc.cast_gcref_to_int(fail_descr)
+        rgc._make_sure_does_not_move(fail_descr)
+        fail_descr = rffi.cast(lltype.Signed, fail_descr)
         if op.numargs() == 1:
             loc = self.make_sure_var_in_reg(op.getarg(0))
             locs = [loc, imm(fail_descr)]
diff --git a/rpython/jit/backend/llsupport/assembler.py b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -182,6 +182,8 @@
                 break
         exc = guardtok.exc
         target = self.failure_recovery_code[exc + 2 * withfloats]
+        fail_descr = cast_instance_to_gcref(guardtok.faildescr)
+        fail_descr = rffi.cast(lltype.Signed, fail_descr)
         base_ofs = self.cpu.get_baseofs_of_frame_field()
         positions = [0] * len(guardtok.fail_locs)
         for i, loc in enumerate(guardtok.fail_locs):
@@ -204,8 +206,6 @@
         guardtok.faildescr.rd_locs = positions
         # we want the descr to keep alive
         guardtok.faildescr.rd_loop_token = self.current_clt
-        fail_descr = rgc.cast_instance_to_gcref(guardtok.faildescr)
-        fail_descr = rgc._make_sure_does_not_move(fail_descr)
         return fail_descr, target
 
     def call_assembler(self, op, guard_op, argloc, vloc, result_loc, tmploc):
@@ -236,8 +236,9 @@
             else:
                 raise AssertionError(kind)
 
-        gcref = rgc.cast_instance_to_gcref(value)
-        value = rgc._make_sure_does_not_move(gcref)
+        gcref = cast_instance_to_gcref(value)
+        rgc._make_sure_does_not_move(gcref)
+        value = rffi.cast(lltype.Signed, gcref)
         je_location = self._call_assembler_check_descr(value, tmploc)
         #
         # Path A: use assembler_helper_adr
diff --git a/rpython/jit/backend/llsupport/gc.py b/rpython/jit/backend/llsupport/gc.py
--- a/rpython/jit/backend/llsupport/gc.py
+++ b/rpython/jit/backend/llsupport/gc.py
@@ -5,8 +5,7 @@
 from rpython.rtyper.lltypesystem import lltype, llmemory, rffi, rclass, rstr
 from rpython.rtyper.lltypesystem import llgroup
 from rpython.rtyper.lltypesystem.lloperation import llop
-from rpython.rtyper.annlowlevel import (llhelper, cast_instance_to_gcref,
-                                        cast_base_ptr_to_instance)
+from rpython.rtyper.annlowlevel import llhelper, cast_instance_to_gcref
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 from rpython.jit.codewriter import heaptracker
 from rpython.jit.metainterp.history import ConstPtr, AbstractDescr
@@ -97,17 +96,12 @@
         for i in range(op.numargs()):
             v = op.getarg(i)
             if isinstance(v, ConstPtr) and bool(v.value):
-                v.imm_value = rgc._make_sure_does_not_move(v.value)
-                # XXX: fix for stm, record imm_values and unregister
-                # them again (below too):
-                gcrefs_output_list.append(v.value)
-
-        if self.stm:
-            return # for descr, we do it on the fly in assembler.py
+                p = v.value
+                rgc._make_sure_does_not_move(p)
+                gcrefs_output_list.append(p)
         if op.is_guard() or op.getopnum() == rop.FINISH:
             # the only ops with descrs that get recorded in a trace
-            descr = op.getdescr()
-            llref = rgc.cast_instance_to_gcref(descr)
+            llref = cast_instance_to_gcref(op.getdescr())
             rgc._make_sure_does_not_move(llref)
             gcrefs_output_list.append(llref)
 
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -341,8 +341,8 @@
         self._store_and_reset_exception(self.mc, eax)
         ofs = self.cpu.get_ofs_of_frame_field('jf_guard_exc')
         self.mc.MOV_br(ofs, eax.value)
-        propagate_exception_descr = rgc._make_sure_does_not_move(
-                rgc.cast_instance_to_gcref(self.cpu.propagate_exception_descr))
+        propagate_exception_descr = rffi.cast(lltype.Signed,
+                  cast_instance_to_gcref(self.cpu.propagate_exception_descr))
         ofs = self.cpu.get_ofs_of_frame_field('jf_descr')
         self.mc.MOV(RawEbpLoc(ofs), imm(propagate_exception_descr))
         #
@@ -2298,10 +2298,10 @@
             cb.emit()
 
     def _store_force_index(self, guard_op):
-        faildescr = rgc._make_sure_does_not_move(
-            rgc.cast_instance_to_gcref(guard_op.getdescr()))
+        faildescr = guard_op.getdescr()
         ofs = self.cpu.get_ofs_of_frame_field('jf_force_descr')
-        self.mc.MOV(raw_stack(ofs), imm(faildescr))
+        self.mc.MOV(raw_stack(ofs), imm(rffi.cast(lltype.Signed,
+                                 cast_instance_to_gcref(faildescr))))
 
     def _emit_guard_not_forced(self, guard_token):
         ofs = self.cpu.get_ofs_of_frame_field('jf_descr')
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
@@ -369,9 +369,10 @@
         # the frame is in ebp, but we have to point where in the frame is
         # the potential argument to FINISH
         descr = op.getdescr()
-        fail_descr = rgc.cast_instance_to_gcref(descr)
+        fail_descr = cast_instance_to_gcref(descr)
         # we know it does not move, but well
-        fail_descr = rgc._make_sure_does_not_move(fail_descr)
+        rgc._make_sure_does_not_move(fail_descr)
+        fail_descr = rffi.cast(lltype.Signed, fail_descr)
         if op.numargs() == 1:
             loc = self.make_sure_var_in_reg(op.getarg(0))
             locs = [loc, imm(fail_descr)]


More information about the pypy-commit mailing list