Author: Maciej Fijalkowski <[email protected]>
Branch: even-more-jit-hooks
Changeset: r55903:64fb9d6766c1
Date: 2012-07-03 19:21 +0200
http://bitbucket.org/pypy/pypy/changeset/64fb9d6766c1/
Log: general progress
diff --git a/pypy/jit/backend/model.py b/pypy/jit/backend/model.py
--- a/pypy/jit/backend/model.py
+++ b/pypy/jit/backend/model.py
@@ -65,9 +65,10 @@
raise NotImplementedError
def set_debug(self, value):
- """ Enable or disable debugging info. Does nothing by default
+ """ Enable or disable debugging info. Does nothing by default. Returns
+ the previous setting.
"""
- pass
+ return False
def compile_loop(self, inputargs, operations, looptoken, log=True,
name=''):
"""Assemble the given loop.
diff --git a/pypy/jit/backend/x86/assembler.py
b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -101,7 +101,9 @@
llmemory.cast_ptr_to_adr(ptrs))
def set_debug(self, v):
+ r = self._debug
self._debug = v
+ return r
def setup_once(self):
# the address of the function called by 'new'
diff --git a/pypy/jit/backend/x86/runner.py b/pypy/jit/backend/x86/runner.py
--- a/pypy/jit/backend/x86/runner.py
+++ b/pypy/jit/backend/x86/runner.py
@@ -45,6 +45,9 @@
self.profile_agent = profile_agent
+ def set_debug(self, flag):
+ return self.assembler.set_debug(flag)
+
def setup(self):
if self.opts is not None:
failargs_limit = self.opts.failargs_limit
diff --git a/pypy/jit/metainterp/test/test_jitiface.py
b/pypy/jit/metainterp/test/test_jitiface.py
--- a/pypy/jit/metainterp/test/test_jitiface.py
+++ b/pypy/jit/metainterp/test/test_jitiface.py
@@ -190,25 +190,32 @@
s+= 2
return s
- def main():
+ def main(b):
+ stats = jit_hooks.get_stats()
+ jit_hooks.stats_set_debug(stats, b)
loop(30)
- stats = jit_hooks.get_stats()
l = jit_hooks.stats_get_loop_run_times(stats)
- assert len(l) == 4
- # completely specific test that would fail each time
- # we change anything major. for now it's 4
- # (loop, bridge, 2 entry points)
- assert l[0].type == 'e'
- assert l[0].number == 0
- assert l[0].counter == 4
- assert l[1].type == 'l'
- assert l[1].counter == 4
- assert l[2].type == 'l'
- assert l[2].counter == 23
- assert l[3].type == 'b'
- assert l[3].number == 4
- assert l[3].counter == 11
- self.meta_interp(main, [], ProfilerClass=Profiler)
+ if b:
+ assert len(l) == 4
+ # completely specific test that would fail each time
+ # we change anything major. for now it's 4
+ # (loop, bridge, 2 entry points)
+ assert l[0].type == 'e'
+ assert l[0].number == 0
+ assert l[0].counter == 4
+ assert l[1].type == 'l'
+ assert l[1].counter == 4
+ assert l[2].type == 'l'
+ assert l[2].counter == 23
+ assert l[3].type == 'b'
+ assert l[3].number == 4
+ assert l[3].counter == 11
+ else:
+ assert len(l) == 0
+ self.meta_interp(main, [True], ProfilerClass=Profiler)
+ # this so far does not work because of the way setup_once is done,
+ # but fine, it's only about untranslated version anyway
+ #self.meta_interp(main, [False], ProfilerClass=Profiler)
class TestJitHookInterface(JitHookInterfaceTests, LLJitMixin):
diff --git a/pypy/rlib/jit_hooks.py b/pypy/rlib/jit_hooks.py
--- a/pypy/rlib/jit_hooks.py
+++ b/pypy/rlib/jit_hooks.py
@@ -13,7 +13,8 @@
_about_ = helper
def compute_result_annotation(self, *args):
- if isinstance(s_result, annmodel.SomeObject):
+ if (isinstance(s_result, annmodel.SomeObject) or
+ s_result is None):
return s_result
return annmodel.lltype_to_annotation(s_result)
@@ -131,6 +132,10 @@
ptr = lltype.cast_opaque_ptr(rclass.OBJECTPTR, llref)
return cast_base_ptr_to_instance(WarmRunnerDesc, ptr)
+@register_helper(annmodel.SomeBool())
+def stats_set_debug(llref, flag):
+ return _cast_to_warmrunnerdesc(llref).metainterp_sd.cpu.set_debug(flag)
+
@register_helper(annmodel.SomeFloat())
def stats_get_counter_value(llref, no):
return
_cast_to_warmrunnerdesc(llref).metainterp_sd.profiler.get_counter(no)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit