[pypy-svn] r64918 - pypy/branch/pyjitpl5/pypy/jit/metainterp
fijal at codespeak.net
fijal at codespeak.net
Fri May 1 05:39:49 CEST 2009
Author: fijal
Date: Fri May 1 05:39:43 2009
New Revision: 64918
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py
Log:
incredibly messy hack to finish profiling. Enable profile by default for
translated version.
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/warmspot.py Fri May 1 05:39:43 2009
@@ -20,6 +20,7 @@
from pypy.jit.metainterp.pyjitpl import MetaInterpStaticData, MetaInterp
from pypy.jit.metainterp.policy import JitPolicy
from pypy.jit.metainterp.typesystem import LLTypeHelper, OOTypeHelper
+from pypy.jit.metainterp.jitprof import Profiler
# ____________________________________________________________
# Bootstrapping
@@ -33,6 +34,7 @@
translate_support_code=True,
listops=True,
optimizer=Optimizer,
+ profile=Profiler,
**kwds)
warmrunnerdesc.finish()
translator.warmrunnerdesc = warmrunnerdesc # for later debugging
@@ -122,6 +124,7 @@
self.metainterp_sd.generate_bytecode(policy, self.ts)
self.make_enter_function()
self.rewrite_can_enter_jit()
+ self.rewrite_entry_point()
self.metainterp_sd.num_green_args = self.num_green_args
self.metainterp_sd.state = self.state
@@ -438,6 +441,24 @@
origblock.recloseblock(Link([v_result], origportalgraph.returnblock))
checkgraph(origportalgraph)
+ def rewrite_entry_point(self):
+ def finish_profiler():
+ self.metainterp_sd.profiler.finish()
+
+ if self.cpu.translate_support_code:
+ entry_point = self.translator.graphs[0]
+ TP = lltype.Ptr(lltype.FuncType([], lltype.Void))
+ profiler_ptr = self.helper_func(TP, finish_profiler)
+ for block in entry_point.iterblocks():
+ for link in block.exits:
+ if link.target is entry_point.returnblock:
+ v = Variable()
+ v.concretetype = lltype.Void
+ newop = SpaceOperation('direct_call',
+ [Constant(profiler_ptr, TP)],
+ v)
+ block.operations.append(newop)
+ checkgraph(entry_point)
def decode_hp_hint_args(op):
# Returns (list-of-green-vars, list-of-red-vars) without Voids.
More information about the Pypy-commit
mailing list