[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