[pypy-svn] r68816 - in pypy/branch/logging/pypy/jit: backend metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Wed Oct 28 13:21:44 CET 2009
Author: arigo
Date: Wed Oct 28 13:21:44 2009
New Revision: 68816
Modified:
pypy/branch/logging/pypy/jit/backend/loopviewer.py
pypy/branch/logging/pypy/jit/metainterp/test/oparser.py
Log:
Fix loopviewer.py. Also give it the option "-n"
to view the unoptimized loops instead of the
optimized ones.
Modified: pypy/branch/logging/pypy/jit/backend/loopviewer.py
==============================================================================
--- pypy/branch/logging/pypy/jit/backend/loopviewer.py (original)
+++ pypy/branch/logging/pypy/jit/backend/loopviewer.py Wed Oct 28 13:21:44 2009
@@ -1,29 +1,35 @@
#!/usr/bin/env python
-""" Usage: loopviewer.py [loopnum] loopfile
+""" Usage: loopviewer.py [-i# -n] loopfile
+ -i: specifies the loop number, default to the last one
+ -n: show the unoptimized loops instead of the optimized ones
"""
import autopath
import py
import sys
-from pypy.jit.metainterp.test.oparser import parse, split_logs_into_loops
+from getopt import gnu_getopt
+from pypy.rlib.rlog_parsing import extract_sections
+from pypy.jit.metainterp.test.oparser import parse
from pypy.jit.metainterp.history import ConstInt
from pypy.rpython.lltypesystem import llmemory, lltype
-def main(loopnum, loopfile):
- data = py.path.local(loopfile).read()
- loops = split_logs_into_loops(data)
+def main(loopfile, loopnum=-1, noopt=False):
+ if noopt:
+ word = 'noopt'
+ else:
+ word = 'opt'
+ loops = list(extract_sections(loopfile, 'jit-log-%s-*' % word))
inp = loops[loopnum]
- loop = parse(inp, no_namespace=True)
+ loop = parse(inp, no_namespace=True, enforce_fail_args=False)
loop.show()
if __name__ == '__main__':
- if len(sys.argv) == 2:
- loopnum = -1
- loopfile = sys.argv[1]
- elif len(sys.argv) == 3:
- loopnum = int(sys.argv[1])
- loopfile = sys.argv[2]
- else:
+ options, args = gnu_getopt(sys.argv[1:], 'i:n')
+ if len(args) != 1:
print __doc__
sys.exit(1)
- main(loopnum, loopfile)
+ [loopfile] = args
+ options = dict(options)
+ loopnum = int(options.get('-i', -1))
+ noopt = '-n' in options
+ main(loopfile, loopnum=loopnum, noopt=noopt)
Modified: pypy/branch/logging/pypy/jit/metainterp/test/oparser.py
==============================================================================
--- pypy/branch/logging/pypy/jit/metainterp/test/oparser.py (original)
+++ pypy/branch/logging/pypy/jit/metainterp/test/oparser.py Wed Oct 28 13:21:44 2009
@@ -51,7 +51,7 @@
class OpParser(object):
def __init__(self, input, cpu, namespace, type_system, boxkinds,
- invent_fail_descr=default_fail_descr):
+ invent_fail_descr=default_fail_descr, enforce_fail_args=True):
self.input = input
self.vars = {}
self.cpu = cpu
@@ -63,6 +63,7 @@
else:
self._cache = {}
self.invent_fail_descr = invent_fail_descr
+ self.enforce_fail_args = enforce_fail_args
self.looptoken = LoopToken()
def get_const(self, name, typ):
@@ -203,8 +204,12 @@
i = line.find('[', endnum) + 1
j = line.find(']', i)
if i <= 0 or j <= 0:
- raise ParseError("missing fail_args for guard operation")
- fail_args = []
+ if self.enforce_fail_args:
+ raise ParseError("missing fail_args for guard operation")
+ i = j = -1
+ fail_args = None
+ else:
+ fail_args = []
if i < j:
for arg in line[i:j].split(','):
arg = arg.strip()
@@ -306,11 +311,11 @@
def parse(input, cpu=None, namespace=None, type_system='lltype',
boxkinds=None, invent_fail_descr=default_fail_descr,
- no_namespace=False):
+ no_namespace=False, enforce_fail_args=True):
if namespace is None and not no_namespace:
namespace = {}
return OpParser(input, cpu, namespace, type_system, boxkinds,
- invent_fail_descr).parse()
+ invent_fail_descr, enforce_fail_args).parse()
def pure_parse(*args, **kwds):
kwds['invent_fail_descr'] = None
More information about the Pypy-commit
mailing list