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

Reply via email to