Author: Richard Plangger <[email protected]>
Branch: new-jit-log
Changeset: r82584:ed87960a6c98
Date: 2016-02-26 19:13 +0100
http://bitbucket.org/pypy/pypy/changeset/ed87960a6c98/
Log: finished a first (not yet compiling) version that both writes loops
and bridges in a more condensed format
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -532,8 +532,8 @@
looptoken._x86_ops_offset = ops_offset
looptoken._ll_function_addr = rawstart
if logger:
- logger.log_loop(inputargs, operations, 0, "rewritten",
- name=loopname, ops_offset=ops_offset)
+ logger.log_trace(logger.MARK_ASM, inputargs, operations,
+ ops_offset=ops_offset)
self.fixup_target_tokens(rawstart)
self.teardown()
@@ -587,8 +587,8 @@
frame_depth = max(self.current_clt.frame_info.jfi_frame_depth,
frame_depth_no_fixed_size + JITFRAME_FIXED_SIZE)
if logger:
- logger.log_bridge(inputargs, operations, "rewritten", faildescr,
- ops_offset=ops_offset)
+ logger.log_trace(logger.MARK_ASM, inputargs, operations,
+ faildescr=faildescr, ops_offset=ops_offset)
self.fixup_target_tokens(rawstart)
self.update_frame_depth(frame_depth)
self.teardown()
diff --git a/rpython/jit/metainterp/jitlog.py b/rpython/jit/metainterp/jitlog.py
--- a/rpython/jit/metainterp/jitlog.py
+++ b/rpython/jit/metainterp/jitlog.py
@@ -1,22 +1,46 @@
from rpython.rlib.rvmprof.rvmprof import cintf
class VMProfJitLogger(object):
+
+ MARK_BLOCK_ASM = 0x10
+
+ MARK_INPUT_ARGS = 0x11
+ MARK_RESOP = 0x12
+
+ MARK_RESOP_META = 0x13
+
def __init__(self):
self.cintf = cintf.setup()
- def _ensure_init(self):
+ def setup_once(self):
self.cintf.jitlog_try_init_using_env()
+ if self.cintf.jitlog_filter(0x0):
+ return
+ self.cintf.jitlog_write_marker(MARK_RESOP_META);
+ count = len(resoperation.opname)
+ self.cintf.jitlog_write_int(count)
+ for opnum, opname in resoperation.opname.items():
+ self.cintf.write_marker(opnum)
+ self.cintf.write_string(opname)
- self.cintf.write_marker(BinaryJitLogger.JIT_META_MARKER)
- count = len(resoperation.opname)
- assert count < 256
- self.cintf.write_marker(count)
- for opnum, opname in resoperation.opname.items():
- self.cintf.write_byte(opnum)
- self.cintf.write_string(opnum)
+ def log_trace(self, tag, args, ops,
+ faildescr=None, ops_offset={}):
+ if self.cintf.jitlog_filter(tag):
+ return
+ assert isinstance(tag, int)
+ self.cintf.jitlog_write_marker(tag);
- def log_loop(self, operations):
- pass
+ # input args
+ self.cintf.jitlog_write_marker(MARK_INPUT_ARGS);
+ str_args = [arg.repr_short(arg._repr_memo) for arg in args]
+ self.cintf.jitlog_write_string(','.join(str_args))
- def _log_resoperation(self, op):
- pass
+ self.cintf.jitlog_write_int(len(ops))
+ for i,op in enumerate(ops):
+ self.cintf.jitlog_write_marker(MARK_RESOP)
+ self.cintf.jitlog_write_marker(op.getopnum())
+ str_args = [arg.repr_short(arg._repr_memo) for arg in
op.getarglist()]
+ descr = op.getdescr()
+ if descr:
+ str_args += ['descr='+descr]
+ self.cintf.jitlog_write_string(','.join(str_args))
diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py
b/rpython/jit/metainterp/optimizeopt/__init__.py
--- a/rpython/jit/metainterp/optimizeopt/__init__.py
+++ b/rpython/jit/metainterp/optimizeopt/__init__.py
@@ -54,7 +54,6 @@
debug_start("jit-optimize")
inputargs = compile_data.start_label.getarglist()
try:
- metainterp.jitlog.log_loop(inputargs, compile_data.operations, memo)
metainterp_sd.logger_noopt.log_loop(inputargs,
compile_data.operations,
memo=memo)
diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -55,6 +55,9 @@
jitlog_init = rffi.llexternal("jitlog_init", [rffi.INT, rffi.CHARP],
rffi.CHARP, compilation_info=eci,
save_err=rffi.RFFI_SAVE_ERRNO)
+ jitlog_init = rffi.llexternal("jitlog_write_marker", [rffi.INT,
rffi.CHARP],
+ rffi.CHARP, compilation_info=eci,
+ save_err=rffi.RFFI_SAVE_ERRNO)
return CInterface(locals())
diff --git a/rpython/rlib/rvmprof/src/jitlog_main.h
b/rpython/rlib/rvmprof/src/jitlog_main.h
--- a/rpython/rlib/rvmprof/src/jitlog_main.h
+++ b/rpython/rlib/rvmprof/src/jitlog_main.h
@@ -5,6 +5,12 @@
static int jitlog_ready = 0;
RPY_EXTERN
+int jitlog_filter(int tag)
+{
+ return 0; // TODO
+}
+
+RPY_EXTERN
void jitlog_try_init_using_env(void) {
if (jitlog_ready) { return; }
diff --git a/rpython/rlib/rvmprof/src/rvmprof.h
b/rpython/rlib/rvmprof/src/rvmprof.h
--- a/rpython/rlib/rvmprof/src/rvmprof.h
+++ b/rpython/rlib/rvmprof/src/rvmprof.h
@@ -11,3 +11,4 @@
RPY_EXTERN char * jitlog_init(int, char*);
RPY_EXTERN void jitlog_try_init_using_env(void);
+RPY_EXTERN int jitlog_filter(int tag);
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit