[pypy-svn] r74726 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test
arigo at codespeak.net
arigo at codespeak.net
Tue May 25 12:18:32 CEST 2010
Author: arigo
Date: Tue May 25 12:18:30 2010
New Revision: 74726
Modified:
pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitcode.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py
Log:
* more debugging support in dump()
* replace enumerate_live_vars() with get_live_vars_info()
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py Tue May 25 12:18:30 2010
@@ -21,7 +21,9 @@
it inside the 'jitcode'. If jitcode is None, make a new one.
"""
self.setup()
+ ssarepr._insns_pos = []
for insn in ssarepr.insns:
+ ssarepr._insns_pos.append(len(self.code))
self.write_insn(insn)
self.fix_labels()
self.check_result()
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/flatten.py Tue May 25 12:18:30 2010
@@ -7,6 +7,7 @@
def __init__(self, name):
self.name = name
self.insns = []
+ self._insns_pos = None # after being assembled
class Label(object):
def __init__(self, name):
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py Tue May 25 12:18:30 2010
@@ -52,7 +52,9 @@
insns = ssarepr.insns
if insns and insns[-1] == ('---',):
insns = insns[:-1]
- for asm in insns:
+ for i, asm in enumerate(insns):
+ if ssarepr._insns_pos:
+ print >> output, '%4d ' % ssarepr._insns_pos[i],
if isinstance(asm[0], Label):
if asm[0].name in seenlabels:
print >> output, '%s:' % getlabelname(asm[0])
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitcode.py Tue May 25 12:18:30 2010
@@ -47,39 +47,25 @@
def has_liveness_info(self, pc):
return pc in self.liveness
- def enumerate_live_vars(self, pc, callback, arg,
- registers_i, registers_r, registers_f):
- # 'pc' gives a position in this bytecode. This invokes
- # 'callback' for each variable that is live across the
- # instruction boundary at 'pc'. More precisely,
- # this invokes 'callback(arg, box)' where 'box' comes from one
- # of the three lists of registers.
+ def get_live_vars_info(self, pc):
+ # 'pc' gives a position in this bytecode. This returns an object
+ # that describes all variables that are live across the instruction
+ # boundary at 'pc'. To decode the object, use the global functions
+ # 'get_register_{count,index}_{i,r,f}()'.
if not we_are_translated() and pc not in self.liveness:
self._missing_liveness(pc)
- live_i, live_r, live_f = self.liveness[pc] # XXX compactify!!
- for c in live_i:
- x = callback(arg, registers_i[ord(c)])
- assert x is None
- for c in live_r:
- x = callback(arg, registers_r[ord(c)])
- assert x is None
- for c in live_f:
- x = callback(arg, registers_f[ord(c)])
- assert x is None
- enumerate_live_vars._annspecialcase_ = 'specialize:arg(2)'
+ return self.liveness[pc] # XXX compactify!!
def _live_vars(self, pc):
# for testing only
- class Names:
- def __init__(self, kind):
- self.kind = kind
- def __getitem__(self, index):
- return '%%%s%d' % (self.kind, index)
- lst = []
- self.enumerate_live_vars(pc, list.append, lst,
- Names('i'), Names('r'), Names('f'))
- lst.sort()
- return ' '.join(lst)
+ info = self.get_live_vars_info(pc)
+ lst_i = ['%%i%d' % get_register_index_i(info, index)
+ for index in range(get_register_count_i(info))]
+ lst_r = ['%%r%d' % get_register_index_r(info, index)
+ for index in range(get_register_count_r(info))]
+ lst_f = ['%%f%d' % get_register_index_f(info, index)
+ for index in range(get_register_count_f(info))]
+ return ' '.join(lst_i + lst_r + lst_f)
def _missing_liveness(self, pc):
raise MissingLiveness("missing liveness[%d]\n%s" % (pc, self.dump()))
@@ -116,3 +102,18 @@
def __repr__(self):
dict = getattr(self, 'dict', '?')
return '<SwitchDictDescr %s>' % (dict,)
+
+
+def get_register_count_i((live_i, live_r, live_f)):
+ return len(live_i)
+def get_register_count_r((live_i, live_r, live_f)):
+ return len(live_r)
+def get_register_count_f((live_i, live_r, live_f)):
+ return len(live_f)
+
+def get_register_index_i((live_i, live_r, live_f), index):
+ return ord(live_i[index])
+def get_register_index_r((live_i, live_r, live_f), index):
+ return ord(live_r[index])
+def get_register_index_f((live_i, live_r, live_f), index):
+ return ord(live_f[index])
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitcode.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitcode.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitcode.py Tue May 25 12:18:30 2010
@@ -21,14 +21,4 @@
j.setup(liveness={5: (" A", "b", "CD")})
assert j.has_liveness_info(5)
assert not j.has_liveness_info(4)
- #
- seen = []
- def callback(arg, value):
- assert arg == "foo"
- seen.append(value)
- #
- j.enumerate_live_vars(5, callback, "foo",
- {ord(" "): "i10", ord("A"): "i20"},
- {ord("b"): "r30"},
- {ord("C"): "f40", ord("D"): "f50"})
- assert seen == ["i10", "i20", "r30", "f40", "f50"]
+ assert j._live_vars(5) == "%i32 %i65 %r98 %f67 %f68"
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py Tue May 25 12:18:30 2010
@@ -44,6 +44,7 @@
def builtin_test(oopspec_name, args, RESTYPE, expected):
v_result = varoftype(RESTYPE)
tr = Transformer(FakeCPU(), FakeCallControl())
+ tr.immutable_arrays = {}
if '/' in oopspec_name:
oopspec_name, property = oopspec_name.split('/')
def force_flags(op):
More information about the Pypy-commit
mailing list