[pypy-svn] r78019 - in pypy/branch/leak-finder: dotviewer pypy/jit/codewriter/test pypy/jit/metainterp pypy/rlib/rsre pypy/rlib/rsre/test

arigo at codespeak.net arigo at codespeak.net
Sat Oct 16 17:47:50 CEST 2010


Author: arigo
Date: Sat Oct 16 17:47:48 2010
New Revision: 78019

Removed:
   pypy/branch/leak-finder/pypy/rlib/rsre/test/conftest.py
   pypy/branch/leak-finder/pypy/rlib/rsre/test/test_zjit.py
Modified:
   pypy/branch/leak-finder/dotviewer/drawgraph.py
   pypy/branch/leak-finder/pypy/jit/codewriter/test/test_jtransform.py
   pypy/branch/leak-finder/pypy/jit/metainterp/graphpage.py
   pypy/branch/leak-finder/pypy/jit/metainterp/resoperation.py
   pypy/branch/leak-finder/pypy/jit/metainterp/warmspot.py
   pypy/branch/leak-finder/pypy/rlib/rsre/rsre_core.py
Log:
Oups!  Wrong branch.  Thanks agaynor.


Modified: pypy/branch/leak-finder/dotviewer/drawgraph.py
==============================================================================
--- pypy/branch/leak-finder/dotviewer/drawgraph.py	(original)
+++ pypy/branch/leak-finder/dotviewer/drawgraph.py	Sat Oct 16 17:47:48 2010
@@ -423,43 +423,20 @@
         else:
             for line in lines:
                 raw_line = line.replace('\\l','').replace('\r','') or ' '
