[pypy-svn] r78484 - in pypy/trunk/pypy/jit: backend backend/llgraph backend/x86 metainterp
fijal at codespeak.net
fijal at codespeak.net
Fri Oct 29 20:50:52 CEST 2010
Author: fijal
Date: Fri Oct 29 20:50:49 2010
New Revision: 78484
Modified:
pypy/trunk/pypy/jit/backend/llgraph/runner.py
pypy/trunk/pypy/jit/backend/model.py
pypy/trunk/pypy/jit/backend/x86/assembler.py
pypy/trunk/pypy/jit/backend/x86/runner.py
pypy/trunk/pypy/jit/metainterp/compile.py
Log:
Introduce log=bool flag on compile_loop and compile_bridge. The idea is that
if we want to log something about the loop (like say number of times it was
called), we want to skip loops that are not logged to normal log.
Modified: pypy/trunk/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/llgraph/runner.py Fri Oct 29 20:50:49 2010
@@ -118,13 +118,13 @@
self._descrs[key] = descr
return descr
- def compile_bridge(self, faildescr, inputargs, operations):
+ def compile_bridge(self, faildescr, inputargs, operations, log=True):
c = llimpl.compile_start()
self._compile_loop_or_bridge(c, inputargs, operations)
old, oldindex = faildescr._compiled_fail
llimpl.compile_redirect_fail(old, oldindex, c)
- def compile_loop(self, inputargs, operations, loopdescr):
+ def compile_loop(self, inputargs, operations, loopdescr, log=True):
"""In a real assembler backend, this should assemble the given
list of operations. Here we just generate a similar CompiledLoop
instance. The code here is RPython, whereas the code in llimpl
Modified: pypy/trunk/pypy/jit/backend/model.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/model.py (original)
+++ pypy/trunk/pypy/jit/backend/model.py Fri Oct 29 20:50:49 2010
@@ -33,14 +33,14 @@
pass
- def compile_loop(self, inputargs, operations, looptoken):
+ def compile_loop(self, inputargs, operations, looptoken, log=True):
"""Assemble the given loop.
Extra attributes should be put in the LoopToken to
point to the compiled loop in assembler.
"""
raise NotImplementedError
- def compile_bridge(self, faildescr, inputargs, operations):
+ def compile_bridge(self, faildescr, inputargs, operations, log=True):
"""Assemble the bridge.
The FailDescr is the descr of the original guard that failed.
"""
Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py Fri Oct 29 20:50:49 2010
@@ -295,7 +295,7 @@
self.mc.RET()
self.mc.done()
- def assemble_loop(self, inputargs, operations, looptoken):
+ def assemble_loop(self, inputargs, operations, looptoken, log):
"""adds the following attributes to looptoken:
_x86_loop_code (an integer giving an address)
_x86_bootstrap_code (an integer giving an address)
@@ -310,10 +310,11 @@
self.setup()
funcname = self._find_debug_merge_point(operations)
-
+ if log:
+ self._register_counter()
+ operations = self._inject_debugging_code(operations)
regalloc = RegAlloc(self, self.cpu.translate_support_code)
- operations = self._inject_debugging_code(operations)
arglocs = regalloc.prepare_loop(inputargs, operations, looptoken)
looptoken._x86_arglocs = arglocs
@@ -340,13 +341,16 @@
self.mc.end_function()
self.write_pending_failure_recoveries()
- def assemble_bridge(self, faildescr, inputargs, operations):
+ def assemble_bridge(self, faildescr, inputargs, operations, log):
if not we_are_translated():
# Arguments should be unique
assert len(set(inputargs)) == len(inputargs)
self.setup()
funcname = self._find_debug_merge_point(operations)
+ if log:
+ self._register_counter()
+ operations = self._inject_debugging_code(operations)
arglocs = self.rebuild_faillocs_from_descr(
faildescr._x86_failure_recovery_bytecode)
@@ -401,12 +405,14 @@
else:
funcname = "<loop %d>" % len(self.loop_run_counters)
# invent the counter, so we don't get too confused
+ return funcname
+
+ def _register_counter(self):
if self._debug:
struct = lltype.malloc(DEBUG_COUNTER, flavor='raw',
track_allocation=False) # known to leak
struct.i = 0
self.loop_run_counters.append((len(self.loop_run_counters), struct))
- return funcname
def patch_jump_for_descr(self, faildescr, adr_new_target):
adr_jump_offset = faildescr._x86_adr_jump_offset
Modified: pypy/trunk/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/runner.py Fri Oct 29 20:50:49 2010
@@ -49,11 +49,13 @@
self.assembler.finish_once()
self.profile_agent.shutdown()
- def compile_loop(self, inputargs, operations, looptoken):
- self.assembler.assemble_loop(inputargs, operations, looptoken)
-
- def compile_bridge(self, faildescr, inputargs, operations):
- self.assembler.assemble_bridge(faildescr, inputargs, operations)
+ def compile_loop(self, inputargs, operations, looptoken, log=True):
+ self.assembler.assemble_loop(inputargs, operations, looptoken,
+ log=log)
+
+ def compile_bridge(self, faildescr, inputargs, operations, log=True):
+ self.assembler.assemble_bridge(faildescr, inputargs, operations,
+ log=log)
def set_future_value_int(self, index, intvalue):
self.assembler.fail_boxes_int.setitem(index, intvalue)
Modified: pypy/trunk/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/compile.py (original)
+++ pypy/trunk/pypy/jit/metainterp/compile.py Fri Oct 29 20:50:49 2010
@@ -599,5 +599,5 @@
ResOperation(rop.FINISH, finishargs, None, descr=jd.portal_finishtoken)
]
operations[1].setfailargs([])
- cpu.compile_loop(inputargs, operations, loop_token)
+ cpu.compile_loop(inputargs, operations, loop_token, log=False)
return loop_token
More information about the Pypy-commit
mailing list