[pypy-commit] pypy default: Fix assembler to differentiate between 3 kinds of counters
fijal
noreply at buildbot.pypy.org
Tue Dec 27 13:14:43 CET 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r50898:b67ec3f6c00f
Date: 2011-12-27 14:13 +0200
http://bitbucket.org/pypy/pypy/changeset/b67ec3f6c00f/
Log: Fix assembler to differentiate between 3 kinds of counters
diff --git a/pypy/jit/backend/x86/assembler.py b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -59,7 +59,8 @@
self.is_guard_not_invalidated = is_guard_not_invalidated
DEBUG_COUNTER = lltype.Struct('DEBUG_COUNTER', ('i', lltype.Signed),
- ('bridge', lltype.Signed), # 0 or 1
+ ('type', lltype.Char), # 'b'ridge, 'l'abel or
+ # 'e'ntry point
('number', lltype.Signed))
class Assembler386(object):
@@ -150,10 +151,12 @@
debug_start('jit-backend-counts')
for i in range(len(self.loop_run_counters)):
struct = self.loop_run_counters[i]
- if not struct.bridge:
+ if struct.type == 'l':
prefix = 'TargetToken(%d)' % struct.number
+ elif struct.type == 'b':
+ prefix = 'bridge ' + str(struct.number)
else:
- prefix = 'bridge ' + str(struct.number)
+ prefix = 'entry ' + str(struct.number)
debug_print(prefix + ':' + str(struct.i))
debug_stop('jit-backend-counts')
@@ -425,7 +428,7 @@
self.setup(looptoken)
if log:
operations = self._inject_debugging_code(looptoken, operations,
- False, looptoken.number)
+ 'e', looptoken.number)
regalloc = RegAlloc(self, self.cpu.translate_support_code)
#
@@ -492,7 +495,7 @@
self.setup(original_loop_token)
if log:
operations = self._inject_debugging_code(faildescr, operations,
- True, descr_number)
+ 'b', descr_number)
arglocs = self.rebuild_faillocs_from_descr(failure_recovery)
if not we_are_translated():
@@ -599,15 +602,15 @@
return self.mc.materialize(self.cpu.asmmemmgr, allblocks,
self.cpu.gc_ll_descr.gcrootmap)
- def _register_counter(self, bridge, number, token):
+ def _register_counter(self, tp, number, token):
# YYY very minor leak -- we need the counters to stay alive
# forever, just because we want to report them at the end
# of the process
struct = lltype.malloc(DEBUG_COUNTER, flavor='raw',
track_allocation=False)
struct.i = 0
- struct.bridge = int(bridge)
- if bridge:
+ struct.type = tp
+ if tp == 'b' or tp == 'e':
struct.number = number
else:
assert token
@@ -657,8 +660,8 @@
targettoken._x86_loop_code += rawstart
self.target_tokens_currently_compiling = None
- def _append_debugging_code(self, operations, bridge, number, token):
- counter = self._register_counter(bridge, number, token)
+ def _append_debugging_code(self, operations, tp, number, token):
+ counter = self._register_counter(tp, number, token)
c_adr = ConstInt(rffi.cast(lltype.Signed, counter))
box = BoxInt()
box2 = BoxInt()
@@ -670,7 +673,7 @@
operations.extend(ops)
@specialize.argtype(1)
- def _inject_debugging_code(self, looptoken, operations, bridge, number):
+ def _inject_debugging_code(self, looptoken, operations, tp, number):
if self._debug:
# before doing anything, let's increase a counter
s = 0
@@ -679,12 +682,12 @@
looptoken._x86_debug_checksum = s
newoperations = []
- self._append_debugging_code(newoperations, bridge, number,
+ self._append_debugging_code(newoperations, tp, number,
None)
for op in operations:
newoperations.append(op)
if op.getopnum() == rop.LABEL:
- self._append_debugging_code(newoperations, bridge, number,
+ self._append_debugging_code(newoperations, 'l', number,
op.getdescr())
operations = newoperations
return operations
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
@@ -546,6 +546,8 @@
struct = self.cpu.assembler.loop_run_counters[0]
assert struct.i == 1
struct = self.cpu.assembler.loop_run_counters[1]
+ assert struct.i == 1
+ struct = self.cpu.assembler.loop_run_counters[2]
assert struct.i == 9
self.cpu.finish_once()
finally:
More information about the pypy-commit
mailing list