-                if '\f' in raw_line:   # grayed out parts of the line
-                    imgs = []
-                    graytext = True
-                    h = 16
-                    w_total = 0
-                    for linepart in raw_line.split('\f'):
-                        graytext = not graytext
-                        if not linepart.strip():
-                            continue
-                        if graytext:
-                            fgcolor = (128, 160, 160)
-                        else:
-                            fgcolor = (0, 0, 0)
-                        img = TextSnippet(self, linepart, fgcolor, bgcolor)
-                        imgs.append((w_total, img))
-                        w, h = img.get_size()
-                        w_total += w
-                    if w_total > wmax: wmax = w_total
-                    def cmd(imgs=imgs, y=hmax):
-                        for x, img in imgs:
-                            img.draw(xleft+x, ytop+y)
+                img = TextSnippet(self, raw_line, (0, 0, 0), bgcolor)
+                w, h = img.get_size()
+                if w>wmax: wmax = w
+                if raw_line.strip():
+                    if line.endswith('\\l'):
+                        def cmd(img=img, y=hmax):
+                            img.draw(xleft, ytop+y)
+                    elif line.endswith('\r'):
+                        def cmd(img=img, y=hmax, w=w):
+                            img.draw(xright-w, ytop+y)
+                    else:
+                        def cmd(img=img, y=hmax, w=w):
+                            img.draw(xcenter-w//2, ytop+y)
                     commands.append(cmd)
-                else:
-                    img = TextSnippet(self, raw_line, (0, 0, 0), bgcolor)
-                    w, h = img.get_size()
-                    if w>wmax: wmax = w
-                    if raw_line.strip():
-                        if line.endswith('\\l'):
-                            def cmd(img=img, y=hmax):
-                                img.draw(xleft, ytop+y)
-                        elif line.endswith('\r'):
-                            def cmd(img=img, y=hmax, w=w):
-                                img.draw(xright-w, ytop+y)
-                        else:
-                            def cmd(img=img, y=hmax, w=w):
-                                img.draw(xcenter-w//2, ytop+y)
-                        commands.append(cmd)
                 hmax += h
                 #hmax += 8
 

Modified: pypy/branch/leak-finder/pypy/jit/codewriter/test/test_jtransform.py
==============================================================================
--- pypy/branch/leak-finder/pypy/jit/codewriter/test/test_jtransform.py	(original)
+++ pypy/branch/leak-finder/pypy/jit/codewriter/test/test_jtransform.py	Sat Oct 16 17:47:48 2010
@@ -687,40 +687,6 @@
     assert block.operations[1].result is None
     assert block.exits[0].args == [v1]
 
-def test_jit_merge_point_1():
-    class FakeJitDriverSD:
-        index = 42
-        class jitdriver:
-            greens = ['green1', 'green2', 'voidgreen3']
-            reds = ['red1', 'red2', 'voidred3']
-    jd = FakeJitDriverSD()
-    v1 = varoftype(lltype.Signed)
-    v2 = varoftype(lltype.Signed)
-    vvoid1 = varoftype(lltype.Void)
-    v3 = varoftype(lltype.Signed)
-    v4 = varoftype(lltype.Signed)
-    vvoid2 = varoftype(lltype.Void)
-    v5 = varoftype(lltype.Void)
-    op = SpaceOperation('jit_marker',
-                        [Constant('jit_merge_point', lltype.Void),
-                         Constant(jd.jitdriver, lltype.Void),
-                         v1, v2, vvoid1, v3, v4, vvoid2], v5)
-    tr = Transformer()
-    tr.portal_jd = jd
-    oplist = tr.rewrite_operation(op)
-    assert len(oplist) == 6
-    assert oplist[0].opname == '-live-'
-    assert oplist[1].opname == 'int_guard_value'
-    assert oplist[1].args   == [v1]
-    assert oplist[2].opname == '-live-'
-    assert oplist[3].opname == 'int_guard_value'
-    assert oplist[3].args   == [v2]
-    assert oplist[4].opname == 'jit_merge_point'
-    assert oplist[4].args[0].value == 42
-    assert list(oplist[4].args[1]) == [v1, v2]
-    assert list(oplist[4].args[4]) == [v3, v4]
-    assert oplist[5].opname == '-live-'
-
 def test_int_abs():
     v1 = varoftype(lltype.Signed)
     v2 = varoftype(lltype.Signed)

Modified: pypy/branch/leak-finder/pypy/jit/metainterp/graphpage.py
==============================================================================
--- pypy/branch/leak-finder/pypy/jit/metainterp/graphpage.py	(original)
+++ pypy/branch/leak-finder/pypy/jit/metainterp/graphpage.py	Sat Oct 16 17:47:48 2010
@@ -153,7 +153,7 @@
         opindex = opstartindex
         while True:
             op = operations[opindex]
-            lines.append(op.repr(graytext=True))
+            lines.append(repr(op))
             if is_interesting_guard(op):
                 tgt = op.getdescr()._debug_suboperations[0]
                 tgt_g, tgt_i = self.all_operations[tgt]

Modified: pypy/branch/leak-finder/pypy/jit/metainterp/resoperation.py
==============================================================================
--- pypy/branch/leak-finder/pypy/jit/metainterp/resoperation.py	(original)
+++ pypy/branch/leak-finder/pypy/jit/metainterp/resoperation.py	Sat Oct 16 17:47:48 2010
@@ -93,7 +93,7 @@
     def __repr__(self):
         return self.repr()
 
-    def repr(self, graytext=False):
+    def repr(self):
         # RPython-friendly version
         if self.result is not None:
             sres = '%s = ' % (self.result,)
@@ -101,8 +101,6 @@
             sres = ''
         if self.name:
             prefix = "%s:%s   " % (self.name, self.pc)
-            if graytext:
-                prefix = "\f%s\f" % prefix
         else:
             prefix = ""
         args = self.getarglist()

Modified: pypy/branch/leak-finder/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/leak-finder/pypy/jit/metainterp/warmspot.py	(original)
+++ pypy/branch/leak-finder/pypy/jit/metainterp/warmspot.py	Sat Oct 16 17:47:48 2010
@@ -211,9 +211,9 @@
                 "there are multiple jit_merge_points with the same jitdriver"
 
     def split_graph_and_record_jitdriver(self, graph, block, pos):
-        op = block.operations[pos]
         jd = JitDriverStaticData()
-        jd._jit_merge_point_pos = (graph, op)
+        jd._jit_merge_point_pos = (graph, block, pos)
+        op = block.operations[pos]
         args = op.args[2:]
         s_binding = self.translator.annotator.binding
         jd._portal_args_s = [s_binding(v) for v in args]
@@ -457,7 +457,8 @@
             self.make_args_specification(jd)
 
     def make_args_specification(self, jd):
-        graph, op = jd._jit_merge_point_pos
+        graph, block, index = jd._jit_merge_point_pos
+        op = block.operations[index]
         greens_v, reds_v = support.decode_hp_hint_args(op)
         ALLARGS = [v.concretetype for v in (greens_v + reds_v)]
         jd._green_args_spec = [v.concretetype for v in greens_v]
@@ -708,14 +709,8 @@
         # ____________________________________________________________
         # Now mutate origportalgraph to end with a call to portal_runner_ptr
         #
-        _, op = jd._jit_merge_point_pos
-        for origblock in origportalgraph.iterblocks():
-            if op in origblock.operations:
-                break
-        else:
-            assert False, "lost the operation %r in the graph %r" % (
-                op, origportalgraph)
-        origindex = origblock.operations.index(op)
+        _, origblock, origindex = jd._jit_merge_point_pos
+        op = origblock.operations[origindex]
         assert op.opname == 'jit_marker'
         assert op.args[0].value == 'jit_merge_point'
         greens_v, reds_v = support.decode_hp_hint_args(op)

Modified: pypy/branch/leak-finder/pypy/rlib/rsre/rsre_core.py
==============================================================================
--- pypy/branch/leak-finder/pypy/rlib/rsre/rsre_core.py	(original)
+++ pypy/branch/leak-finder/pypy/rlib/rsre/rsre_core.py	Sat Oct 16 17:47:48 2010
@@ -4,7 +4,6 @@
 from pypy.rlib.rsre import rsre_char
 from pypy.tool.sourcetools import func_with_new_name
 from pypy.rlib.objectmodel import we_are_translated
-from pypy.rlib import jit
 
 
 OPCODE_FAILURE            = 0
@@ -57,18 +56,15 @@
     _seen_specname[specname] = True
     # Install a copy of the function under the name '_spec_funcname' in each
     # concrete subclass
-    specialized_methods = []
     for prefix, concreteclass in [('str', StrMatchContext),
                                   ('uni', UnicodeMatchContext)]:
         newfunc = func_with_new_name(func, prefix + specname)
         assert not hasattr(concreteclass, specname)
         setattr(concreteclass, specname, newfunc)
-        specialized_methods.append(newfunc)
     # Return a dispatcher function, specialized on the exact type of 'ctx'
     def dispatch(ctx, *args):
         return getattr(ctx, specname)(*args)
     dispatch._annspecialcase_ = 'specialize:argtype(0)'
-    dispatch._specialized_methods_ = specialized_methods
     return dispatch
 
 # ____________________________________________________________
@@ -79,7 +75,6 @@
 
 class AbstractMatchContext(object):
     """Abstract base class"""
-    _immutable_fields_ = ['pattern[*]', 'flags']
     match_start = 0
     match_end = 0
     match_marks = None
@@ -243,7 +238,6 @@
         self.start_ptr = ptr
         self.start_marks = marks
 
-    @jit.unroll_safe
     def find_first_result(self, ctx):
         ppos = self.ppos
         while ctx.pat(ppos):
@@ -256,8 +250,6 @@
     find_next_result = find_first_result
 
 class RepeatOneMatchResult(MatchResult):
-    jitdriver = jit.JitDriver(greens=['nextppos', 'pattern'],
-                              reds=['ptr', 'self', 'ctx'])
 
     def __init__(self, nextppos, minptr, ptr, marks):
         self.nextppos = nextppos
@@ -267,18 +259,8 @@
 
     def find_first_result(self, ctx):
         ptr = self.start_ptr
-        nextppos = self.nextppos
         while ptr >= self.minptr:
-            #
-            pattern = ctx.pattern
-            self.jitdriver.can_enter_jit(self=self, ptr=ptr, ctx=ctx,
-                                         nextppos=nextppos, pattern=pattern)
-            self.jitdriver.jit_merge_point(self=self, ptr=ptr, ctx=ctx,
-                                           nextppos=nextppos, pattern=pattern)
-            if jit.we_are_jitted():
-                ctx.pattern = pattern
-            #
-            result = sre_match(ctx, nextppos, ptr, self.start_marks)
+            result = sre_match(ctx, self.nextppos, ptr, self.start_marks)
             ptr -= 1
             if result is not None:
                 self.subresult = result
@@ -288,8 +270,6 @@
 
 
 class MinRepeatOneMatchResult(MatchResult):
-    jitdriver = jit.JitDriver(greens=['nextppos', 'ppos3', 'pattern'],
-                              reds=['ptr', 'self', 'ctx'])
 
     def __init__(self, nextppos, ppos3, maxptr, ptr, marks):
         self.nextppos = nextppos
@@ -300,39 +280,27 @@
 
     def find_first_result(self, ctx):
         ptr = self.start_ptr
-        nextppos = self.nextppos
-        ppos3 = self.ppos3
         while ptr <= self.maxptr:
-            #
-            pattern = ctx.pattern
-            self.jitdriver.can_enter_jit(self=self, ptr=ptr, ctx=ctx,
-                                         nextppos=nextppos, pattern=pattern,
-                                         ppos3=ppos3)
-            self.jitdriver.jit_merge_point(self=self, ptr=ptr, ctx=ctx,
-                                           nextppos=nextppos, pattern=pattern,
-                                           ppos3=ppos3)
-            if jit.we_are_jitted():
-                ctx.pattern = pattern
-            #
-            result = sre_match(ctx, nextppos, ptr, self.start_marks)
+            result = sre_match(ctx, self.nextppos, ptr, self.start_marks)
             if result is not None:
                 self.subresult = result
                 self.start_ptr = ptr
                 return self
-            if not self.next_char_ok(ctx, ptr, ppos3):
+            if not self.next_char_ok(ctx, ptr):
                 break
             ptr += 1
 
     def find_next_result(self, ctx):
         ptr = self.start_ptr
-        if not self.next_char_ok(ctx, ptr, self.ppos3):
+        if not self.next_char_ok(ctx, ptr):
             return
         self.start_ptr = ptr + 1
         return self.find_first_result(ctx)
 
-    def next_char_ok(self, ctx, ptr, ppos):
+    def next_char_ok(self, ctx, ptr):
         if ptr == ctx.end:
             return False
+        ppos = self.ppos3
         op = ctx.pat(ppos)
         for op1, (checkerfn, _) in unroll_char_checker:
             if op1 == op:
@@ -461,7 +429,6 @@
 # ____________________________________________________________
 
 @specializectx
- at jit.unroll_safe
 def sre_match(ctx, ppos, ptr, marks):
     """Returns either None or a MatchResult object.  Usually we only need
     the first result, but there is the case of REPEAT...UNTIL where we



More information about the Pypy-commit mailing list