Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r60137:866412438b36
Date: 2013-01-17 19:38 +0200
http://bitbucket.org/pypy/pypy/changeset/866412438b36/

Log:    frontend fixes

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -22,6 +22,7 @@
         # We need to clone the list of operations because the
         # front-end will mutate them under our feet again.  We also
         # need to make sure things get freed.
+        self.alldescrs = []
         def mapping(box, _cache={}):
             if isinstance(box, Const) or box is None:
                 return box
@@ -35,6 +36,8 @@
         self.operations = []
         for op in operations:
             if op.getdescr() is not None:
+                # XXX is this hack needed any more?
+                self.alldescrs.append(op.getdescr())
                 newdescr = WeakrefDescr(op.getdescr())
             else:
                 newdescr = None
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
@@ -368,7 +368,6 @@
 
 def send_bridge_to_backend(jitdriver_sd, metainterp_sd, faildescr, inputargs,
                            operations, original_loop_token):
-    n = metainterp_sd.cpu.get_fail_descr_number(faildescr)
     if not we_are_translated():
         show_procedures(metainterp_sd)
         seen = dict.fromkeys(inputargs)
@@ -377,7 +376,7 @@
         hooks = metainterp_sd.warmrunnerdesc.hooks
         debug_info = JitDebugInfo(jitdriver_sd, metainterp_sd.logger_ops,
                                   original_loop_token, operations, 'bridge',
-                                  fail_descr_no=n)
+                                  fail_descr=faildescr)
         hooks.before_compile_bridge(debug_info)
     else:
         hooks = None
@@ -403,7 +402,8 @@
         ops_offset = asminfo.ops_offset
     else:
         ops_offset = None
-    metainterp_sd.logger_ops.log_bridge(inputargs, operations, n, ops_offset)
+    metainterp_sd.logger_ops.log_bridge(inputargs, operations, faildescr,
+                                        ops_offset)
     #
     #if metainterp_sd.warmrunnerdesc is not None:    # for tests
     #    metainterp_sd.warmrunnerdesc.memory_manager.keep_loop_alive(
diff --git a/pypy/jit/metainterp/logger.py b/pypy/jit/metainterp/logger.py
--- a/pypy/jit/metainterp/logger.py
+++ b/pypy/jit/metainterp/logger.py
@@ -1,7 +1,7 @@
 import os
 from pypy.rlib.debug import have_debug_prints
 from pypy.rlib.debug import debug_start, debug_stop, debug_print
-from pypy.rlib.objectmodel import we_are_translated
+from pypy.rlib.objectmodel import we_are_translated, compute_unique_id
 from pypy.rpython.lltypesystem import lltype, llmemory, rffi
 from pypy.jit.metainterp.resoperation import rop
 from pypy.jit.metainterp.history import Const, ConstInt, Box, \
@@ -30,7 +30,9 @@
             debug_stop("jit-log-opt-loop")
         return logops
 
-    def log_bridge(self, inputargs, operations, number=-1, ops_offset=None):
+    def log_bridge(self, inputargs, operations, descr=None, ops_offset=None):
+        # XXX great idea to pass number = -1 or -2 to mean stuff
+        return
         if number == -1:
             debug_start("jit-log-noopt-bridge")
             logops = self._log_operations(inputargs, operations, ops_offset)
@@ -131,8 +133,8 @@
         if op.getdescr() is not None:
             descr = op.getdescr()
             if is_guard and self.guard_number:
-                index = self.metainterp_sd.cpu.get_fail_descr_number(descr)
-                r = "<Guard%d>" % index
+                hash = compute_unique_id(descr)
+                r = "<Guard%d>" % hash
             else:
                 r = self.repr_of_descr(descr)
             if args:
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -1470,11 +1470,8 @@
                     history.VOID: 'void'}[jd.result_type]
             tokens = getattr(self, 'loop_tokens_done_with_this_frame_%s' % 
name)
             jd.portal_finishtoken = tokens[0].finishdescr
-            num = self.cpu.get_fail_descr_number(tokens[0].finishdescr)
-            setattr(self.cpu, 'done_with_this_frame_%s_v' % name, num)
             jd.propagate_exc_descr = exc_descr
         #
-        num = self.cpu.get_fail_descr_number(exc_descr)
         self.cpu.propagate_exc_descr = exc_descr
         #
         self.globaldata = MetaInterpGlobalData(self)
diff --git a/pypy/jit/metainterp/warmspot.py b/pypy/jit/metainterp/warmspot.py
--- a/pypy/jit/metainterp/warmspot.py
+++ b/pypy/jit/metainterp/warmspot.py
@@ -653,7 +653,7 @@
         else:
             assert False
         (_, jd._PTR_ASSEMBLER_HELPER_FUNCTYPE) = self.cpu.ts.get_FuncType(
-            [lltype.Signed, llmemory.GCREF, llmemory.GCREF], ASMRESTYPE)
+            [llmemory.GCREF, llmemory.GCREF], ASMRESTYPE)
 
     def rewrite_can_enter_jits(self):
         sublists = {}
@@ -922,9 +922,7 @@
 
         vinfo = jd.virtualizable_info
 
-        def assembler_call_helper(failindex, deadframe, virtualizableref):
-            XXX # we got failindex, but the descr is not stored on the frame
-            # yet, it's our job
+        def assembler_call_helper(deadframe, virtualizableref):
             fail_descr = self.cpu.get_latest_descr(deadframe)
             if vinfo is not None:
                 xxx
diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -888,24 +888,24 @@
     logger - an instance of jit.metainterp.logger.LogOperations
     type - either 'loop', 'entry bridge' or 'bridge'
     looptoken - description of a loop
-    fail_descr_no - number of failing descr for bridges, -1 otherwise
+    fail_descr - fail descr or None
     asminfo - extra assembler information
     """
 
     asminfo = None
     def __init__(self, jitdriver_sd, logger, looptoken, operations, type,
-                 greenkey=None, fail_descr_no=-1):
+                 greenkey=None, fail_descr=None):
         self.jitdriver_sd = jitdriver_sd
         self.logger = logger
         self.looptoken = looptoken
         self.operations = operations
         self.type = type
         if type == 'bridge':
-            assert fail_descr_no != -1
+            assert fail_descr is not None
         else:
             assert greenkey is not None
         self.greenkey = greenkey
-        self.fail_descr_no = fail_descr_no
+        self.fail_descr = fail_descr
 
     def get_jitdriver(self):
         """ Return where the jitdriver on which the jitting started
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to