[pypy-svn] r67891 - pypy/trunk/pypy/jit/metainterp

arigo at codespeak.net arigo at codespeak.net
Fri Sep 25 16:26:14 CEST 2009


Author: arigo
Date: Fri Sep 25 16:26:13 2009
New Revision: 67891

Modified:
   pypy/trunk/pypy/jit/metainterp/compile.py
   pypy/trunk/pypy/jit/metainterp/logger.py
   pypy/trunk/pypy/jit/metainterp/optimize.py
   pypy/trunk/pypy/jit/metainterp/pyjitpl.py
Log:
(pedronis, arigo)
Fix the logging of operations.


Modified: pypy/trunk/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/compile.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/compile.py	Fri Sep 25 16:26:13 2009
@@ -14,7 +14,7 @@
 from pypy.jit.metainterp.optimizeutil import InvalidLoop
 from pypy.rlib.debug import debug_print
 
-def show_loop(metainterp, loop=None, error=None):
+def show_loop(metainterp_sd, loop=None, error=None):
     # debugging
     if option.view or option.viewloops:
         if error:
@@ -27,7 +27,7 @@
             extraloops = []
         else:
             extraloops = [loop]
-        metainterp.staticdata.stats.view(errmsg=errmsg, extraloops=extraloops)
+        metainterp_sd.stats.view(errmsg=errmsg, extraloops=extraloops)
 
 def create_empty_loop(metainterp):
     name = metainterp.staticdata.stats.name_for_new_loop()
@@ -61,7 +61,7 @@
         if DEBUG > 0:
             debug_print("reusing old loop")
         return old_loop_token
-    executable_token = send_loop_to_backend(metainterp, loop, "loop")
+    executable_token = send_loop_to_backend(metainterp_sd, loop, "loop")
     loop_token = LoopToken()
     loop_token.specnodes = loop.specnodes
     loop_token.executable_token = executable_token
@@ -70,18 +70,19 @@
     old_loop_tokens.append(loop_token)
     return loop_token
 
-def send_loop_to_backend(metainterp, loop, type):    
-    metainterp.staticdata.profiler.start_backend()
+def send_loop_to_backend(metainterp_sd, loop, type):
+    metainterp_sd.options.logger_ops.log_loop(loop.inputargs, loop.operations)
+    metainterp_sd.profiler.start_backend()
     if not we_are_translated():
-        show_loop(metainterp, loop)
+        show_loop(metainterp_sd, loop)
         loop.check_consistency()
-    executable_token = metainterp.cpu.compile_loop(loop.inputargs,
-                                                   loop.operations)
-    metainterp.staticdata.profiler.end_backend()
-    metainterp.staticdata.stats.add_new_loop(loop)
+    executable_token = metainterp_sd.cpu.compile_loop(loop.inputargs,
+                                                      loop.operations)
+    metainterp_sd.profiler.end_backend()
+    metainterp_sd.stats.add_new_loop(loop)
     if not we_are_translated():
         if type != "entry bridge":
-            metainterp.staticdata.stats.compiled()
+            metainterp_sd.stats.compiled()
         else:
             loop._ignore_during_counting = True
         log.info("compiled new " + type)
@@ -91,16 +92,17 @@
             debug_print("compiled new " + type)
     return executable_token
 
-def send_bridge_to_backend(metainterp, faildescr, inputargs, operations):
-    metainterp.staticdata.profiler.start_backend()
+def send_bridge_to_backend(metainterp_sd, faildescr, inputargs, operations):
+    metainterp_sd.options.logger_ops.log_loop(inputargs, operations)
+    metainterp_sd.profiler.start_backend()
     if not we_are_translated():
-        show_loop(metainterp)
+        show_loop(metainterp_sd)
         TreeLoop.check_consistency_of(inputargs, operations)
         pass
-    metainterp.cpu.compile_bridge(faildescr, inputargs, operations)        
-    metainterp.staticdata.profiler.end_backend()
+    metainterp_sd.cpu.compile_bridge(faildescr, inputargs, operations)        
+    metainterp_sd.profiler.end_backend()
     if not we_are_translated():
