Author: Armin Rigo <[email protected]>
Branch:
Changeset: r53176:dec7d899face
Date: 2012-03-04 11:24 +0000
http://bitbucket.org/pypy/pypy/changeset/dec7d899face/
Log: hg merge default
diff --git a/pypy/jit/backend/llgraph/llimpl.py
b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -171,7 +171,7 @@
'unicodesetitem' : (('ref', 'int', 'int'), 'int'),
'cast_ptr_to_int' : (('ref',), 'int'),
'cast_int_to_ptr' : (('int',), 'ref'),
- 'debug_merge_point': (('ref', 'int'), None),
+ 'debug_merge_point': (('ref', 'int', 'int'), None),
'force_token' : ((), 'int'),
'call_may_force' : (('int', 'varargs'), 'intorptr'),
'guard_not_forced': ((), None),
diff --git a/pypy/jit/backend/test/runner_test.py
b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -604,7 +604,7 @@
[funcbox, BoxInt(arg1), BoxInt(arg2)],
'int', descr=calldescr)
assert res.getint() == f(arg1, arg2)
-
+
def test_call_stack_alignment(self):
# test stack alignment issues, notably for Mac OS/X.
# also test the ordering of the arguments.
@@ -1490,7 +1490,8 @@
def test_noops(self):
c_box = self.alloc_string("hi there").constbox()
c_nest = ConstInt(0)
- self.execute_operation(rop.DEBUG_MERGE_POINT, [c_box, c_nest], 'void')
+ c_id = ConstInt(0)
+ self.execute_operation(rop.DEBUG_MERGE_POINT, [c_box, c_nest, c_id],
'void')
self.execute_operation(rop.JIT_DEBUG, [c_box, c_nest, c_nest,
c_nest, c_nest], 'void')
@@ -3061,7 +3062,7 @@
ResOperation(rop.JUMP, [i2], None, descr=targettoken2),
]
self.cpu.compile_bridge(faildescr, inputargs, operations, looptoken)
-
+
fail = self.cpu.execute_token(looptoken, 2)
assert fail.identifier == 3
res = self.cpu.get_latest_value_int(0)
@@ -3106,7 +3107,7 @@
assert len(mc) == len(ops)
for i in range(len(mc)):
assert mc[i].split("\t")[-1].startswith(ops[i])
-
+
data = ctypes.string_at(info.asmaddr, info.asmlen)
mc = list(machine_code_dump(data, info.asmaddr, cpuname))
lines = [line for line in mc if line.count('\t') == 2]
diff --git a/pypy/jit/backend/x86/test/test_runner.py
b/pypy/jit/backend/x86/test/test_runner.py
--- a/pypy/jit/backend/x86/test/test_runner.py
+++ b/pypy/jit/backend/x86/test/test_runner.py
@@ -371,7 +371,7 @@
operations = [
ResOperation(rop.LABEL, [i0], None, descr=targettoken),
- ResOperation(rop.DEBUG_MERGE_POINT, [FakeString("hello"), 0],
None),
+ ResOperation(rop.DEBUG_MERGE_POINT, [FakeString("hello"), 0, 0],
None),
ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr1),
@@ -390,7 +390,7 @@
bridge = [
ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3),
ResOperation(rop.GUARD_TRUE, [i3], None, descr=faildescr2),
- ResOperation(rop.DEBUG_MERGE_POINT, [FakeString("bye"), 0], None),
+ ResOperation(rop.DEBUG_MERGE_POINT, [FakeString("bye"), 0, 0],
None),
ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
]
bridge[1].setfailargs([i1b])
@@ -531,12 +531,12 @@
loop = """
[i0]
label(i0, descr=preambletoken)
- debug_merge_point('xyz', 0)
+ debug_merge_point('xyz', 0, 0)
i1 = int_add(i0, 1)
i2 = int_ge(i1, 10)
guard_false(i2) []
label(i1, descr=targettoken)
- debug_merge_point('xyz', 0)
+ debug_merge_point('xyz', 0, 0)
i11 = int_add(i1, 1)
i12 = int_ge(i11, 10)
guard_false(i12) []
@@ -569,7 +569,7 @@
loop = """
[i0]
label(i0, descr=targettoken)
- debug_merge_point('xyz', 0)
+ debug_merge_point('xyz', 0, 0)
i1 = int_add(i0, 1)
i2 = int_ge(i1, 10)
guard_false(i2) []
diff --git a/pypy/jit/metainterp/graphpage.py b/pypy/jit/metainterp/graphpage.py
--- a/pypy/jit/metainterp/graphpage.py
+++ b/pypy/jit/metainterp/graphpage.py
@@ -169,9 +169,9 @@
if op.getopnum() == rop.DEBUG_MERGE_POINT:
jd_sd = self.metainterp_sd.jitdrivers_sd[op.getarg(0).getint()]
if jd_sd._get_printable_location_ptr:
- s = jd_sd.warmstate.get_location_str(op.getarglist()[2:])
+ s = jd_sd.warmstate.get_location_str(op.getarglist()[3:])
s = s.replace(',', '.') # we use comma for argument
splitting
- op_repr = "debug_merge_point(%d, '%s')" %
(op.getarg(1).getint(), s)
+ op_repr = "debug_merge_point(%d, %d, '%s')" %
(op.getarg(1).getint(), op.getarg(2).getint(), s)
lines.append(op_repr)
if is_interesting_guard(op):
tgt = op.getdescr()._debug_suboperations[0]
diff --git a/pypy/jit/metainterp/logger.py b/pypy/jit/metainterp/logger.py
--- a/pypy/jit/metainterp/logger.py
+++ b/pypy/jit/metainterp/logger.py
@@ -110,9 +110,9 @@
def repr_of_resop(self, op, ops_offset=None):
if op.getopnum() == rop.DEBUG_MERGE_POINT:
jd_sd = self.metainterp_sd.jitdrivers_sd[op.getarg(0).getint()]
- s = jd_sd.warmstate.get_location_str(op.getarglist()[2:])
+ s = jd_sd.warmstate.get_location_str(op.getarglist()[3:])
s = s.replace(',', '.') # we use comma for argument splitting
- return "debug_merge_point(%d, '%s')" % (op.getarg(1).getint(), s)
+ return "debug_merge_point(%d, %d, '%s')" % (op.getarg(1).getint(),
op.getarg(2).getint(), s)
if ops_offset is None:
offset = -1
else:
@@ -149,7 +149,7 @@
if target_token.exported_state:
for op in target_token.exported_state.inputarg_setup_ops:
debug_print(' ' + self.repr_of_resop(op))
-
+
def _log_operations(self, inputargs, operations, ops_offset):
if not have_debug_prints():
return
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -974,9 +974,11 @@
any_operation = len(self.metainterp.history.operations) > 0
jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
self.verify_green_args(jitdriver_sd, greenboxes)
- self.debug_merge_point(jitdriver_sd, jdindex,
self.metainterp.portal_call_depth,
+ self.debug_merge_point(jitdriver_sd, jdindex,
+ self.metainterp.portal_call_depth,
+ self.metainterp.call_ids[-1],
greenboxes)
-
+
if self.metainterp.seen_loop_header_for_jdindex < 0:
if not any_operation:
return
@@ -1028,11 +1030,11 @@
assembler_call=True)
raise ChangeFrame
- def debug_merge_point(self, jitdriver_sd, jd_index, portal_call_depth,
greenkey):
+ def debug_merge_point(self, jitdriver_sd, jd_index, portal_call_depth,
current_call_id, greenkey):
# debugging: produce a DEBUG_MERGE_POINT operation
loc = jitdriver_sd.warmstate.get_location_str(greenkey)
debug_print(loc)
- args = [ConstInt(jd_index), ConstInt(portal_call_depth)] + greenkey
+ args = [ConstInt(jd_index), ConstInt(portal_call_depth),
ConstInt(current_call_id)] + greenkey
self.metainterp.history.record(rop.DEBUG_MERGE_POINT, args, None)
@arguments("box", "label")
@@ -1574,11 +1576,14 @@
self.call_pure_results = args_dict_box()
self.heapcache = HeapCache()
+ self.call_ids = []
+ self.current_call_id = 0
+
def retrace_needed(self, trace):
self.partial_trace = trace
self.retracing_from = len(self.history.operations) - 1
self.heapcache.reset()
-
+
def perform_call(self, jitcode, boxes, greenkey=None):
# causes the metainterp to enter the given subfunction
@@ -1592,6 +1597,8 @@
def newframe(self, jitcode, greenkey=None):
if jitcode.is_portal:
self.portal_call_depth += 1
+ self.call_ids.append(self.current_call_id)
+ self.current_call_id += 1
if greenkey is not None and self.is_main_jitcode(jitcode):
self.portal_trace_positions.append(
(greenkey, len(self.history.operations)))
@@ -1608,6 +1615,7 @@
jitcode = frame.jitcode
if jitcode.is_portal:
self.portal_call_depth -= 1
+ self.call_ids.pop()
if frame.greenkey is not None and self.is_main_jitcode(jitcode):
self.portal_trace_positions.append(
(None, len(self.history.operations)))
@@ -1976,7 +1984,7 @@
# Found! Compile it as a loop.
# raises in case it works -- which is the common case
if self.partial_trace:
- if start != self.retracing_from:
+ if start != self.retracing_from:
raise SwitchToBlackhole(ABORT_BAD_LOOP) # For now
self.compile_loop(original_boxes, live_arg_boxes, start,
resumedescr)
# creation of the loop was cancelled!
@@ -2085,7 +2093,7 @@
if not token.target_tokens:
return None
return token
-
+
def compile_loop(self, original_boxes, live_arg_boxes, start,
resume_at_jump_descr):
num_green_args = self.jitdriver_sd.num_green_args
greenkey = original_boxes[:num_green_args]
diff --git a/pypy/jit/metainterp/test/test_logger.py
b/pypy/jit/metainterp/test/test_logger.py
--- a/pypy/jit/metainterp/test/test_logger.py
+++ b/pypy/jit/metainterp/test/test_logger.py
@@ -54,7 +54,7 @@
class FakeJitDriver(object):
class warmstate(object):
get_location_str = staticmethod(lambda args: "dupa")
-
+
class FakeMetaInterpSd:
cpu = AbstractCPU()
cpu.ts = self.ts
@@ -77,7 +77,7 @@
equaloplists(loop.operations, oloop.operations)
assert oloop.inputargs == loop.inputargs
return logger, loop, oloop
-
+
def test_simple(self):
inp = '''
[i0, i1, i2, p3, p4, p5]
@@ -116,12 +116,13 @@
def test_debug_merge_point(self):
inp = '''
[]
- debug_merge_point(0, 0)
+ debug_merge_point(0, 0, 0)
'''
_, loop, oloop = self.reparse(inp, check_equal=False)
assert loop.operations[0].getarg(1).getint() == 0
- assert oloop.operations[0].getarg(1)._get_str() == "dupa"
-
+ assert loop.operations[0].getarg(2).getint() == 0
+ assert oloop.operations[0].getarg(2)._get_str() == "dupa"
+
def test_floats(self):
inp = '''
[f0]
@@ -142,7 +143,7 @@
output = logger.log_loop(loop)
assert output.splitlines()[-1] == "jump(i0, descr=<Loop3>)"
pure_parse(output)
-
+
def test_guard_descr(self):
namespace = {'fdescr': BasicFailDescr()}
inp = '''
@@ -154,7 +155,7 @@
output = logger.log_loop(loop)
assert output.splitlines()[-1] == "guard_true(i0, descr=<Guard0>) [i0]"
pure_parse(output)
-
+
logger = Logger(self.make_metainterp_sd(), guard_number=False)
output = logger.log_loop(loop)
lastline = output.splitlines()[-1]
diff --git a/pypy/jit/metainterp/test/test_warmspot.py
b/pypy/jit/metainterp/test/test_warmspot.py
--- a/pypy/jit/metainterp/test/test_warmspot.py
+++ b/pypy/jit/metainterp/test/test_warmspot.py
@@ -13,7 +13,7 @@
class WarmspotTests(object):
-
+
def test_basic(self):
mydriver = JitDriver(reds=['a'],
greens=['i'])
@@ -77,16 +77,16 @@
self.meta_interp(f, [123, 10])
assert len(get_stats().locations) >= 4
for loc in get_stats().locations:
- assert loc == (0, 123)
+ assert loc == (0, 0, 123)
def test_set_param_enable_opts(self):
from pypy.rpython.annlowlevel import llstr, hlstr
-
+
myjitdriver = JitDriver(greens = [], reds = ['n'])
class A(object):
def m(self, n):
return n-1
-
+
def g(n):
while n > 0:
myjitdriver.can_enter_jit(n=n)
@@ -332,7 +332,7 @@
ts = llhelper
translate_support_code = False
stats = "stats"
-
+
def get_fail_descr_number(self, d):
return -1
@@ -352,7 +352,7 @@
return "not callable"
driver = JitDriver(reds = ['red'], greens = ['green'])
-
+
def f(green):
red = 0
while red < 10:
diff --git a/pypy/jit/tool/test/test_oparser.py
b/pypy/jit/tool/test/test_oparser.py
--- a/pypy/jit/tool/test/test_oparser.py
+++ b/pypy/jit/tool/test/test_oparser.py
@@ -146,16 +146,18 @@
def test_debug_merge_point(self):
x = '''
[]
- debug_merge_point(0, "info")
- debug_merge_point(0, 'info')
- debug_merge_point(1, '<some ('other.')> info')
- debug_merge_point(0, '(stuff) #1')
+ debug_merge_point(0, 0, "info")
+ debug_merge_point(0, 0, 'info')
+ debug_merge_point(1, 1, '<some ('other.')> info')
+ debug_merge_point(0, 0, '(stuff) #1')
'''
loop = self.parse(x)
- assert loop.operations[0].getarg(1)._get_str() == 'info'
- assert loop.operations[1].getarg(1)._get_str() == 'info'
- assert loop.operations[2].getarg(1)._get_str() == "<some ('other.')>
info"
- assert loop.operations[3].getarg(1)._get_str() == "(stuff) #1"
+ assert loop.operations[0].getarg(2)._get_str() == 'info'
+ assert loop.operations[0].getarg(1).value == 0
+ assert loop.operations[1].getarg(2)._get_str() == 'info'
+ assert loop.operations[2].getarg(2)._get_str() == "<some ('other.')>
info"
+ assert loop.operations[2].getarg(1).value == 1
+ assert loop.operations[3].getarg(2)._get_str() == "(stuff) #1"
def test_descr_with_obj_print(self):
diff --git a/pypy/module/pypyjit/interp_resop.py
b/pypy/module/pypyjit/interp_resop.py
--- a/pypy/module/pypyjit/interp_resop.py
+++ b/pypy/module/pypyjit/interp_resop.py
@@ -72,7 +72,7 @@
Set a compiling hook that will be called each time a loop is optimized,
but before assembler compilation. This allows to add additional
optimizations on Python level.
-
+
The hook will be called with the following signature:
hook(jitdriver_name, loop_type, greenkey or guard_number, operations)
@@ -121,13 +121,14 @@
ofs = ops_offset.get(op, 0)
if op.opnum == rop.DEBUG_MERGE_POINT:
jd_sd = jitdrivers_sd[op.getarg(0).getint()]
- greenkey = op.getarglist()[2:]
+ greenkey = op.getarglist()[3:]
repr = jd_sd.warmstate.get_location_str(greenkey)
w_greenkey = wrap_greenkey(space, jd_sd.jitdriver, greenkey, repr)
l_w.append(DebugMergePoint(space, jit_hooks._cast_to_gcref(op),
logops.repr_of_resop(op),
jd_sd.jitdriver.name,
op.getarg(1).getint(),
+ op.getarg(2).getint(),
w_greenkey))
else:
l_w.append(WrappedOp(jit_hooks._cast_to_gcref(op), ofs,
@@ -164,14 +165,16 @@
llres = res.llbox
return WrappedOp(jit_hooks.resop_new(num, args, llres), offset, repr)
-@unwrap_spec(repr=str, jd_name=str, call_depth=int)
-def descr_new_dmp(space, w_tp, w_args, repr, jd_name, call_depth, w_greenkey):
+@unwrap_spec(repr=str, jd_name=str, call_depth=int, call_id=int)
+def descr_new_dmp(space, w_tp, w_args, repr, jd_name, call_depth, call_id,
+ w_greenkey):
+
args = [space.interp_w(WrappedBox, w_arg).llbox for w_arg in
space.listview(w_args)]
num = rop.DEBUG_MERGE_POINT
return DebugMergePoint(space,
jit_hooks.resop_new(num, args,
jit_hooks.emptyval()),
- repr, jd_name, call_depth, w_greenkey)
+ repr, jd_name, call_depth, call_id, w_greenkey)
class WrappedOp(Wrappable):
""" A class representing a single ResOperation, wrapped nicely
@@ -206,10 +209,13 @@
jit_hooks.resop_setresult(self.op, box.llbox)
class DebugMergePoint(WrappedOp):
- def __init__(self, space, op, repr_of_resop, jd_name, call_depth,
w_greenkey):
+ def __init__(self, space, op, repr_of_resop, jd_name, call_depth, call_id,
+ w_greenkey):
+
WrappedOp.__init__(self, op, -1, repr_of_resop)
self.jd_name = jd_name
self.call_depth = call_depth
+ self.call_id = call_id
self.w_greenkey = w_greenkey
def get_pycode(self, space):
@@ -246,6 +252,7 @@
pycode = GetSetProperty(DebugMergePoint.get_pycode),
bytecode_no = GetSetProperty(DebugMergePoint.get_bytecode_no),
call_depth = interp_attrproperty("call_depth", cls=DebugMergePoint),
+ call_id = interp_attrproperty("call_id", cls=DebugMergePoint),
jitdriver_name = GetSetProperty(DebugMergePoint.get_jitdriver_name),
)
DebugMergePoint.acceptable_as_base_class = False
diff --git a/pypy/module/pypyjit/test/test_jit_hook.py
b/pypy/module/pypyjit/test/test_jit_hook.py
--- a/pypy/module/pypyjit/test/test_jit_hook.py
+++ b/pypy/module/pypyjit/test/test_jit_hook.py
@@ -54,7 +54,7 @@
oplist = parse("""
[i1, i2, p2]
i3 = int_add(i1, i2)
- debug_merge_point(0, 0, 0, 0, ConstPtr(ptr0))
+ debug_merge_point(0, 0, 0, 0, 0, ConstPtr(ptr0))
guard_nonnull(p2) []
guard_true(i3) []
""", namespace={'ptr0': code_gcref}).operations
@@ -87,7 +87,7 @@
def interp_on_abort():
pypy_hooks.on_abort(ABORT_TOO_LONG, pypyjitdriver, greenkey,
'blah')
-
+
cls.w_on_compile = space.wrap(interp2app(interp_on_compile))
cls.w_on_compile_bridge =
space.wrap(interp2app(interp_on_compile_bridge))
cls.w_on_abort = space.wrap(interp2app(interp_on_abort))
@@ -105,7 +105,7 @@
def hook(name, looptype, tuple_or_guard_no, ops, asmstart, asmlen):
all.append((name, looptype, tuple_or_guard_no, ops))
-
+
self.on_compile()
pypyjit.set_compile_hook(hook)
assert not all
@@ -123,6 +123,7 @@
assert dmp.pycode is self.f.func_code
assert dmp.greenkey == (self.f.func_code, 0, False)
assert dmp.call_depth == 0
+ assert dmp.call_id == 0
assert int_add.name == 'int_add'
assert int_add.num == self.int_add_num
self.on_compile_bridge()
@@ -151,18 +152,18 @@
def test_non_reentrant(self):
import pypyjit
l = []
-
+
def hook(*args):
l.append(None)
self.on_compile()
self.on_compile_bridge()
-
+
pypyjit.set_compile_hook(hook)
self.on_compile()
assert len(l) == 1 # and did not crash
self.on_compile_bridge()
assert len(l) == 2 # and did not crash
-
+
def test_on_compile_types(self):
import pypyjit
l = []
@@ -182,7 +183,7 @@
def hook(jitdriver_name, greenkey, reason):
l.append((jitdriver_name, reason))
-
+
pypyjit.set_abort_hook(hook)
self.on_abort()
assert l == [('pypyjit', 'ABORT_TOO_LONG')]
@@ -224,13 +225,14 @@
def f():
pass
- op = DebugMergePoint([Box(0)], 'repr', 'pypyjit', 2, (f.func_code, 0,
0))
+ op = DebugMergePoint([Box(0)], 'repr', 'pypyjit', 2, 3, (f.func_code,
0, 0))
assert op.bytecode_no == 0
assert op.pycode is f.func_code
assert repr(op) == 'repr'
assert op.jitdriver_name == 'pypyjit'
assert op.num == self.dmp_num
assert op.call_depth == 2
- op = DebugMergePoint([Box(0)], 'repr', 'notmain', 5, ('str',))
+ assert op.call_id == 3
+ op = DebugMergePoint([Box(0)], 'repr', 'notmain', 5, 4, ('str',))
raises(AttributeError, 'op.pycode')
assert op.call_depth == 5
diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py
--- a/pypy/tool/jitlogparser/parser.py
+++ b/pypy/tool/jitlogparser/parser.py
@@ -93,7 +93,7 @@
end_index += 1
op.asm = '\n'.join([asm[i][1] for i in range(asm_index,
end_index)])
return loop
-
+
def _asm_disassemble(self, d, origin_addr, tp):
from pypy.jit.backend.x86.tool.viewcode import machine_code_dump
return list(machine_code_dump(d, tp, origin_addr))
@@ -109,7 +109,7 @@
if not argspec.strip():
return [], None
if opname == 'debug_merge_point':
- return argspec.split(", ", 1), None
+ return argspec.split(", ", 2), None
else:
args = argspec.split(', ')
descr = None
@@ -159,7 +159,7 @@
for op in operations:
if op.name == 'debug_merge_point':
self.inline_level = int(op.args[0])
- self.parse_code_data(op.args[1][1:-1])
+ self.parse_code_data(op.args[2][1:-1])
break
else:
self.inline_level = 0
@@ -417,7 +417,7 @@
part.descr = descrs[i]
part.comment = trace.comment
parts.append(part)
-
+
return parts
def parse_log_counts(input, loops):
diff --git a/pypy/tool/jitlogparser/test/test_parser.py
b/pypy/tool/jitlogparser/test/test_parser.py
--- a/pypy/tool/jitlogparser/test/test_parser.py
+++ b/pypy/tool/jitlogparser/test/test_parser.py
@@ -29,7 +29,7 @@
def test_parse_non_code():
ops = parse('''
[]
- debug_merge_point(0, "SomeRandomStuff")
+ debug_merge_point(0, 0, "SomeRandomStuff")
''')
res = Function.from_operations(ops.operations, LoopStorage())
assert len(res.chunks) == 1
@@ -39,10 +39,10 @@
ops = parse('''
[i0]
label()
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
200> #10 ADD")
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
200> #11 SUB")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
200> #10 ADD")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
200> #11 SUB")
i1 = int_add(i0, 1)
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
200> #11 SUB")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
200> #11 SUB")
i2 = int_add(i1, 1)
''')
res = Function.from_operations(ops.operations, LoopStorage(),
loopname='<loopname>')
@@ -57,12 +57,12 @@
def test_inlined_call():
ops = parse("""
[]
- debug_merge_point(0, '<code object inlined_call. file 'source.py'. line
12> #28 CALL_FUNCTION')
+ debug_merge_point(0, 0, '<code object inlined_call. file 'source.py'. line
12> #28 CALL_FUNCTION')
i18 = getfield_gc(p0, descr=<BoolFieldDescr
pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 89>)
- debug_merge_point(1, '<code object inner. file 'source.py'. line 9> #0
LOAD_FAST')
- debug_merge_point(1, '<code object inner. file 'source.py'. line 9> #3
LOAD_CONST')
- debug_merge_point(1, '<code object inner. file 'source.py'. line 9> #7
RETURN_VALUE')
- debug_merge_point(0, '<code object inlined_call. file 'source.py'. line
12> #31 STORE_FAST')
+ debug_merge_point(1, 1, '<code object inner. file 'source.py'. line 9> #0
LOAD_FAST')
+ debug_merge_point(1, 1, '<code object inner. file 'source.py'. line 9> #3
LOAD_CONST')
+ debug_merge_point(1, 1, '<code object inner. file 'source.py'. line 9> #7
RETURN_VALUE')
+ debug_merge_point(0, 0, '<code object inlined_call. file 'source.py'. line
12> #31 STORE_FAST')
""")
res = Function.from_operations(ops.operations, LoopStorage())
assert len(res.chunks) == 3 # two chunks + inlined call
@@ -75,10 +75,10 @@
def test_name():
ops = parse('''
[i0]
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
200> #10 ADD")
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
201> #11 SUB")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
200> #10 ADD")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
201> #11 SUB")
i1 = int_add(i0, 1)
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
202> #11 SUB")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
202> #11 SUB")
i2 = int_add(i1, 1)
''')
res = Function.from_operations(ops.operations, LoopStorage())
@@ -92,10 +92,10 @@
ops = parse('''
[i0]
i3 = int_add(i0, 1)
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
200> #10 ADD")
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
201> #11 SUB")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
200> #10 ADD")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
201> #11 SUB")
i1 = int_add(i0, 1)
- debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line
202> #11 SUB")
+ debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line
202> #11 SUB")
i2 = int_add(i1, 1)
''')
res = Function.from_operations(ops.operations, LoopStorage())
@@ -105,10 +105,10 @@
fname = str(py.path.local(__file__).join('..', 'x.py'))
ops = parse('''
[i0, i1]
- debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #0
LOAD_FAST")
- debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #3
LOAD_FAST")
- debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #6
BINARY_ADD")
- debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #7
RETURN_VALUE")
+ debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #0
LOAD_FAST")
+ debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #3
LOAD_FAST")
+ debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #6
BINARY_ADD")
+ debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #7
RETURN_VALUE")
''' % locals())
res = Function.from_operations(ops.operations, LoopStorage())
assert res.chunks[1].lineno == 3
@@ -119,11 +119,11 @@
fname = str(py.path.local(__file__).join('..', 'x.py'))
ops = parse('''
[i0, i1]
- debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #9
LOAD_FAST")
- debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #12
LOAD_CONST")
- debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #22
LOAD_CONST")
- debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #28
LOAD_CONST")
- debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #6
SETUP_LOOP")
+ debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #9
LOAD_FAST")
+ debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #12
LOAD_CONST")
+ debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #22
LOAD_CONST")
+ debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #28
LOAD_CONST")
+ debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #6
SETUP_LOOP")
''' % locals())
res = Function.from_operations(ops.operations, LoopStorage())
assert res.linerange == (7, 9)
@@ -135,7 +135,7 @@
fname = str(py.path.local(__file__).join('..', 'x.py'))
ops = parse("""
[p6, p1]
- debug_merge_point(0, '<code object h. file '%(fname)s'. line 11> #17
FOR_ITER')
+ debug_merge_point(0, 0, '<code object h. file '%(fname)s'. line 11> #17
FOR_ITER')
guard_class(p6, 144264192, descr=<Guard2>)
p12 = getfield_gc(p6, descr=<GcPtrFieldDescr
pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_w_seq 12>)
""" % locals())
@@ -181,7 +181,7 @@
def test_parsing_strliteral():
loop = parse("""
- debug_merge_point(0, 'StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51,
0, 19, 51, 1]')
+ debug_merge_point(0, 0, 'StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1,
51, 0, 19, 51, 1]')
""")
ops = Function.from_operations(loop.operations, LoopStorage())
chunk = ops.chunks[0]
@@ -193,12 +193,12 @@
loop = parse("""
# Loop 0 : loop with 19 ops
[p0, p1, p2, p3, i4]
- debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP')
+ debug_merge_point(0, 0, '<code object f. file 'x.py'. line 2> #15
COMPARE_OP')
+166: i6 = int_lt(i4, 10000)
guard_true(i6, descr=<Guard3>) [p1, p0, p2, p3, i4]
- debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27
INPLACE_ADD')
+ debug_merge_point(0, 0, '<code object f. file 'x.py'. line 2> #27
INPLACE_ADD')
+179: i8 = int_add(i4, 1)
- debug_merge_point(0, '<code object f. file 'x.py'. line 2> #31
JUMP_ABSOLUTE')
+ debug_merge_point(0, 0, '<code object f. file 'x.py'. line 2> #31
JUMP_ABSOLUTE')
+183: i10 = getfield_raw(40564608, descr=<SignedFieldDescr
pypysig_long_struct.c_value 0>)
+191: i12 = int_sub(i10, 1)
+195: setfield_raw(40564608, i12, descr=<SignedFieldDescr
pypysig_long_struct.c_value 0>)
@@ -287,8 +287,8 @@
def test_parse_nonpython():
loop = parse("""
[]
- debug_merge_point(0, 'random')
- debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP')
+ debug_merge_point(0, 0, 'random')
+ debug_merge_point(0, 0, '<code object f. file 'x.py'. line 2> #15
COMPARE_OP')
""")
f = Function.from_operations(loop.operations, LoopStorage())
assert f.chunks[-1].filename == 'x.py'
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit