Author: Richard Plangger <[email protected]>
Branch: new-jit-log
Changeset: r83863:ba725a955100
Date: 2016-04-25 14:07 +0200
http://bitbucket.org/pypy/pypy/changeset/ba725a955100/
Log: fixed up the test that integrates the whole jitlog on resoperations
diff --git a/rpython/rlib/jitlog.py b/rpython/rlib/jitlog.py
--- a/rpython/rlib/jitlog.py
+++ b/rpython/rlib/jitlog.py
@@ -97,7 +97,7 @@
last_prefix = compressor.get_last_written(i)
cp = compressor.compress(i, str_value)
if cp is None:
- return chr(0xff) + encode_str(str_value)
+ return b'\xff' + encode_str(str_value)
else:
cp_len = len(cp)
@@ -107,15 +107,15 @@
else:
compressor.write(log, i, cp)
if len(str_value) == len(cp):
- return "\xef"
- return chr(i) + encode_str(str_value[len(cp):])
+ return b'\xef'
+ return b'\x00' + encode_str(str_value[len(cp):])
class IntValue(WrappedValue):
def __init__(self, sem_type, gen_type, value):
self.value = value
def encode(self, log, i, prefixes):
- return encode_le_64bit(self.value)
+ return b'\x00' + encode_le_64bit(self.value)
# note that a ...
# "semantic_type" is an integer denoting which meaning does a type at a merge
point have
@@ -147,31 +147,46 @@
JITLOG_VERSION = 1
JITLOG_VERSION_16BIT_LE = struct.pack("<H", JITLOG_VERSION)
-MARK_INPUT_ARGS = 0x10
-MARK_RESOP_META = 0x11
-MARK_RESOP = 0x12
-MARK_RESOP_DESCR = 0x13
-MARK_ASM_ADDR = 0x14
-MARK_ASM = 0x15
+marks = [
+ ('INPUT_ARGS',),
+ ('RESOP_META',),
+ ('RESOP',),
+ ('RESOP_DESCR',),
+ ('ASM_ADDR',),
+ ('ASM',),
-# which type of trace is logged after this
-# the trace as it is recorded by the tracer
-MARK_TRACE = 0x16
-# the trace that has passed the optimizer
-MARK_TRACE_OPT = 0x17
-# the trace assembled to machine code (after rewritten)
-MARK_TRACE_ASM = 0x18
+ # which type of trace is logged after this
+ # the trace as it is recorded by the tracer
+ ('TRACE',),
+ # the trace that has passed the optimizer
+ ('TRACE_OPT',),
+ # the trace assembled to machine code (after rewritten)
+ ('TRACE_ASM',),
-# the machine code was patched (e.g. guard)
-MARK_STITCH_BRIDGE = 0x19
+ # the machine code was patched (e.g. guard)
+ ('STITCH_BRIDGE',),
-MARK_JITLOG_COUNTER = 0x20
-MARK_START_TRACE = 0x21
-MARK_INIT_MERGE_POINT = 0x22
+ ('START_TRACE',),
-MARK_JITLOG_HEADER = 0x23
-MARK_JITLOG_DEBUG_MERGE_POINT = 0x24
-MARK_COMMON_PREFIX = 0x25
+ ('JITLOG_COUNTER',),
+ ('INIT_MERGE_POINT',),
+
+ ('JITLOG_HEADER',),
+ ('MERGE_POINT',),
+ ('COMMON_PREFIX',),
+]
+
+start = 0x10
+for mark, in marks:
+ globals()['MARK_' + mark] = start
+ start += 1
+
+if __name__ == "__main__":
+ print("# generated constants from rpython/rlib/jitlog.py")
+ for mark in marks:
+ print '%s = %d' % ('MARK_' + mark, globals()['MARK_' + mark])
+
+del marks
IS_32_BIT = sys.maxint == 2**31-1
@@ -189,7 +204,7 @@
def __init__(self):
self.cintf = cintf.setup()
self.memo = {}
- self.trace_id = 0
+ self.trace_id = -1
def setup_once(self):
if self.cintf.jitlog_enabled():
@@ -206,6 +221,7 @@
def start_new_trace(self, faildescr=None, entry_bridge=False):
if not self.cintf.jitlog_enabled():
return
+ self.trace_id += 1
content = [encode_le_addr(self.trace_id)]
if faildescr:
content.append(encode_str('bridge'))
@@ -215,7 +231,6 @@
content.append(encode_str('loop'))
content.append(encode_le_addr(int(entry_bridge)))
self._write_marked(MARK_START_TRACE, ''.join(content))
- self.trace_id += 1
def _write_marked(self, mark, line):
if not we_are_translated():
@@ -273,7 +288,7 @@
self.prefixes[index] = string
return None
cp = commonprefix(last, string)
- if len(cp) <= 1: # prevent common prefix '/'
+ if len(cp) <= 1: # prevent very small common prefixes (like "/")
self.prefixes[index] = string
return None
return cp
@@ -365,12 +380,12 @@
encoded_types = []
for i, (semantic_type, generic_type) in enumerate(types):
encoded_types.append(chr(semantic_type))
- encoded_types.append(chr(generic_type))
+ encoded_types.append(generic_type)
log._write_marked(MARK_INIT_MERGE_POINT, ''.join(encoded_types))
# the types have already been written
encoded = encode_merge_point(log, self.common_prefix, values)
- log._write_marked(MARK_JITLOG_DEBUG_MERGE_POINT, encoded)
+ log._write_marked(MARK_MERGE_POINT, encoded)
def encode_op(self, op):
""" an operation is written as follows:
diff --git a/rpython/rlib/test/test_jitlog.py b/rpython/rlib/test/test_jitlog.py
--- a/rpython/rlib/test/test_jitlog.py
+++ b/rpython/rlib/test/test_jitlog.py
@@ -14,16 +14,25 @@
def _write_marked(self, id, text):
self.values.append(chr(id) + text)
+def _get_location(greenkey_list):
+ assert len(greenkey_list) == 0
+ return '/home/pypy/jit.py', 0, 'enclosed', 99, 'DEL'
+
class TestLogger(object):
def make_metainterp_sd(self):
class FakeJitDriver(object):
class warmstate(object):
+ get_location_types = [jl.MP_FILENAME,jl.MP_INT,jl.MP_SCOPE,
jl.MP_INT, jl.MP_OPCODE]
@staticmethod
def get_location(greenkey_list):
- assert len(greenkey_list) == 0
- return '/home/pypy/jit.py', 0, 'enclosed', 99, 'DEL'
- get_location_types =
[(jl.MP_FILENAME,'s'),(0x0,'i'),(jl.MP_SCOPE,'s'), (0x0,'i'), (jl.MP_OPCODE,
's')]
+ return [jl.wrap(jl.MP_FILENAME[0],'s','/home/pypy/jit.py'),
+ jl.wrap(jl.MP_INT[0], 'i', 0),
+ jl.wrap(jl.MP_SCOPE[0], 's', 'enclosed'),
+ jl.wrap(jl.MP_INT[0], 'i', 99),
+ jl.wrap(jl.MP_OPCODE[0], 's', 'DEL')
+ ]
+
class FakeMetaInterpSd:
cpu = AbstractCPU()
@@ -39,20 +48,25 @@
file.ensure()
fd = file.open('wb')
logger.cintf.jitlog_init(fd.fileno())
- log_trace = logger.log_trace(0, self.make_metainterp_sd(), None)
+ logger.start_new_trace()
+ log_trace = logger.log_trace(jl.MARK_TRACE, self.make_metainterp_sd(),
None)
op = ResOperation(rop.DEBUG_MERGE_POINT, [ConstInt(0), ConstInt(0),
ConstInt(0)])
log_trace.write([], [op])
#the next line will close 'fd'
fd.close()
logger.finish()
binary = file.read()
- assert binary.startswith(b'\x00\x04\x00\x00\x00loop')
- assert binary.endswith(b'\x24' + \
- encode_str('/home/pypy/jit.py') + \
- encode_le_16bit(0) + \
- encode_str('enclosed') + \
- encode_le_64bit(99) + \
- encode_str('DEL'))
+ assert binary == chr(jl.MARK_START_TRACE) + jl.encode_le_addr(0) + \
+ jl.encode_str('loop') + jl.encode_le_addr(0) + \
+ chr(jl.MARK_TRACE) + jl.encode_le_addr(0) + \
+ chr(jl.MARK_INPUT_ARGS) + jl.encode_str('') + \
+ chr(jl.MARK_INIT_MERGE_POINT) +
b'\x01s\x00i\x08s\x00i\x10s' + \
+ chr(jl.MARK_MERGE_POINT) + \
+ b'\xff' + encode_str('/home/pypy/jit.py') + \
+ b'\x00' + encode_le_64bit(0) + \
+ b'\xff' + encode_str('enclosed') + \
+ b'\x00' + encode_le_64bit(99) + \
+ b'\xff' + encode_str('DEL')
def test_common_prefix(self):
fakelog = FakeLog()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit