Author: fijal Branch: jit-leaner-frontend Changeset: r82970:33be2ad6b87a Date: 2016-03-11 15:41 +0200 http://bitbucket.org/pypy/pypy/changeset/33be2ad6b87a/
Log: use a correct dict diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py --- a/rpython/jit/metainterp/opencoder.py +++ b/rpython/jit/metainterp/opencoder.py @@ -13,6 +13,7 @@ from rpython.rlib.rarithmetic import intmask from rpython.rlib.objectmodel import we_are_translated from rpython.rtyper.lltypesystem import rffi, lltype, llmemory +from rpython.jit.metainterp.typesystem import llhelper TAGINT, TAGCONSTPTR, TAGCONSTOTHER, TAGBOX = range(4) TAGMASK = 0x3 @@ -177,9 +178,13 @@ def __init__(self, inputargs): self._ops = [rffi.cast(rffi.SHORT, -15)] * 30000 self._pos = 0 + self._snapshot_lgt = 0 + self._consts_bigint = 0 + self._consts_float = 0 + self._consts_ptr = 0 self._descrs = [None] - self._refs = [] - self._refs_dict = {} + self._refs = [lltype.nullptr(llmemory.GCREF.TO)] + self._refs_dict = llhelper.new_ref_dict_3() self._bigints = [] self._bigints_dict = {} self._floats = [] @@ -199,9 +204,18 @@ self._pos += 1 def done(self): + from rpython.rlib.debug import debug_start, debug_stop, debug_print + self._bigints_dict = {} - self._refs_dict = {} + self._refs_dict = llhelper.new_ref_dict_3() self._floats_dict = {} + debug_start("jit-trace-done") + debug_print("trace length: " + str(self._pos)) + debug_print(" snapshots: " + str(self._snapshot_lgt)) + debug_print(" bigint consts: " + str(self._consts_bigint) + " " + str(len(self._bigints))) + debug_print(" float consts: " + str(self._consts_float) + " " + str(len(self._floats))) + debug_print(" ref consts: " + str(self._consts_ptr) + " " + str(len(self._refs))) + debug_stop("jit-trace-done") return 0 # completely different than TraceIter.done, but we have to # share the base class @@ -225,6 +239,7 @@ SMALL_INT_START <= box.getint() < SMALL_INT_STOP): return tag(TAGINT, box.getint()) elif isinstance(box, ConstInt): + self._consts_bigint += 1 if not isinstance(box.getint(), int): # symbolics, for tests, don't worry about caching v = len(self._bigints) << 1 @@ -237,6 +252,7 @@ self._bigints.append(box.getint()) return tag(TAGCONSTOTHER, v) elif isinstance(box, ConstFloat): + self._consts_float += 1 v = self._floats_dict.get(box.getfloat(), -1) if v == -1: v = (len(self._floats) << 1) | 1 @@ -244,7 +260,10 @@ self._floats.append(box.getfloat()) return tag(TAGCONSTOTHER, v) else: + self._consts_ptr += 1 assert isinstance(box, ConstPtr) + if not box.getref_base(): + return tag(TAGCONSTPTR, 0) addr = llmemory.cast_ptr_to_adr(box.getref_base()) v = self._refs_dict.get(addr, -1) if v == -1: @@ -341,6 +360,7 @@ def patch_position_to_current(self, p): prev = self._ops[p] assert rffi.cast(lltype.Signed, prev) == -1 + self._snapshot_lgt += self._pos - p self._ops[p] = rffi.cast(rffi.SHORT, self._pos - p) def check_snapshot_jitcode_pc(self, jitcode, pc, resumedata_pos): diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py --- a/rpython/jit/metainterp/pyjitpl.py +++ b/rpython/jit/metainterp/pyjitpl.py @@ -2265,6 +2265,7 @@ warmrunnerstate = self.jitdriver_sd.warmstate if self.history.length() > warmrunnerstate.trace_limit: jd_sd, greenkey_of_huge_function = self.find_biggest_function() + self.history.trace.done() self.staticdata.stats.record_aborted(greenkey_of_huge_function) self.portal_trace_positions = None if greenkey_of_huge_function is not None: @@ -2566,6 +2567,8 @@ try_disabling_unroll=False, exported_state=None): num_green_args = self.jitdriver_sd.num_green_args greenkey = original_boxes[:num_green_args] + import pdb + pdb.set_trace() self.history.trace.done() if not self.partial_trace: ptoken = self.get_procedure_token(greenkey) diff --git a/rpython/jit/metainterp/typesystem.py b/rpython/jit/metainterp/typesystem.py --- a/rpython/jit/metainterp/typesystem.py +++ b/rpython/jit/metainterp/typesystem.py @@ -109,6 +109,8 @@ return r_dict(rd_eq, rd_hash) def new_ref_dict_2(self): return r_dict(rd_eq, rd_hash) + def new_ref_dict_3(self): + return r_dict(rd_eq, rd_hash) def cast_vtable_to_hashable(self, cpu, ptr): adr = llmemory.cast_ptr_to_adr(ptr) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit