Author: Armin Rigo <ar...@tunes.org> Branch: remove-globals-in-jit Changeset: r58891:eb15703eab8c Date: 2012-11-14 16:12 +0100 http://bitbucket.org/pypy/pypy/changeset/eb15703eab8c/
Log: Starting to fix the front-end diff --git a/pypy/jit/metainterp/blackhole.py b/pypy/jit/metainterp/blackhole.py --- a/pypy/jit/metainterp/blackhole.py +++ b/pypy/jit/metainterp/blackhole.py @@ -1545,7 +1545,7 @@ # We will continue to loop in _run_forever() from the parent level. return blackholeinterp, lle -def resume_in_blackhole(metainterp_sd, jitdriver_sd, resumedescr, +def resume_in_blackhole(metainterp_sd, jitdriver_sd, resumedescr, deadframe, all_virtuals=None): from pypy.jit.metainterp.resume import blackhole_from_resumedata #debug_start('jit-blackhole') @@ -1553,6 +1553,7 @@ metainterp_sd.blackholeinterpbuilder, jitdriver_sd, resumedescr, + deadframe, all_virtuals) if isinstance(resumedescr, ResumeAtPositionDescr): dont_change_position = True diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py --- a/pypy/jit/metainterp/compile.py +++ b/pypy/jit/metainterp/compile.py @@ -526,7 +526,7 @@ assert cnt > self.CNT_BASE_MASK self._counter = cnt | i - def handle_fail(self, metainterp_sd, jitdriver_sd): + def handle_fail(self, deadframe, metainterp_sd, jitdriver_sd): if self.must_compile(metainterp_sd, jitdriver_sd): self.start_compiling() try: @@ -536,7 +536,7 @@ self.done_compiling() else: from pypy.jit.metainterp.blackhole import resume_in_blackhole - resume_in_blackhole(metainterp_sd, jitdriver_sd, self) + resume_in_blackhole(metainterp_sd, jitdriver_sd, self, deadframe) assert 0, "unreachable" def _trace_and_compile_from_bridge(self, metainterp_sd, jitdriver_sd): diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py --- a/pypy/jit/metainterp/optimizeopt/test/test_util.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py @@ -87,7 +87,7 @@ node_vtable2 = lltype.malloc(OBJECT_VTABLE, immortal=True) node_vtable2.name = rclass.alloc_array_name('node2') node_vtable_adr2 = llmemory.cast_ptr_to_adr(node_vtable2) - cpu = runner.LLtypeCPU(None) + cpu = runner.LLGraphCPU(None) NODE = lltype.GcForwardReference() NODE.become(lltype.GcStruct('NODE', ('parent', OBJECT), diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py --- a/pypy/jit/metainterp/resume.py +++ b/pypy/jit/metainterp/resume.py @@ -770,9 +770,6 @@ value = self.decode_float(self.cur_numb.nums[index]) self.write_a_float(register_index, value) - def done(self): - self.cpu.clear_latest_values(self.cpu.get_latest_value_count()) - # ---------- when resuming for pyjitpl.py, make boxes ---------- def rebuild_from_resumedata(metainterp, storage, virtualizable_info, @@ -791,7 +788,6 @@ if frameinfo is None: break metainterp.framestack.reverse() - resumereader.done() return resumereader.liveboxes, virtualizable_boxes, virtualref_boxes class ResumeDataBoxReader(AbstractResumeDataReader): @@ -1005,13 +1001,13 @@ # ---------- when resuming for blackholing, get direct values ---------- def blackhole_from_resumedata(blackholeinterpbuilder, jitdriver_sd, storage, - all_virtuals=None): + deadframe, all_virtuals=None): # The initialization is stack-critical code: it must not be interrupted by # StackOverflow, otherwise the jit_virtual_refs are left in a dangling state. rstack._stack_criticalcode_start() try: resumereader = ResumeDataDirectReader(blackholeinterpbuilder.metainterp_sd, - storage, all_virtuals) + storage, deadframe, all_virtuals) vinfo = jitdriver_sd.virtualizable_info ginfo = jitdriver_sd.greenfield_info vrefinfo = blackholeinterpbuilder.metainterp_sd.virtualref_info @@ -1044,7 +1040,6 @@ frameinfo = frameinfo.prev if frameinfo is None: break - resumereader.done() return firstbh def force_from_resumedata(metainterp_sd, storage, vinfo, ginfo): @@ -1062,8 +1057,9 @@ # 1: in handle_async_forcing # 2: resuming from the GUARD_NOT_FORCED - def __init__(self, metainterp_sd, storage, all_virtuals=None): + def __init__(self, metainterp_sd, storage, deadframe, all_virtuals=None): self._init(metainterp_sd.cpu, storage) + self.deadframe = deadframe self.callinfocollection = metainterp_sd.callinfocollection if all_virtuals is None: # common case self._prepare(storage) @@ -1243,7 +1239,7 @@ assert tag == TAGBOX if num < 0: num += self.cpu.get_latest_value_count() - return self.cpu.get_latest_value_int(num) + return self.cpu.get_latest_value_int(self.deadframe, num) def decode_ref(self, tagged): num, tag = untag(tagged) diff --git a/pypy/jit/metainterp/test/support.py b/pypy/jit/metainterp/test/support.py --- a/pypy/jit/metainterp/test/support.py +++ b/pypy/jit/metainterp/test/support.py @@ -141,14 +141,15 @@ for i in range(len(args) - num_green_args): x = args[num_green_args + i] args1.append(unspecialize_value(x)) - faildescr = cpu.execute_token(procedure_token, *args1) + deadframe = cpu.execute_token(procedure_token, *args1) + faildescr = cpu.get_latest_descr(deadframe) assert faildescr.__class__.__name__.startswith('DoneWithThisFrameDescr') if metainterp.jitdriver_sd.result_type == history.INT: - return cpu.get_latest_value_int(0) + return cpu.get_latest_value_int(deadframe, 0) elif metainterp.jitdriver_sd.result_type == history.REF: - return cpu.get_latest_value_ref(0) + return cpu.get_latest_value_ref(deadframe, 0) elif metainterp.jitdriver_sd.result_type == history.FLOAT: - return cpu.get_latest_value_float(0) + return cpu.get_latest_value_float(deadframe, 0) else: return None @@ -233,7 +234,7 @@ class LLJitMixin(JitMixin): type_system = 'lltype' - CPUClass = runner.LLtypeCPU + CPUClass = runner.LLGraphCPU @staticmethod def Ptr(T): diff --git a/pypy/jit/metainterp/warmstate.py b/pypy/jit/metainterp/warmstate.py --- a/pypy/jit/metainterp/warmstate.py +++ b/pypy/jit/metainterp/warmstate.py @@ -299,11 +299,12 @@ else: assert 0, kind func_execute_token = self.cpu.make_execute_token(*ARGS) + cpu = self.cpu def execute_assembler(loop_token, *args): # Call the backend to run the 'looptoken' with the given # input args. - fail_descr = func_execute_token(loop_token, *args) + deadframe = func_execute_token(loop_token, *args) # # If we have a virtualizable, we have to reset its # 'vable_token' field afterwards @@ -317,7 +318,8 @@ warmrunnerdesc.memory_manager.keep_loop_alive(loop_token) # # Handle the failure - fail_descr.handle_fail(metainterp_sd, jitdriver_sd) + fail_descr = cpu.get_latest_descr(deadframe) + fail_descr.handle_fail(deadframe, metainterp_sd, jitdriver_sd) # assert 0, "should have raised" _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit