[pypy-svn] r68620 - in pypy/trunk/pypy/jit: backend metainterp/test
pedronis at codespeak.net
pedronis at codespeak.net
Mon Oct 19 11:51:16 CEST 2009
Author: pedronis
Date: Mon Oct 19 11:51:16 2009
New Revision: 68620
Modified:
pypy/trunk/pypy/jit/backend/loopviewer.py
pypy/trunk/pypy/jit/backend/showstats.py
pypy/trunk/pypy/jit/metainterp/test/oparser.py
pypy/trunk/pypy/jit/metainterp/test/test_oparser.py
Log:
(cfbolz, pedronis): refactor the oparser a bit to make it possible to not give
it a namespace.
Modified: pypy/trunk/pypy/jit/backend/loopviewer.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/loopviewer.py (original)
+++ pypy/trunk/pypy/jit/backend/loopviewer.py Mon Oct 19 11:51:16 2009
@@ -9,17 +9,11 @@
from pypy.jit.metainterp.history import ConstInt
from pypy.rpython.lltypesystem import llmemory, lltype
-class AllDict(dict):
- def __getitem__(self, item):
- return lltype.nullptr(llmemory.GCREF.TO)
-
-alldict = AllDict()
-
def main(loopnum, loopfile):
data = py.path.local(loopfile).read()
loops = split_logs_into_loops(data)
inp = loops[loopnum]
- loop = parse(inp, namespace=alldict)
+ loop = parse(inp, no_namespace=True)
loop.show()
if __name__ == '__main__':
Modified: pypy/trunk/pypy/jit/backend/showstats.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/showstats.py (original)
+++ pypy/trunk/pypy/jit/backend/showstats.py Mon Oct 19 11:51:16 2009
@@ -5,16 +5,10 @@
from pypy.jit.metainterp.resoperation import rop
from pypy.rpython.lltypesystem import lltype, llmemory
-class AllDict(dict):
- def __getitem__(self, item):
- return lltype.nullptr(llmemory.GCREF.TO)
-
-alldict = AllDict()
-
def main(argv):
parts = split_logs_into_loops(py.path.local(argv[0]).read())
for oplist in parts:
- loop = parse(oplist, namespace=alldict)
+ loop = parse(oplist, no_namespace=True)
num_ops = 0
num_dmp = 0
num_guards = 0
Modified: pypy/trunk/pypy/jit/metainterp/test/oparser.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/oparser.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/oparser.py Mon Oct 19 11:51:16 2009
@@ -50,18 +50,45 @@
class OpParser(object):
- def __init__(self, descr, cpu, namespace, type_system, boxkinds,
+ def __init__(self, input, cpu, namespace, type_system, boxkinds,
invent_fail_descr=default_fail_descr):
- self.descr = descr
+ self.input = input
self.vars = {}
self.cpu = cpu
- self.consts = namespace
+ self._consts = namespace
self.type_system = type_system
self.boxkinds = boxkinds or {}
- self._cache = namespace.setdefault('_CACHE_', {})
+ if namespace is not None:
+ self._cache = namespace.setdefault('_CACHE_', {})
+ else:
+ self._cache = {}
self.invent_fail_descr = invent_fail_descr
self.looptoken = LoopToken()
+ def get_const(self, name, typ):
+ if self._consts is None:
+ return name
+ obj = self._consts[name]
+ if self.type_system == 'lltype':
+ if typ == 'ptr':
+ return ConstPtr(obj)
+ else:
+ assert typ == 'class'
+ return ConstAddr(llmemory.cast_ptr_to_adr(obj),
+ self.cpu)
+ else:
+ if typ == 'ptr':
+ return ConstObj(obj)
+ else:
+ assert typ == 'class'
+ return ConstObj(ootype.cast_to_object(obj))
+
+ def get_descr(self, poss_descr):
+ if poss_descr.startswith('<'):
+ return None
+ else:
+ return self._consts[poss_descr]
+
def box_for_var(self, elem):
try:
return self._cache[self.type_system, elem]
@@ -122,11 +149,7 @@
llstr(info)))
if arg.startswith('ConstClass('):
name = arg[len('ConstClass('):-1]
- if self.type_system == 'lltype':
- return ConstAddr(llmemory.cast_ptr_to_adr(self.consts[name]),
- self.cpu)
- else:
- return ConstObj(ootype.cast_to_object(self.consts[name]))
+ return self.get_const(name, 'class')
elif arg == 'None':
return None
elif arg == 'NULL':
@@ -136,10 +159,7 @@
return ConstObj(ConstObj.value)
elif arg.startswith('ConstPtr('):
name = arg[len('ConstPtr('):-1]
- if self.type_system == 'lltype':
- return ConstPtr(self.consts[name])
- else:
- return ConstObj(self.consts[name])
+ return self.get_const(name, 'ptr')
return self.vars[arg]
def parse_op(self, line):
@@ -168,10 +188,7 @@
poss_descr = allargs[-1].strip()
if poss_descr.startswith('descr='):
- if poss_descr.startswith('descr=<'):
- descr = None
- else:
- descr = self.consts[poss_descr[len('descr='):]]
+ descr = self.get_descr(poss_descr[len('descr='):])
allargs = allargs[:-1]
for arg in allargs:
arg = arg.strip()
@@ -232,7 +249,7 @@
return self.parse_op_no_result(line)
def parse(self):
- lines = self.descr.splitlines()
+ lines = self.input.splitlines()
ops = []
newlines = []
for line in lines:
@@ -284,11 +301,12 @@
inpargs = self.parse_header_line(line[1:-1])
return base_indent, inpargs
-def parse(descr, cpu=None, namespace=None, type_system='lltype',
- boxkinds=None, invent_fail_descr=default_fail_descr):
- if namespace is None:
+def parse(input, cpu=None, namespace=None, type_system='lltype',
+ boxkinds=None, invent_fail_descr=default_fail_descr,
+ no_namespace=False):
+ if namespace is None and not no_namespace:
namespace = {}
- return OpParser(descr, cpu, namespace, type_system, boxkinds,
+ return OpParser(input, cpu, namespace, type_system, boxkinds,
invent_fail_descr).parse()
def pure_parse(*args, **kwds):
Modified: pypy/trunk/pypy/jit/metainterp/test/test_oparser.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_oparser.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_oparser.py Mon Oct 19 11:51:16 2009
@@ -161,8 +161,7 @@
loop = parse(x)
# assert did not explode
-def test_split_logs_into_loops():
- text = '''\
+examplelog = '''\
# Loop0 (loop), 12 ops
[i0, i1]
debug_merge_point('(no jitdriver.get_printable_location!)')
@@ -220,12 +219,19 @@
debug_merge_point('(no jitdriver.get_printable_location!)')
jump(i6, i4, descr=<Loop0>)
'''
- parts = split_logs_into_loops(text)
+
+def test_split_logs_into_loops():
+ parts = split_logs_into_loops(examplelog)
assert len(parts) == 5
- assert "\n".join(parts) == text.strip()
+ assert "\n".join(parts) == examplelog.strip()
for part, typ in zip(parts,
["Loop0", "Loop1",
"bridge out of Guard5",
"bridge out of Guard9",
"bridge out of Guard12"]):
assert part.startswith("# %s" % typ)
+
+def test_parse_no_namespace():
+ parts = split_logs_into_loops(examplelog)
+ for part in parts:
+ loop = parse(part, no_namespace=True)
More information about the Pypy-commit
mailing list