Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r66100:5b2ef39d2fc9
Date: 2013-08-12 18:41 -0400
http://bitbucket.org/pypy/pypy/changeset/5b2ef39d2fc9/
Log: Merged upstream
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
@@ -85,7 +85,7 @@
continue
e = elem.split("\t")
adr = e[0]
- v = " ".join(e[2:])
+ v = elem # --- more compactly: " ".join(e[2:])
if not start:
start = int(adr.strip(":"), 16)
ofs = int(adr.strip(":"), 16) - start
@@ -379,15 +379,16 @@
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), truncate_addr=False)
dumps = {}
- for entry in extract_category(log, 'jit-backend-dump'):
- backend, _, dump, _ = entry.split("\n")
- _, addr, _, data = re.split(" +", dump)
- backend_name = backend.split(" ")[1]
- addr = int(addr[1:], 16)
- if addr in addrs and addrs[addr]:
- name = addrs[addr].pop(0) # they should come in order
- dumps[name] = (backend_name, addr, data)
+ 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 = []
for entry in extract_category(log, 'jit-log-opt'):
parser = ParserCls(entry, None, {}, 'lltype', None,
diff --git a/rpython/jit/backend/arm/assembler.py
b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -62,7 +62,8 @@
self.current_clt = looptoken.compiled_loop_token
self.mc = InstrBuilder(self.cpu.cpuinfo.arch_version)
self.pending_guards = []
- assert self.datablockwrapper is None
+ #assert self.datablockwrapper is None --- but obscure case
+ # possible, e.g. getting MemoryError and continuing
allblocks = self.get_asmmemmgr_blocks(looptoken)
self.datablockwrapper = MachineDataBlockWrapper(self.cpu.asmmemmgr,
allblocks)
@@ -76,7 +77,6 @@
self._regalloc = None
self.mc = None
self.pending_guards = None
- assert self.datablockwrapper is None
def setup_failure_recovery(self):
self.failure_recovery_code = [0, 0, 0, 0]
diff --git a/rpython/jit/backend/arm/regalloc.py
b/rpython/jit/backend/arm/regalloc.py
--- a/rpython/jit/backend/arm/regalloc.py
+++ b/rpython/jit/backend/arm/regalloc.py
@@ -1196,9 +1196,8 @@
def prepare_op_guard_not_forced_2(self, op, fcond):
self.rm.before_call(op.getfailargs(), save_all_regs=True)
- fail_locs = [self.loc(v) for v in op.getfailargs()]
- self.assembler.store_force_descr(op, fail_locs,
- self.fm.get_frame_depth())
+ fail_locs = self._prepare_guard(op)
+ self.assembler.store_force_descr(op, fail_locs[1:], fail_locs[0].value)
self.possibly_free_vars(op.getfailargs())
def prepare_guard_call_may_force(self, op, guard_op, fcond):
diff --git a/rpython/jit/backend/tool/viewcode.py
b/rpython/jit/backend/tool/viewcode.py
--- a/rpython/jit/backend/tool/viewcode.py
+++ b/rpython/jit/backend/tool/viewcode.py
@@ -240,7 +240,7 @@
self.backend_name = None
self.executable_name = None
- def parse(self, f, textonly=True):
+ def parse(self, f, textonly=True, truncate_addr=True):
for line in f:
if line.startswith('BACKEND '):
self.backend_name = line.split(' ')[1].strip()
@@ -250,7 +250,11 @@
assert pieces[2].startswith('+')
if len(pieces) == 3:
continue # empty line
- baseaddr = long(pieces[1][1:], 16) & 0xFFFFFFFFL
+ baseaddr = long(pieces[1][1:], 16)
+ if truncate_addr:
+ baseaddr &= 0xFFFFFFFFL
+ elif baseaddr < 0:
+ baseaddr += (2 * sys.maxint + 2)
offset = int(pieces[2][1:])
addr = baseaddr + offset
data = pieces[3].replace(':', '').decode('hex')
@@ -268,14 +272,21 @@
pieces = line.split(None, 3)
assert pieces[1].startswith('@')
assert pieces[2].startswith('+')
- baseaddr = long(pieces[1][1:], 16) & 0xFFFFFFFFL
+ baseaddr = long(pieces[1][1:], 16)
+ if truncate_addr:
+ baseaddr &= 0xFFFFFFFFL
+ elif baseaddr < 0:
+ baseaddr += (2 * sys.maxint + 2)
offset = int(pieces[2][1:])
addr = baseaddr + offset
self.logentries[addr] = pieces[3]
elif line.startswith('SYS_EXECUTABLE '):
filename = line[len('SYS_EXECUTABLE '):].strip()
if filename != self.executable_name and filename != '??':
- self.symbols.update(load_symbols(filename))
+ try:
+ self.symbols.update(load_symbols(filename))
+ except Exception as e:
+ print e
self.executable_name = filename
def find_cross_references(self):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit