def import_log(logname, ParserCls=SimpleParser): log = parse_log_file(logname) hex_re = '0x(-?[\da-f]+)' addrs = {} for entry in extract_category(log, 'jit-backend-addr'): m = re.search('bootstrap ' + hex_re, entry) if not m: # a bridge m = re.search('has address ' + hex_re, entry) addr = int(m.group(1), 16) entry = entry.lower() m = re.search('guard ' + hex_re, entry) name = 'guard ' + m.group(1) else: name = entry[:entry.find('(') - 1].lower() addr = int(m.group(1), 16) addrs.setdefault(addr, []).append(name) from rpython.jit.backend.tool.viewcode import World world = World() for entry in extract_category(log, 'jit-backend-dump'): world.parse(entry.splitlines(True)) dumps = {} for r in world.ranges: if r.addr in addrs and addrs[r.addr]: name = addrs[r.addr].pop(0) # they should come in order data = r.data.encode('hex') # backward compatibility dumps[name] = (world.backend_name, r.addr, data) loops = [] cat = extract_category(log, 'jit-log-opt') if not cat: cat = extract_category(log, 'jit-log-rewritten') if not cat: cat = extract_category(log, 'jit-log-noopt') for entry in cat: parser = ParserCls(entry, None, {}, 'lltype', None, nonstrict=True) loop = parser.parse() comm = loop.comment comm = comm.lower() if comm.startswith('# bridge'): m = re.search('guard 0x(-?[\da-f]+)', comm) name = 'guard ' + m.group(1) elif "(" in comm: name = comm[2:comm.find('(') - 1] else: name = " ".join(comm[2:].split(" ", 2)[:2]) if name in dumps: bname, start_ofs, dump = dumps[name] loop.force_asm = ( lambda dump=dump, start_ofs=start_ofs, bname=bname, loop=loop: parser.postprocess(loop, backend_tp=bname, backend_dump=dump, dump_start=start_ofs)) loops += split_trace(loop) return log, loops
def import_log(logname, ParserCls=SimpleParser): log = parse_log_file(logname) hex_re = '0x(-?[\da-f]+)' addrs = {} for entry in extract_category(log, 'jit-backend-addr'): m = re.search('bootstrap ' + hex_re, entry) if not m: # a bridge m = re.search('has address ' + hex_re, entry) addr = int(m.group(1), 16) entry = entry.lower() m = re.search('guard ' + hex_re, entry) name = 'guard ' + m.group(1) else: name = entry[:entry.find('(') - 1].lower() addr = int(m.group(1), 16) addrs.setdefault(addr, []).append(name) from rpython.jit.backend.tool.viewcode import World world = World() for entry in extract_category(log, 'jit-backend-dump'): world.parse(entry.splitlines(True)) dumps = {} for r in world.ranges: if r.addr in addrs and addrs[r.addr]: name = addrs[r.addr].pop(0) # they should come in order data = r.data.encode('hex') # backward compatibility dumps[name] = (world.backend_name, r.addr, data) loops = [] cat = extract_category(log, 'jit-log-opt') if not cat: extract_category(log, 'jit-log-rewritten') if not cat: extract_category(log, 'jit-log-noopt') for entry in cat: parser = ParserCls(entry, None, {}, 'lltype', None, nonstrict=True) loop = parser.parse() comm = loop.comment comm = comm.lower() if comm.startswith('# bridge'): m = re.search('guard 0x(-?[\da-f]+)', comm) name = 'guard ' + m.group(1) elif "(" in comm: name = comm[2:comm.find('(')-1] else: name = " ".join(comm[2:].split(" ", 2)[:2]) if name in dumps: bname, start_ofs, dump = dumps[name] loop.force_asm = (lambda dump=dump, start_ofs=start_ofs, bname=bname, loop=loop: parser.postprocess(loop, backend_tp=bname, backend_dump=dump, dump_start=start_ofs)) loops += split_trace(loop) return log, loops
def import_log(logname, ParserCls=SimpleParser): log = parse_log_file(logname) addrs = parse_addresses(extract_category(log, 'jit-backend-addr')) from rpython.jit.backend.tool.viewcode import World world = World() for entry in extract_category(log, 'jit-backend-dump'): world.parse(entry.splitlines(True)) dumps = {} for r in world.ranges: for pos1 in range(r.addr, r.addr + len(r.data)): if pos1 in addrs and addrs[pos1]: name = addrs[pos1].pop(0) # they should come in order data = r.data.encode('hex') dumps[name] = (world.backend_name, r.addr, data) loops = [] cat = extract_category(log, 'jit-log-opt') if not cat: cat = extract_category(log, 'jit-log-rewritten') if not cat: cat = extract_category(log, 'jit-log-noopt') for entry in cat: parser = ParserCls(entry, None, {}, 'lltype', None, nonstrict=True) loop = parser.parse() comm = loop.comment comm = comm.lower() if comm.startswith('# bridge'): m = re.search('guard 0x(-?[\da-f]+)', comm) name = 'guard ' + m.group(1) elif "(" in comm: name = comm[2:comm.find('(')-1] else: name = " ".join(comm[2:].split(" ", 2)[:2]) if name in dumps: bname, start_ofs, dump = dumps[name] loop.force_asm = (lambda dump=dump, start_ofs=start_ofs, bname=bname, loop=loop: parser.postprocess(loop, backend_tp=bname, backend_dump=dump, dump_start=start_ofs)) loops += split_trace(loop) return log, loops