-        metainterp.staticdata.stats.compiled()
+        metainterp_sd.stats.compiled()
         log.info("compiled new bridge")
     else:
         from pypy.jit.metainterp.pyjitpl import DEBUG
@@ -247,7 +249,8 @@
         fail_args = guard_op.suboperations[-1].args
         if not we_are_translated():
             guard_op._debug_suboperations = new_loop.operations
-        send_bridge_to_backend(metainterp, self, fail_args, new_loop.operations)
+        send_bridge_to_backend(metainterp.staticdata, self, fail_args,
+                               new_loop.operations)
 
 class ResumeFromInterpDescr(ResumeDescr):
     def __init__(self, original_greenkey, redkey):
@@ -263,8 +266,8 @@
         metainterp.history.inputargs = self.redkey
         new_loop.greenkey = self.original_greenkey
         new_loop.inputargs = self.redkey
-        executable_token = send_loop_to_backend(metainterp, new_loop,
-                                                            "entry bridge")
+        executable_token = send_loop_to_backend(metainterp_sd, new_loop,
+                                                "entry bridge")
         # send the new_loop to warmspot.py, to be called directly the next time
         metainterp_sd.state.attach_unoptimized_bridge_from_interp(
             self.original_greenkey,
@@ -281,6 +284,7 @@
     # Attempt to use optimize_bridge().  This may return None in case
     # it does not work -- i.e. none of the existing old_loop_tokens match.
     new_loop = create_empty_loop(metainterp)
+    new_loop.inputargs = metainterp.history.inputargs
     new_loop.operations = metainterp.history.operations
     metainterp_sd = metainterp.staticdata
     options = metainterp_sd.options

Modified: pypy/trunk/pypy/jit/metainterp/logger.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/logger.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/logger.py	Fri Sep 25 16:26:13 2009
@@ -25,8 +25,8 @@
             return None
         return self.log_stream
 
-    def log_loop(self, loop):
-        self.log_operations(loop.inputargs, loop.operations, {})
+    def log_loop(self, inputargs, operations):
+        self.log_operations(inputargs, operations, {})
 
     def repr_of_descr(self, descr):
         return descr.repr_of_descr()

Modified: pypy/trunk/pypy/jit/metainterp/optimize.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimize.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/optimize.py	Fri Sep 25 16:26:13 2009
@@ -10,8 +10,7 @@
             return old_loop_tokens[0]
         else:
             return None
-    if options.logger_noopt is not None:
-        options.logger_noopt.log_loop(loop)
+    options.logger_noopt.log_loop(loop.inputargs, loop.operations)
     finder = PerfectSpecializationFinder(cpu)
     finder.find_nodes_loop(loop)
     for old_loop_token in old_loop_tokens:
@@ -28,8 +27,7 @@
 def optimize_bridge(options, old_loop_tokens, bridge, cpu):
     if not options.specialize:         # for tests only
         return old_loop_tokens[0]
-    if options.logger_noopt is not None:
-        options.logger_noopt.log_loop(bridge)
+    options.logger_noopt.log_loop(bridge.inputargs, bridge.operations)
     finder = BridgeSpecializationFinder(cpu)
     finder.find_nodes_bridge(bridge)
     for old_loop_token in old_loop_tokens:

Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py	Fri Sep 25 16:26:13 2009
@@ -1573,11 +1573,13 @@
             suboperations = guard_op.suboperations
             assert suboperations[-1] is guard_failure
             self.history = history.History(self.cpu)
+            self.history.inputargs = guard_failure.args   # xxx unhappy
             self.staticdata.profiler.start_tracing()
         else:
             self.staticdata.profiler.start_blackhole()
             self.history = None   # this means that is_blackholing() is true
         self.rebuild_state_after_failure(resumedescr, guard_failure.args)
+                                                      # xxx unhappy
         return resumedescr
 
     def initialize_virtualizable(self, original_boxes):



More information about the Pypy-commit mailing list