Author: Armin Rigo <[email protected]>
Branch: improve-vmprof-testing
Changeset: r86056:cde94224c375
Date: 2016-08-07 11:32 +0200
http://bitbucket.org/pypy/pypy/changeset/cde94224c375/
Log: Trying but failing to write a test
diff --git a/rpython/jit/backend/test/test_rvmprof.py
b/rpython/jit/backend/test/test_rvmprof.py
--- a/rpython/jit/backend/test/test_rvmprof.py
+++ b/rpython/jit/backend/test/test_rvmprof.py
@@ -111,3 +111,44 @@
cintf.vmprof_tl_stack.setraw(null)
self.meta_interp(main, [30], inline=True)
assert visited[:3] == [[(1, 12), (1, 8)], [(1, 12), (1, 8)], [(1, 12),
(1, 8)]]
+
+
+ def test_leaving_with_exception_in_blackhole(self):
+ visited, llfn, CodeObj, get_code_fn, get_name = self.misc
+ driver = jit.JitDriver(greens=['code'], reds=['c', 'i', 'n', 'codes'])
+
+ class MyExc(Exception):
+ def __init__(self, c):
+ self.c = c
+
+ @vmprof_execute_code("main", get_code_fn,
+ _hack_update_stack_untranslated=True)
+ def f(codes, code, n, c):
+ i = 0
+ while i < n:
+ driver.jit_merge_point(code=code, c=c, i=i, codes=codes, n=n)
+ if code.name == "main":
+ try:
+ f(codes, codes[1], 1, c)
+ except MyExc as e:
+ c = e.c
+ else:
+ llfn()
+ c -= 1
+ i += 1
+ jit.promote(c + 5) # failing guard
+ raise MyExc(c)
+
+ def main(n):
+ codes = [CodeObj("main"), CodeObj("not main")]
+ for code in codes:
+ register_code(code, get_name)
+ try:
+ f(codes, codes[0], n, 8)
+ except MyExc as e:
+ return e.c
+
+ null = lltype.nullptr(cintf.VMPROFSTACK)
+ cintf.vmprof_tl_stack.setraw(null)
+ self.meta_interp(main, [30], inline=True)
+ assert visited[:3] == [[(1, 12), (1, 8)], [(1, 12), (1, 8)], [(1, 12),
(1, 8)]]
diff --git a/rpython/jit/metainterp/blackhole.py
b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -375,6 +375,16 @@
target = ord(code[position+1]) | (ord(code[position+2])<<8)
self.position = target
return
+ if opcode == self.op_rvmprof_code:
+ import pdb;pdb.set_trace()
+ # do the 'jit_rvmprof_code(1)' for rvmprof, but then
+ # continue popping frames. Decode jit_rvmprof_code
+ # manually here.
+ from rpython.rlib.rvmprof import cintf
+ arg1 = self.registers_i[ord(code[position + 1])]
+ arg2 = self.registers_i[ord(code[position + 2])]
+ assert arg1 == 1
+ cintf.jit_rvmprof_code(arg1, arg2)
# no 'catch_exception' insn follows: just reraise
reraise(e)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit