Commits

Maciej Fijalkowski committed f4a5a84

Some general progress

  • Participants
  • Parent commits dd437b5

Comments (0)

Files changed (10)

 import inspect
 from pypy.tool.logparser import parse_log_file, extract_category
 from module_finder import load_code
-from loops import NonCodeLoop, parse, slice_debug_merge_points, adjust_bridges
+from loops import parse, slice_debug_merge_points, adjust_bridges
 from storage import LoopStorage
-from display import CodeRepr
+from display import CodeRepr, CodeReprNoFile
 
 from pygments import highlight
 from pygments.lexers import PythonLexer
         self.storage = storage
 
     def index(self):
-        # XXX cache results possibly
         loops = []
         for loop in self.storage.loops:
-            try:
-                loops.append(slice_debug_merge_points(loop.operations))
-            except NonCodeLoop:
-                pass
+            if 'entry bridge' in loop.comment:
+                is_entry = True
+            else:
+                is_entry = False
+            loops.append((is_entry, slice_debug_merge_points(loop.operations)))
         return flask.render_template('index.html', loops=loops)
 
     def loop(self):
         no = int(flask.request.args.get('no', '1'))
-        ops = adjust_bridges(self.storage.loops[no - 1], flask.request.args)
+        orig_loop = self.storage.loops[no - 1]
+        ops = adjust_bridges(orig_loop, flask.request.args)
         loop = slice_debug_merge_points(ops)
         path = flask.request.args.get('path', '').split(',')
         if path:
             if e:
                 loop = loop.chunks[int(e)]
         startline, endline = loop.linerange
-        code = load_code(loop.filename, loop.name, loop.startlineno)
-        source = inspect.getsource(code)
+        if loop.filename is not None:
+            code = load_code(loop.filename, loop.name, loop.startlineno)
+            source = CodeRepr(inspect.getsource(code), code, loop)
+        else:
+            source = CodeReprNoFile(loop)
         d = {'html': flask.render_template('loop.html',
-                                           source=CodeRepr(source, code,
-                                                           loop),
+                                           source=source,
                                            current_loop=no,
                                            upper_path=up,
                                            show_upper_path=bool(path)),
              'scrollto': startline}
         return flask.jsonify(d)
 
-    # def show(self): 
-    #     no = int(flask.request.args.get('no', '1'))       
-
-    # def loop(self):
-    #     no = int(flask.request.args.get('no', '1'))
-    #     scroll_to = int(flask.request.args.get('scroll_to', '0'))
-    #     # gather all functions
-    #     loop = self.storage.loops[no - 1]
-    #             upper_start = loop.chunks[nr - 1].lineno # XXX what if it's
-    #             # also a Function? is it even possible without a bytecode
-    #             # in between?
-    #         loop = loop.chunks[nr]
-    #     startline, endline = loop.linerange
-    #     code = load_code(loop.filename, loop.name, loop.startlineno)
-    #     source = inspect.getsource(code)
-    #     return flask.render_template('loop.html',
-    #                                  source=CodeRepr(source, code, loop),
-    #                                  startline=scroll_to or startline,
-    #                                  current_loop=no,
-    #                                  upper_path=','.join(path[:-1]),
-    #                                  upper_start=upper_start)
-
 def main():
     log = parse_log_file('log')
     storage = LoopStorage()
         else:
             self.chunks = chunks
 
+class CodeReprNoFile(object):
+    firstlineno = 0
+    
+    def __init__(self, loop):
+        self.lines = [LineRepr('', True, loop.chunks)]
+
 class CodeRepr(object):
     """ A representation of a single code object suitable for display
     """
-[34290ea893e] {jit-log-opt-loop
+[33541c9c6843] {jit-log-opt-loop
 # Loop 0 : loop with 21 ops
 [p0, p1, p2, p3, i4, p5, p6, i7]
-debug_merge_point('<code object f, file 'source.py', line 2> #9 LOAD_FAST')
-debug_merge_point('<code object f, file 'source.py', line 2> #12 LOAD_CONST')
-debug_merge_point('<code object f, file 'source.py', line 2> #15 COMPARE_OP')
+debug_merge_point('<code object f, file 'source.py', line 4> #9 LOAD_FAST')
+debug_merge_point('<code object f, file 'source.py', line 4> #12 LOAD_CONST')
+debug_merge_point('<code object f, file 'source.py', line 4> #15 COMPARE_OP')
 i9 = int_lt(i7, 1003)
 guard_true(i9, descr=<Guard2>) [p1, p0, p2, p3, i7]
-debug_merge_point('<code object f, file 'source.py', line 2> #18 JUMP_IF_FALSE')
-debug_merge_point('<code object f, file 'source.py', line 2> #21 POP_TOP')
-debug_merge_point('<code object f, file 'source.py', line 2> #22 LOAD_FAST')
-debug_merge_point('<code object f, file 'source.py', line 2> #25 LOAD_CONST')
-debug_merge_point('<code object f, file 'source.py', line 2> #28 INPLACE_ADD')
+debug_merge_point('<code object f, file 'source.py', line 4> #18 JUMP_IF_FALSE')
+debug_merge_point('<code object f, file 'source.py', line 4> #21 POP_TOP')
+debug_merge_point('<code object f, file 'source.py', line 4> #22 LOAD_FAST')
+debug_merge_point('<code object f, file 'source.py', line 4> #25 LOAD_CONST')
+debug_merge_point('<code object f, file 'source.py', line 4> #28 INPLACE_ADD')
 i11 = int_add(i7, 1)
-debug_merge_point('<code object f, file 'source.py', line 2> #29 STORE_FAST')
-debug_merge_point('<code object f, file 'source.py', line 2> #32 JUMP_ABSOLUTE')
-i13 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+debug_merge_point('<code object f, file 'source.py', line 4> #29 STORE_FAST')
+debug_merge_point('<code object f, file 'source.py', line 4> #32 JUMP_ABSOLUTE')
+i13 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i15 = int_add(i13, 1)
-setfield_raw(151937600, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+setfield_raw(151910144, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i18 = int_and(i15, 1089470464)
 i19 = int_is_true(i18)
 guard_false(i19, descr=<Guard3>) [p1, p0, p2, p3, i11, None]
-debug_merge_point('<code object f, file 'source.py', line 2> #9 LOAD_FAST')
+debug_merge_point('<code object f, file 'source.py', line 4> #9 LOAD_FAST')
 jump(p0, p1, p2, p3, 9, ConstPtr(ptr22), ConstPtr(ptr23), i11, descr=<Loop0>)
-[34290f159b2] jit-log-opt-loop}
-[342912842da] {jit-log-opt-loop
+[33541ca2d845] jit-log-opt-loop}
+[33541ccf77af] {jit-log-opt-loop
 # Loop 1 : loop with 60 ops
 [p0, p1, p2, p3, i4, p5, p6, p7]
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #9 LOAD_FAST')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #9 LOAD_FAST')
 guard_nonnull_class(p7, ConstClass(W_IntObject), descr=<Guard4>) [p1, p0, p7, p2, p3, p5, p6]
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #12 LOAD_CONST')
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #15 COMPARE_OP')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #12 LOAD_CONST')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #15 COMPARE_OP')
 i9 = getfield_gc_pure(p7, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
 i11 = int_lt(i9, 1003)
 guard_true(i11, descr=<Guard5>) [p1, p0, p7, p2, p3]
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #18 JUMP_IF_FALSE')
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #21 POP_TOP')
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #22 LOAD_GLOBAL')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #18 JUMP_IF_FALSE')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #21 POP_TOP')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #22 LOAD_GLOBAL')
 p12 = getfield_gc(p0, descr=<GcPtrFieldDescr pypy.interpreter.eval.Frame.inst_w_globals 8>)
 guard_value(p12, ConstPtr(ptr13), descr=<Guard6>) [p1, p0, p12, p2, p3, p7]
 p14 = getfield_gc(p12, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
 guard_isnull(p14, descr=<Guard7>) [p1, p0, p14, p12, p2, p3, p7]
 p16 = getfield_gc(ConstPtr(ptr15), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
 guard_nonnull_class(p16, ConstClass(Function), descr=<Guard8>) [p1, p0, p16, p2, p3, p7]
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #25 LOAD_FAST')
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #28 CALL_FUNCTION')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #25 LOAD_FAST')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #28 CALL_FUNCTION')
 i18 = getfield_gc(p0, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 89>)
 guard_false(i18, descr=<Guard9>) [p1, p0, p16, p2, p3, p7]
 p19 = getfield_gc(p16, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_code 16>)
 i34 = getfield_gc(p24, descr=<NonGcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_profilefunc 24>)
 i35 = int_is_zero(i34)
 guard_true(i35, descr=<Guard14>) [p1, p0, p24, p2, p3, p16, p7, i32, p31, p21]
-debug_merge_point('<code object inner, file 'source.py', line 9> #0 LOAD_FAST')
-debug_merge_point('<code object inner, file 'source.py', line 9> #3 LOAD_CONST')
-debug_merge_point('<code object inner, file 'source.py', line 9> #6 BINARY_ADD')
+debug_merge_point('<code object inner, file 'source.py', line 11> #0 LOAD_FAST')
+debug_merge_point('<code object inner, file 'source.py', line 11> #3 LOAD_CONST')
+debug_merge_point('<code object inner, file 'source.py', line 11> #6 BINARY_ADD')
 i37 = int_add(i9, 1)
-debug_merge_point('<code object inner, file 'source.py', line 9> #7 RETURN_VALUE')
+debug_merge_point('<code object inner, file 'source.py', line 11> #7 RETURN_VALUE')
 i38 = int_is_true(i34)
 guard_false(i38, descr=<Guard15>) [p1, p0, p24, p2, p3, p16, p7, i37, i32, p31, p21]
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #31 STORE_FAST')
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #34 JUMP_ABSOLUTE')
-i40 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #31 STORE_FAST')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #34 JUMP_ABSOLUTE')
+i40 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i42 = int_add(i40, 1)
-setfield_raw(151937600, i42, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+setfield_raw(151910144, i42, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i45 = int_and(i42, 1089470464)
 setfield_gc(p24, i25, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
 setfield_gc(p24, p31, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref 32>)
 i46 = int_is_true(i45)
 guard_false(i46, descr=<Guard16>) [p1, p0, p2, p3, i37, None, None, None]
-debug_merge_point('<code object inlined_call, file 'source.py', line 12> #9 LOAD_FAST')
+debug_merge_point('<code object inlined_call, file 'source.py', line 14> #9 LOAD_FAST')
 p49 = new_with_vtable(ConstClass(W_IntObject))
 setfield_gc(p49, i37, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
 jump(p0, p1, p2, p3, 9, ConstPtr(ptr51), ConstPtr(ptr52), p49, descr=<Loop1>)
-[342912dbd2a] jit-log-opt-loop}
-[342915070fe] {jit-log-opt-loop
+[33541cd3ebcf] jit-log-opt-loop}
+[33541d2bb45f] {jit-log-opt-loop
 # Loop 2 : loop with 43 ops
 [p0, p1, p2, p3, i4, p5, p6, i7, i8]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #15 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #18 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #21 COMPARE_OP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #15 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #18 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #21 COMPARE_OP')
 i10 = int_lt(i8, 3000)
 guard_true(i10, descr=<Guard17>) [p1, p0, p2, p3, i8, i7]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #24 JUMP_IF_FALSE')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #27 POP_TOP')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #28 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #31 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #34 BINARY_MODULO')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #24 JUMP_IF_FALSE')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #27 POP_TOP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #28 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #31 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #34 BINARY_MODULO')
 i12 = int_add(i8, 2147483647)
 i14 = int_and(i12, 2)
 i15 = int_mod(i8, 2)
 i20 = int_and(i18, i19)
 i21 = int_mul(i20, 2)
 i22 = int_add(i15, i21)
-debug_merge_point('<code object bridge, file 'source.py', line 19> #35 JUMP_IF_FALSE')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #35 JUMP_IF_FALSE')
 i23 = int_is_true(i22)
 guard_false(i23, descr=<Guard18>) [p1, p0, p2, p3, i22, i8, i7]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #52 POP_TOP')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #53 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #56 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #59 INPLACE_ADD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #52 POP_TOP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #53 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #56 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #59 INPLACE_ADD')
 i25 = int_add_ovf(i7, 2)
 guard_no_overflow(, descr=<Guard19>) [p1, p0, i25, p2, p3, None, i8, i7]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #60 STORE_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #63 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #66 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #69 INPLACE_ADD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #60 STORE_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #63 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #66 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #69 INPLACE_ADD')
 i28 = int_add(i8, 1)
-debug_merge_point('<code object bridge, file 'source.py', line 19> #70 STORE_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #73 JUMP_ABSOLUTE')
-i30 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+debug_merge_point('<code object bridge, file 'source.py', line 21> #70 STORE_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #73 JUMP_ABSOLUTE')
+i30 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i32 = int_add(i30, 1)
-setfield_raw(151937600, i32, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+setfield_raw(151910144, i32, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i35 = int_and(i32, 1089470464)
 i36 = int_is_true(i35)
 guard_false(i36, descr=<Guard20>) [p1, p0, p2, p3, i25, i28, None, None, None]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #15 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #15 LOAD_FAST')
 jump(p0, p1, p2, p3, 15, ConstPtr(ptr38), ConstPtr(ptr39), i25, i28, descr=<Loop2>)
-[3429153345a] jit-log-opt-loop}
-[3429172a1aa] {jit-log-opt-loop
+[33541d2e45a1] jit-log-opt-loop}
+[33541d5ed673] {jit-log-opt-loop
 # Loop 3 : entry bridge with 50 ops
 [p0, p1, p2, p3, i4, p5, i6, p7, p8, p9, p10]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #15 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #15 LOAD_FAST')
 guard_value(i4, 0, descr=<Guard21>) [i4, p1, p0, p2, p3, p5, i6, p7, p8, p9, p10]
 guard_nonnull_class(p10, ConstClass(W_IntObject), descr=<Guard22>) [p1, p0, p10, p2, p3, p5, p7, p8, p9]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #18 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #18 LOAD_CONST')
 guard_value(p2, ConstPtr(ptr13), descr=<Guard23>) [p1, p0, p2, p3, p5, p10, p8, p9]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #21 COMPARE_OP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #21 COMPARE_OP')
 i14 = getfield_gc_pure(p10, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
 i16 = int_lt(i14, 3000)
 guard_true(i16, descr=<Guard24>) [p1, p0, p10, p3, p5, p9]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #24 JUMP_IF_FALSE')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #27 POP_TOP')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #28 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #31 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #34 BINARY_MODULO')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #24 JUMP_IF_FALSE')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #27 POP_TOP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #28 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #31 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #34 BINARY_MODULO')
 i18 = int_add(i14, 2147483647)
 i20 = int_and(i18, 2)
 i21 = int_mod(i14, 2)
 i26 = int_and(i24, i25)
 i27 = int_mul(i26, 2)
 i28 = int_add(i21, i27)
-debug_merge_point('<code object bridge, file 'source.py', line 19> #35 JUMP_IF_FALSE')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #35 JUMP_IF_FALSE')
 i29 = int_is_true(i28)
 guard_true(i29, descr=<Guard25>) [p1, p0, p3, p5, p9, p10, i28]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #38 POP_TOP')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #39 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #38 POP_TOP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #39 LOAD_FAST')
 guard_nonnull_class(p9, ConstClass(W_IntObject), descr=<Guard26>) [p1, p0, p9, p3, p5, p10, None]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #42 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #45 INPLACE_ADD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #42 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #45 INPLACE_ADD')
 i32 = getfield_gc_pure(p9, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
 i34 = int_add_ovf(i32, 1)
 guard_no_overflow(, descr=<Guard27>) [p1, p0, p9, i34, p3, p5, p10, None]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #46 STORE_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #49 JUMP_FORWARD')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #63 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #66 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #69 INPLACE_ADD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #46 STORE_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #49 JUMP_FORWARD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #63 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #66 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #69 INPLACE_ADD')
 i36 = int_add(i14, 1)
-debug_merge_point('<code object bridge, file 'source.py', line 19> #70 STORE_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #73 JUMP_ABSOLUTE')
-i38 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+debug_merge_point('<code object bridge, file 'source.py', line 21> #70 STORE_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #73 JUMP_ABSOLUTE')
+i38 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i40 = int_add(i38, 1)
-setfield_raw(151937600, i40, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+setfield_raw(151910144, i40, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i43 = int_and(i40, 1089470464)
 i44 = int_is_true(i43)
-guard_false(i44, descr=<Guard28>) [p1, p0, p3, p5, i34, i36, None]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #15 LOAD_FAST')
+guard_false(i44, descr=<Guard28>) [p1, p0, p3, p5, i36, i34, None]
+debug_merge_point('<code object bridge, file 'source.py', line 21> #15 LOAD_FAST')
 jump(p0, p1, p3, p5, 15, ConstPtr(ptr46), ConstPtr(ptr47), i34, i36, descr=<Loop2>)
-[3429176185a] jit-log-opt-loop}
-[34291dbe9ee] {jit-log-opt-bridge
+[33541d616773] jit-log-opt-loop}
+[33541d83d463] {jit-log-opt-bridge
 # bridge out of Guard 18 with 23 ops
 [p0, p1, p2, p3, i4, i5, i6]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #38 POP_TOP')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #39 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #42 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #45 INPLACE_ADD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #38 POP_TOP')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #39 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #42 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #45 INPLACE_ADD')
 i8 = int_add_ovf(i6, 1)
-guard_no_overflow(, descr=<Guard29>) [p0, p1, i8, p2, p3, i5, i6]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #46 STORE_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #49 JUMP_FORWARD')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #63 LOAD_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #66 LOAD_CONST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #69 INPLACE_ADD')
+guard_no_overflow(, descr=<Guard29>) [p0, p1, i8, p2, p3, i6, i5]
+debug_merge_point('<code object bridge, file 'source.py', line 21> #46 STORE_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #49 JUMP_FORWARD')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #63 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #66 LOAD_CONST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #69 INPLACE_ADD')
 i10 = int_add_ovf(i5, 1)
-guard_no_overflow(, descr=<Guard30>) [p0, p1, i10, p2, p3, i8, i5, None]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #70 STORE_FAST')
-debug_merge_point('<code object bridge, file 'source.py', line 19> #73 JUMP_ABSOLUTE')
-i13 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+guard_no_overflow(, descr=<Guard30>) [p0, p1, i10, p2, p3, i8, None, i5]
+debug_merge_point('<code object bridge, file 'source.py', line 21> #70 STORE_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #73 JUMP_ABSOLUTE')
+i13 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i15 = int_add(i13, 1)
-setfield_raw(151937600, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+setfield_raw(151910144, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
 i18 = int_and(i15, 1089470464)
 i19 = int_is_true(i18)
 guard_false(i19, descr=<Guard31>) [p0, p1, p2, p3, i10, i8, None, None]
-debug_merge_point('<code object bridge, file 'source.py', line 19> #15 LOAD_FAST')
+debug_merge_point('<code object bridge, file 'source.py', line 21> #15 LOAD_FAST')
 jump(p1, p0, p2, p3, 15, ConstPtr(ptr21), ConstPtr(ptr22), i8, i10, descr=<Loop2>)
-[34291dd9dde] jit-log-opt-bridge}
+[33541d855759] jit-log-opt-bridge}
+[33541da64d0f] {jit-log-opt-loop
+# Loop 4 : loop with 54 ops
+[p0, p1, p2, p3, i4, p5, p6, p7, p8, p9, p10, p11, p12, i13, p14, p15]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #17 FOR_ITER')
+guard_class(p6, 144208192, descr=<Guard32>) [p1, p0, p6, p2, p3, p5, p7, p8, p9, p10, p11, p12, p14, p15, i13]
+p17 = getfield_gc(p6, descr=<GcPtrFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_w_seq 12>)
+guard_nonnull(p17, descr=<Guard33>) [p1, p0, p6, p17, p2, p3, p5, p7, p8, p9, p10, p11, p12, p14, p15, i13]
+i18 = getfield_gc(p6, descr=<SignedFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
+p19 = getfield_gc(p17, descr=<GcPtrFieldDescr pypy.objspace.std.rangeobject.W_RangeListObject.inst_w_list 20>)
+guard_isnull(p19, descr=<Guard34>) [p1, p0, p6, i18, p17, p19, p2, p3, p5, p7, p8, p9, p10, p11, p12, p14, p15, i13]
+i20 = getfield_gc(p17, descr=<SignedFieldDescr pypy.objspace.std.rangeobject.W_RangeListObject.inst_length 8>)
+i21 = int_ge(i18, i20)
+guard_false(i21, descr=<Guard35>) [p1, p0, p6, i18, p17, p2, p3, p5, p7, p8, p9, p10, p11, p12, p14, p15, i13]
+i22 = getfield_gc(p17, descr=<SignedFieldDescr pypy.objspace.std.rangeobject.W_RangeListObject.inst_start 12>)
+i23 = getfield_gc(p17, descr=<SignedFieldDescr pypy.objspace.std.rangeobject.W_RangeListObject.inst_step 16>)
+i24 = int_mul(i18, i23)
+i25 = int_add(i22, i24)
+i27 = int_add(i18, 1)
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #20 STORE_FAST')
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #23 LOAD_FAST')
+setfield_gc(p6, i27, descr=<SignedFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
+guard_nonnull_class(p12, ConstClass(W_ListObject), descr=<Guard36>) [p1, p0, p12, p2, p3, p5, p6, p8, p9, p10, p11, p14, p15, i25, None]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #26 LOAD_GLOBAL')
+p30 = getfield_gc(p0, descr=<GcPtrFieldDescr pypy.interpreter.eval.Frame.inst_w_globals 8>)
+guard_value(p30, ConstPtr(ptr31), descr=<Guard37>) [p1, p0, p30, p2, p3, p5, p6, p12, p8, p9, p10, p11, p14, p15, i25, None]
+p32 = getfield_gc(p30, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p32, descr=<Guard38>) [p1, p0, p32, p30, p2, p3, p5, p6, p12, p8, p9, p10, p11, p14, p15, i25, None]
+p34 = getfield_gc(ConstPtr(ptr33), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_isnull(p34, descr=<Guard39>) [p1, p0, p34, p2, p3, p5, p6, p12, p8, p9, p10, p11, p14, p15, i25, None]
+p36 = getfield_gc(ConstPtr(ptr35), descr=<GcPtrFieldDescr pypy.interpreter.module.Module.inst_w_dict 8>)
+guard_value(p36, ConstPtr(ptr37), descr=<Guard40>) [p1, p0, p36, p2, p3, p5, p6, p12, p8, p9, p10, p11, p14, p15, i25, None]
+p38 = getfield_gc(p36, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p38, descr=<Guard41>) [p1, p0, p38, p36, p2, p3, p5, p6, p12, p8, p9, p10, p11, p14, p15, i25, None]
+p40 = getfield_gc(ConstPtr(ptr39), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_value(p40, ConstPtr(ptr41), descr=<Guard42>) [p1, p0, p40, p2, p3, p5, p6, p12, p8, p9, p10, p11, p14, p15, i25, None]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #29 LOAD_FAST')
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #32 CALL_FUNCTION')
+i42 = getfield_gc(p0, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 89>)
+guard_false(i42, descr=<Guard43>) [p1, p0, p40, p2, p3, p5, p6, p12, p10, p11, p14, p15, i25, None]
+p44 = getfield_gc(ConstPtr(ptr43), descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_name 24>)
+p45 = getfield_gc(ConstPtr(ptr43), descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_defs_w 20>)
+p47 = call(ConstClass(ll_int_str__IntegerR_SignedConst_Signed), i25, descr=<GcPtrCallDescr>)
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #35 LIST_APPEND')
+p48 = getfield_gc(p12, descr=<GcPtrFieldDescr pypy.objspace.std.listobject.W_ListObject.inst_wrappeditems 8>)
+p50 = new_with_vtable(ConstClass(W_StringObject))
+setfield_gc(p50, p47, descr=<GcPtrFieldDescr pypy.objspace.std.stringobject.W_StringObject.inst__value 8>)
+call(ConstClass(ll_append__listPtr_objectPtr), p48, p50, descr=<VoidCallDescr>)
+guard_no_exception(, descr=<Guard44>) [p1, p0, p2, p3, p5, p6, p10, p11, p12, p14, p15, i25]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #36 JUMP_ABSOLUTE')
+i53 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+i55 = int_add(i53, 1)
+setfield_raw(151910144, i55, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+i58 = int_and(i55, 1089470464)
+i59 = int_is_true(i58)
+guard_false(i59, descr=<Guard45>) [p1, p0, p2, p3, p5, p6, p10, p11, p12, p14, p15, i25]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #17 FOR_ITER')
+jump(p0, p1, p2, p3, 17, p5, p6, ConstPtr(ptr61), ConstPtr(ptr62), ConstPtr(ptr63), p10, p11, p12, i25, p14, p15, descr=<Loop4>)
+[33541daa8dcb] jit-log-opt-loop}
+[33541de6847f] {jit-log-opt-loop
+# Loop 5 : entry bridge with 10 ops
+[i0, p1]
+debug_merge_point('StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]')
+p2 = getfield_gc(p1, descr=<GcPtrFieldDescr pypy.rlib.rsre.rsre_core.StrMatchContext.inst__string 36>)
+i3 = strgetitem(p2, i0)
+i5 = int_eq(i3, 51)
+guard_false(i5, descr=<Guard46>) [i0, p1]
+i7 = int_add(i0, 1)
+i8 = getfield_gc_pure(p1, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_end 8>)
+i9 = int_lt(i7, i8)
+guard_false(i9, descr=<Guard47>) [i7, p1]
+finish(0, descr=<DoneWithThisFrameDescrInt object at 0x898b4a4>)
+[33541de75535] jit-log-opt-loop}
+[33541df9f0a1] {jit-log-opt-bridge
+# bridge out of Guard 47 with 10 ops
+[i0, p1]
+debug_merge_point('StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]')
+p2 = getfield_gc(p1, descr=<GcPtrFieldDescr pypy.rlib.rsre.rsre_core.StrMatchContext.inst__string 36>)
+i3 = strgetitem(p2, i0)
+i5 = int_eq(i3, 51)
+guard_false(i5, descr=<Guard48>) [i0, p1]
+i7 = int_add(i0, 1)
+i8 = getfield_gc_pure(p1, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_end 8>)
+i9 = int_lt(i7, i8)
+guard_false(i9, descr=<Guard49>) [i7, p1]
+finish(0, descr=<DoneWithThisFrameDescrInt object at 0x898b4a4>)
+[33541dfb0d7b] jit-log-opt-bridge}
+[33541e1a7a37] {jit-log-opt-bridge
+# bridge out of Guard 49 with 10 ops
+[i0, p1]
+debug_merge_point('StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]')
+p2 = getfield_gc(p1, descr=<GcPtrFieldDescr pypy.rlib.rsre.rsre_core.StrMatchContext.inst__string 36>)
+i3 = strgetitem(p2, i0)
+i5 = int_eq(i3, 51)
+guard_false(i5, descr=<Guard50>) [i0, p1]
+i7 = int_add(i0, 1)
+i8 = getfield_gc_pure(p1, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_end 8>)
+i9 = int_lt(i7, i8)
+guard_false(i9, descr=<Guard51>) [i7, p1]
+finish(0, descr=<DoneWithThisFrameDescrInt object at 0x898b4a4>)
+[33541e1b1199] jit-log-opt-bridge}
+[33541ede5f61] {jit-log-opt-loop
+# Loop 6 : loop with 252 ops
+[p0, p1, p2, p3, i4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #52 FOR_ITER')
+guard_class(p5, 144208000, descr=<Guard52>) [p1, p0, p5, p2, p3, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15]
+p17 = getfield_gc(p5, descr=<GcPtrFieldDescr pypy.objspace.std.iterobject.W_FastListIterObject.inst_listitems 16>)
+guard_nonnull(p17, descr=<Guard53>) [p1, p0, p5, p17, p2, p3, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15]
+i18 = getfield_gc(p5, descr=<SignedFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
+p20 = call(ConstClass(ll_getitem_nonneg__dum_checkidxConst_listPtr_Signed), p17, i18, descr=<GcPtrCallDescr>)
+guard_no_exception(, descr=<Guard54>) [p1, p0, p5, i18, p20, p2, p3, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15]
+i22 = int_add(i18, 1)
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #55 STORE_FAST')
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #58 LOAD_GLOBAL')
+p23 = getfield_gc(p0, descr=<GcPtrFieldDescr pypy.interpreter.eval.Frame.inst_w_globals 8>)
+setfield_gc(p5, i22, descr=<SignedFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
+guard_value(p23, ConstPtr(ptr24), descr=<Guard55>) [p1, p0, p23, p2, p3, p5, p7, p8, p9, p10, p11, p12, p13, p14, p20]
+p25 = getfield_gc(p23, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p25, descr=<Guard56>) [p1, p0, p25, p23, p2, p3, p5, p7, p8, p9, p10, p11, p12, p13, p14, p20]
+p27 = getfield_gc(ConstPtr(ptr26), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_nonnull_class(p27, 143872640, descr=<Guard57>) [p1, p0, p27, p2, p3, p5, p7, p8, p9, p10, p11, p12, p13, p14, p20]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #61 LOOKUP_METHOD')
+p29 = getfield_gc(p27, descr=<GcPtrFieldDescr pypy.interpreter.module.Module.inst_w_dict 8>)
+guard_value(p29, ConstPtr(ptr30), descr=<Guard58>) [p1, p0, p27, p29, p2, p3, p5, p7, p8, p9, p10, p11, p12, p13, p14, p20]
+p31 = getfield_gc(p29, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p31, descr=<Guard59>) [p1, p0, p27, p31, p29, p2, p3, p5, p7, p8, p9, p10, p11, p12, p13, p14, p20]
+p33 = getfield_gc(ConstPtr(ptr32), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_nonnull_class(p33, ConstClass(Function), descr=<Guard60>) [p1, p0, p27, p33, p2, p3, p5, p7, p8, p9, p10, p11, p12, p13, p14, p20]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #64 LOAD_CONST')
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #67 LOAD_FAST')
+guard_nonnull(p20, descr=<Guard61>) [p1, p0, p20, p2, p3, p5, p33, p9, p10, p11, p12, p13, p14]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #70 CALL_METHOD')
+i35 = getfield_gc(p0, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 89>)
+guard_false(i35, descr=<Guard62>) [p1, p0, p33, p2, p3, p5, p20, p10, p11, p12, p13, p14]
+p36 = getfield_gc(p33, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_code 16>)
+guard_value(p36, ConstPtr(ptr37), descr=<Guard63>) [p1, p0, p36, p33, p2, p3, p5, p20, p10, p11, p12, p13, p14]
+p38 = getfield_gc(p33, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_defs_w 20>)
+i39 = arraylen_gc(p38, descr=<GcPtrArrayDescr>)
+i41 = int_sub(3, i39)
+i43 = int_ge(2, i41)
+guard_true(i43, descr=<Guard64>) [p1, p0, p33, p2, p3, p5, p20, p10, p11, p12, p13, p14]
+p44 = getfield_gc(p33, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_w_func_globals 36>)
+p45 = getfield_gc(p33, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_closure 12>)
+i47 = int_sub(i39, 1)
+i48 = int_ge(i47, i39)
+guard_false(i48, descr=<Guard65>) [p1, p0, i39, i47, p38, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p44]
+p49 = getarrayitem_gc(p38, i47, descr=<GcPtrArrayDescr>)
+i50 = int_ge(i39, i39)
+guard_true(i50, descr=<Guard66>) [p1, p0, i39, p38, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p44]
+p52 = call(ConstClass(getexecutioncontext), descr=<GcPtrCallDescr>)
+guard_no_exception(, descr=<Guard67>) [p1, p0, p52, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p44]
+i53 = getfield_gc(p52, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+i55 = getfield_gc(ConstPtr(ptr54), descr=<SignedFieldDescr pypy.module.sys.Module.inst_recursionlimit 40>)
+i56 = int_gt(i53, i55)
+guard_false(i56, descr=<Guard68>) [p1, p0, p52, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p44]
+i58 = int_add(i53, 1)
+p59 = getfield_gc(p52, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref 32>)
+i60 = force_token()
+p61 = getfield_gc(p52, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_w_tracefunc 40>)
+setfield_gc(p52, i58, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+guard_isnull(p61, descr=<Guard69>) [p1, p0, p52, p61, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i60, p59, p49, p44]
+i62 = getfield_gc(p52, descr=<NonGcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_profilefunc 24>)
+i63 = int_is_zero(i62)
+guard_true(i63, descr=<Guard70>) [p1, p0, p52, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i60, p59, p49, p44]
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #0 LOAD_GLOBAL')
+guard_value(p44, ConstPtr(ptr64), descr=<Guard71>) [p1, p0, p52, p44, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i60, p59, p49, None]
+p66 = getfield_gc(p44, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p66, descr=<Guard72>) [p1, p0, p52, p66, p44, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i60, p59, p49, None]
+p68 = getfield_gc(ConstPtr(ptr67), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_nonnull_class(p68, ConstClass(Function), descr=<Guard73>) [p1, p0, p52, p68, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i60, p59, p49, None]
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #3 LOAD_FAST')
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #6 LOAD_FAST')
+guard_nonnull(p49, descr=<Guard74>) [p1, p0, p52, p49, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p68, i60, p59, None, None]
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #9 CALL_FUNCTION')
+p70 = getfield_gc(p68, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_code 16>)
+guard_value(p70, ConstPtr(ptr71), descr=<Guard75>) [p1, p0, p52, p70, p68, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, None, i60, p59, p49, None]
+p72 = getfield_gc(p68, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_w_func_globals 36>)
+p73 = getfield_gc(p68, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_closure 12>)
+p74 = getfield_gc(p68, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_name 24>)
+p75 = getfield_gc(p68, descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_defs_w 20>)
+i76 = int_gt(i58, i55)
+guard_false(i76, descr=<Guard76>) [p1, p0, p52, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p72, p68, i60, p59, p49, None]
+i78 = int_add(i58, 1)
+i79 = force_token()
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #0 LOAD_GLOBAL')
+setfield_gc(p52, i78, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+guard_value(p72, ConstPtr(ptr80), descr=<Guard77>) [p1, p0, p52, p72, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p68, i60, p59, p49, None]
+p81 = getfield_gc(p72, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p81, descr=<Guard78>) [p1, p0, p52, p81, p72, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p68, i60, p59, p49, None]
+p83 = getfield_gc(ConstPtr(ptr82), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_isnull(p83, descr=<Guard79>) [p1, p0, p52, p83, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p68, i60, p59, p49, None]
+p85 = getfield_gc(ConstPtr(ptr84), descr=<GcPtrFieldDescr pypy.interpreter.module.Module.inst_w_dict 8>)
+guard_value(p85, ConstPtr(ptr86), descr=<Guard80>) [p1, p0, p52, p85, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p68, i60, p59, p49, None]
+p87 = getfield_gc(p85, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_isnull(p87, descr=<Guard81>) [p1, p0, p52, p87, p85, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p68, i60, p59, p49, None]
+p89 = getfield_gc(ConstPtr(ptr88), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_value(p89, ConstPtr(ptr90), descr=<Guard82>) [p1, p0, p52, p89, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p68, i60, p59, p49, None]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #3 LOAD_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #6 LOAD_CONST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #9 BINARY_SUBSCR')
+p92 = new_array(2, descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p92, 0, ConstPtr(ptr94), descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p92, 1, p49, descr=<GcPtrArrayDescr>)
+p98 = call(ConstClass(ll_getitem__dum_checkidxConst_arrayPtr_Signed), p92, 0, descr=<GcPtrCallDescr>)
+guard_no_exception(, descr=<Guard83>) [p1, p0, p52, p98, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, p89, p49, p68, p92, i60, p59]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #10 CALL_FUNCTION')
+guard_class(p98, ConstClass(W_StringObject), descr=<Guard84>) [p1, p0, p52, p98, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p49, p68, p92, i60, p59]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #13 BUILD_TUPLE')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #16 LOAD_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #19 BINARY_ADD')
+i100 = arraylen_gc(p92, descr=<GcPtrArrayDescr>)
+i102 = int_add_ovf(1, i100)
+guard_no_overflow(, descr=<Guard85>) [p1, p0, p52, i102, i100, p92, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, i79, None, p49, p68, None, i60, p59]
+p103 = new_array(i102, descr=<GcPtrArrayDescr>)
+p105 = new_array(1, descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p105, 0, ConstPtr(ptr107), descr=<GcPtrArrayDescr>)
+call(ConstClass(ll_arraycopy__arrayPtr_arrayPtr_Signed_Signed_Signed), p105, p103, 0, 0, 1, descr=<VoidCallDescr>)
+guard_no_exception(, descr=<Guard86>) [p1, p0, p52, i100, p103, p92, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, i79, p105, p68, i60, p59]
+call(ConstClass(ll_arraycopy__arrayPtr_arrayPtr_Signed_Signed_Signed), p92, p103, 0, 1, i100, descr=<VoidCallDescr>)
+guard_no_exception(, descr=<Guard87>) [p1, p0, p52, p103, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p92, p49, i79, p105, p68, i60, p59]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #20 STORE_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #23 LOAD_GLOBAL')
+p112 = getfield_gc(ConstPtr(ptr111), descr=<GcPtrFieldDescr pypy.objspace.std.celldict.ModuleCell.inst_w_value 8>)
+guard_nonnull_class(p112, 144126432, descr=<Guard88>) [p1, p0, p52, p112, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p103, p92, p49, i79, None, p68, i60, p59]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #26 LOOKUP_METHOD')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #29 LOAD_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #32 CALL_METHOD')
+p115 = getfield_gc(ConstPtr(ptr114), descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_name 24>)
+p116 = getfield_gc(ConstPtr(ptr114), descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_defs_w 20>)
+i117 = arraylen_gc(p116, descr=<GcPtrArrayDescr>)
+i119 = int_sub(3, i117)
+i121 = int_ge(2, i119)
+guard_true(i121, descr=<Guard89>) [p1, p0, p52, p115, i119, p116, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p112, p103, p92, p49, i79, None, p68, i60, p59]
+i122 = int_sub(2, i119)
+p123 = getarrayitem_gc(p116, i122, descr=<GcPtrArrayDescr>)
+guard_class(p123, ConstClass(W_NoneObject), descr=<Guard90>) [p1, p0, p52, p123, p112, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, None, p103, p92, p49, i79, None, p68, i60, p59]
+p125 = getfield_gc(p112, descr=<GcPtrFieldDescr pypy.objspace.std.dictmultiobject.W_DictMultiObject.inst_r_dict_content 8>)
+guard_nonnull(p125, descr=<Guard91>) [p1, p0, p52, p123, p112, p125, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, None, p103, p92, p49, i79, None, p68, i60, p59]
+i126 = force_token()
+p128 = new_with_vtable(144079912)
+setfield_gc(p128, i79, descr=<SignedFieldDescr JitVirtualRef.virtual_token 8>)
+setfield_gc(p128, 1, descr=<SignedFieldDescr JitVirtualRef.virtualref_index 12>)
+setfield_gc(p52, p128, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref 32>)
+setfield_gc(p0, i126, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.vable_token 16>)
+p131 = new_with_vtable(143831552)
+setfield_gc(p131, p103, descr=<GcPtrFieldDescr pypy.objspace.std.tupleobject.W_TupleObject.inst_wrappeditems 8>)
+p134 = call_may_force(ConstClass(ll_get__dicttablePtr_pypy_interpreter_baseobjspace_W_RootPtr_pypy_interpreter_baseobjspace_W_RootPtr), p125, p131, ConstPtr(ptr133), descr=<GcPtrCallDescr>)
+guard_not_forced(, descr=<Guard92>) [p1, p0, p52, p123, p131, p112, p134, p128, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p68, p92, i60, p59]
+guard_no_exception(, descr=<Guard93>) [p1, p0, p52, p123, p131, p112, p134, p128, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p68, p92, i60, p59]
+guard_nonnull_class(p134, 145393696, descr=<Guard94>) [p1, p0, p52, p123, p131, p112, p134, p128, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p68, p92, i60, p59]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #35 STORE_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #38 LOAD_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #41 LOAD_CONST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #44 COMPARE_OP')
+i137 = ptr_eq(p134, ConstPtr(ptr136))
+guard_false(i137, descr=<Guard95>) [p1, p0, p52, p128, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p131, p134, p49, p68, p92, i60, p59]
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #47 JUMP_IF_FALSE')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #50 POP_TOP')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #51 LOAD_FAST')
+debug_merge_point('<code object _compile, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 227> #54 RETURN_VALUE')
+p138 = getfield_gc(p52, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_w_tracefunc 40>)
+guard_isnull(p138, descr=<Guard96>) [p1, p0, p52, p134, p138, p128, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p131, None, p49, p68, p92, i60, p59]
+i139 = getfield_gc(p52, descr=<NonGcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_profilefunc 24>)
+i140 = int_is_true(i139)
+guard_false(i140, descr=<Guard97>) [p1, p0, p52, p134, p128, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p131, None, p49, p68, p92, i60, p59]
+i141 = getfield_gc(p52, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+i143 = int_sub(i141, 1)
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #12 LOOKUP_METHOD')
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #15 LOAD_FAST')
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #18 CALL_METHOD')
+p145 = getfield_gc(ConstPtr(ptr144), descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_name 24>)
+p146 = getfield_gc(ConstPtr(ptr144), descr=<GcPtrFieldDescr pypy.interpreter.function.Function.inst_defs_w 20>)
+i147 = arraylen_gc(p146, descr=<GcPtrArrayDescr>)
+i149 = int_sub(4, i147)
+setfield_gc(p52, i143, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+setfield_gc(p128, -3, descr=<SignedFieldDescr JitVirtualRef.virtual_token 8>)
+i152 = int_ge(2, i149)
+guard_true(i152, descr=<Guard98>) [p1, p0, p52, p145, i149, p146, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p128, p131, p134, p49, None, p92, i60, p59]
+i153 = int_sub(2, i149)
+p154 = getarrayitem_gc(p146, i153, descr=<GcPtrArrayDescr>)
+i156 = int_sub(3, i149)
+p157 = getarrayitem_gc(p146, i156, descr=<GcPtrArrayDescr>)
+guard_class(p154, ConstClass(W_IntObject), descr=<Guard99>) [p1, p0, p52, p154, p20, p134, p2, p3, p5, p33, p10, p11, p12, p13, p14, p157, p128, p131, None, p49, None, p92, i60, p59]
+i159 = getfield_gc_pure(p154, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
+guard_class(p157, ConstClass(W_IntObject), descr=<Guard100>) [p1, p0, p52, i159, p20, p157, p134, p2, p3, p5, p33, p10, p11, p12, p13, p14, p154, None, p128, p131, None, p49, None, p92, i60, p59]
+i161 = getfield_gc_pure(p157, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
+i162 = force_token()
+p163 = new_with_vtable(144079912)
+setfield_gc(p163, i60, descr=<SignedFieldDescr JitVirtualRef.virtual_token 8>)
+setfield_gc(p52, p163, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref 32>)
+p165 = new_with_vtable(144116512)
+setfield_gc(p165, -1, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_instr_ub 52>)
+p168 = new_array(6, descr=<GcPtrArrayDescr>)
+p170 = new_with_vtable(143831552)
+setfield_gc(p170, p92, descr=<GcPtrFieldDescr pypy.objspace.std.tupleobject.W_TupleObject.inst_wrappeditems 8>)
+setarrayitem_gc(p168, 0, p170, descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p168, 1, p131, descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p168, 2, p134, descr=<GcPtrArrayDescr>)
+setfield_gc(p165, p168, descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_fastlocals_w 40>)
+setfield_gc(p165, -1, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_instr_prev 48>)
+p176 = new_array(9, descr=<GcPtrArrayDescr>)
+setfield_gc(p165, p176, descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_valuestack_w 76>)
+setfield_gc(p165, 6, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_numlocals 68>)
+setfield_gc(p165, ConstPtr(ptr80), descr=<GcPtrFieldDescr pypy.interpreter.eval.Frame.inst_w_globals 8>)
+setfield_gc(p165, ConstPtr(ptr71), descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_pycode 72>)
+setfield_gc(p165, ConstPtr(ptr177), descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst__recursion_error 20>)
+setfield_gc(p165, 227, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_f_lineno 36>)
+setfield_gc(p165, 54, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_last_instr 60>)
+setfield_gc(p165, 1, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_frame_finished_execution 88>)
+setfield_gc(p165, p163, descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_f_backref 32>)
+setfield_gc(p128, p165, descr=<GcPtrFieldDescr JitVirtualRef.forced 16>)
+setfield_gc(p0, i162, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.vable_token 16>)
+p182 = call_may_force(ConstClass(W_SRE_Pattern.search_w), p134, p20, i159, i161, descr=<GcPtrCallDescr>)
+guard_not_forced(, descr=<Guard101>) [p1, p0, p52, p182, p163, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p157, p134, p154, p59]
+guard_no_exception(, descr=<Guard102>) [p1, p0, p52, p182, p163, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, p157, p134, p154, p59]
+guard_nonnull(p182, descr=<Guard103>) [p1, p0, p52, p182, p163, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, None, p134, None, p59]
+debug_merge_point('<code object search, file '/home/fijal/src/pypy-trunk/lib-python/2.5.2/re.py', line 139> #21 RETURN_VALUE')
+p183 = getfield_gc(p52, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_w_tracefunc 40>)
+guard_isnull(p183, descr=<Guard104>) [p1, p0, p52, p182, p183, p163, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, None, None, None, p59]
+i184 = getfield_gc(p52, descr=<NonGcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_profilefunc 24>)
+i185 = int_is_true(i184)
+guard_false(i185, descr=<Guard105>) [p1, p0, p182, p52, p163, p2, p3, p5, p33, p20, p10, p11, p12, p13, p14, p49, None, None, None, p59]
+i186 = getfield_gc(p52, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+i188 = int_sub(i186, 1)
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #73 POP_TOP')
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #74 JUMP_ABSOLUTE')
+i190 = getfield_raw(151910144, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+i192 = int_add(i190, 1)
+setfield_raw(151910144, i192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+i195 = int_and(i192, 1089470464)
+setfield_gc(p52, p59, descr=<GcPtrFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_topframeref 32>)
+setfield_gc(p52, i188, descr=<SignedFieldDescr pypy.interpreter.executioncontext.ExecutionContext.inst_framestackdepth 16>)
+setfield_gc(p163, -3, descr=<SignedFieldDescr JitVirtualRef.virtual_token 8>)
+i197 = int_is_true(i195)
+guard_false(i197, descr=<Guard106>) [p1, p0, p2, p3, p5, p10, p11, p12, p13, p14, p20, p163, p49, None, None, None, p59]
+debug_merge_point('<code object inlined_str_stuff, file 'source.py', line 34> #52 FOR_ITER')
+p199 = new_with_vtable(144116512)
+setfield_gc(p199, -1, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_instr_ub 52>)
+p202 = new_array(3, descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p202, 0, ConstPtr(ptr94), descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p202, 1, p20, descr=<GcPtrArrayDescr>)
+setarrayitem_gc(p202, 2, p49, descr=<GcPtrArrayDescr>)
+setfield_gc(p199, p202, descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_fastlocals_w 40>)
+setfield_gc(p199, -1, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_instr_prev 48>)
+p208 = new_array(3, descr=<GcPtrArrayDescr>)
+setfield_gc(p199, p208, descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_valuestack_w 76>)
+setfield_gc(p199, 3, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_numlocals 68>)
+setfield_gc(p199, ConstPtr(ptr64), descr=<GcPtrFieldDescr pypy.interpreter.eval.Frame.inst_w_globals 8>)
+setfield_gc(p199, ConstPtr(ptr37), descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_pycode 72>)
+setfield_gc(p199, ConstPtr(ptr177), descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst__recursion_error 20>)
+setfield_gc(p199, 139, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_f_lineno 36>)
+setfield_gc(p199, 21, descr=<SignedFieldDescr pypy.interpreter.pyframe.PyFrame.inst_last_instr 60>)
+setfield_gc(p199, 1, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_frame_finished_execution 88>)
+setfield_gc(p199, p59, descr=<GcPtrFieldDescr pypy.interpreter.pyframe.PyFrame.inst_f_backref 32>)
+setfield_gc(p163, p199, descr=<GcPtrFieldDescr JitVirtualRef.forced 16>)
+jump(p0, p1, p2, p3, 52, p5, ConstPtr(ptr213), ConstPtr(ptr214), ConstPtr(ptr215), ConstPtr(ptr216), p10, p11, p12, p13, p14, p20, descr=<Loop6>)
+[33541ef2225a] jit-log-opt-loop}
+[33541f1e366e] {jit-log-opt-bridge
+# bridge out of Guard 51 with 10 ops
+[i0, p1]
+debug_merge_point('StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]')
+p2 = getfield_gc(p1, descr=<GcPtrFieldDescr pypy.rlib.rsre.rsre_core.StrMatchContext.inst__string 36>)
+i3 = strgetitem(p2, i0)
+i5 = int_eq(i3, 51)
+guard_false(i5, descr=<Guard107>) [i0, p1]
+i7 = int_add(i0, 1)
+i8 = getfield_gc_pure(p1, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_end 8>)
+i9 = int_lt(i7, i8)
+guard_false(i9, descr=<Guard108>) [i7, p1]
+finish(0, descr=<DoneWithThisFrameDescrInt object at 0x898b4a4>)
+[33541f1effc5] jit-log-opt-bridge}
+[33541f7ad2d8] {jit-log-opt-bridge
+# bridge out of Guard 48 with 5 ops
+[i0, p1]
+i3 = int_add(i0, 1)
+setfield_gc(p1, i3, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_match_end 16>)
+setfield_gc(p1, ConstPtr(ptr4), descr=<GcPtrFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_match_marks 20>)
+setfield_gc(p1, i0, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_match_start 24>)
+finish(1, descr=<DoneWithThisFrameDescrInt object at 0x898b4a4>)
+[33541f7b7196] jit-log-opt-bridge}
+[33541f8e3c55] {jit-log-opt-bridge
+# bridge out of Guard 50 with 5 ops
+[i0, p1]
+i3 = int_add(i0, 1)
+setfield_gc(p1, i3, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_match_end 16>)
+setfield_gc(p1, ConstPtr(ptr4), descr=<GcPtrFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_match_marks 20>)
+setfield_gc(p1, i0, descr=<SignedFieldDescr pypy.rlib.rsre.rsre_core.AbstractMatchContext.inst_match_start 24>)
+finish(1, descr=<DoneWithThisFrameDescrInt object at 0x898b4a4>)
+[33541f8eaeac] jit-log-opt-bridge}
 
     def repr_setfield_gc(self):
         name, field = self.descr.split(' ')[1].rsplit('.', 1)
-        return '((%s)%s).%s = %s' % (name, self.args[0], field, self.args[1])        
+        return '((%s)%s).%s = %s' % (name, self.args[0], field, self.args[1])
 
     def generic_repr(self):
         if self.res is not None:
             return '%s(%s)' % (self.name, ', '.join(self.args))
 
     def __repr__(self):
-        return '<%s (%s)>' % (self.name, ', '.join([repr(a) for a in self.args]))
+        return '<%s (%s)>' % (self.name, ', '.join([repr(a)
+                                                    for a in self.args]))
 
     def extra_style(self):
         if self.name.startswith('guard_'):
 
     def create_op(self, opnum, args, res, descr):
         return Op(intern(opname[opnum].lower()), args, res, descr)
-        
-class NonCodeLoop(Exception):
-    """ An exception raised in case the loop is not associated with
-    applevel code
-    """
+
+class NonCodeError(Exception):
+    pass
 
 class Bytecode(object):
     filename = None
             m = re.search('<code object ([<>\w]+), file \'(.+?)\', line (\d+)> #(\d+) (\w+)',
                          operations[0].args[0])
             if m is None:
-                # a non-code loop, like StrLiteralSearch or something, ignore
-                # for now
-                raise NonCodeLoop()
-            self.name, self.filename, lineno, bytecode_no, self.bytecode_name = m.groups()
-            self.startlineno = int(lineno)
-            self.bytecode_no = int(bytecode_no)
+                # a non-code loop, like StrLiteralSearch or something
+                self.bytecode_name = operations[0].args[0].split(" ")[0][1:]
+            else:
+                self.name, self.filename, lineno, bytecode_no, self.bytecode_name = m.groups()
+                self.startlineno = int(lineno)
+                self.bytecode_no = int(bytecode_no)
         self.operations = operations
 
     def key(self):
             chunk.pretty_print(out)
 
 def parse_log_counts(lines):
+    nums = []
+    i = 0
     for line in lines:
-        pass
+        if line:
+            num, count = line.split(':')
+            assert int(num) == i
+            nums.append(int(count))
+            i += 1
+    return nums
 
 def parse(input):
     return SimpleParser(input, None, {}, 'lltype', None,
+
+import re
 
 def f():
     i = 0
     return s
 
 bridge()
+
+def inlined_str_stuff():
+    s = [str(i) for i in range(3000)]
+    for elem in s:
+        re.search('3', elem)
+
+inlined_str_stuff()
             $.scrollTo($("#loop-" + bridge_id));
         });
     });
+}
+
+function toggle()
+{
+    $('.operations').toggle()
 }
 
 /* Floating Side-Menu 
 -----------------------------------------*/
-#loops  ul li a {
+#loops  ul li span {
 	display: block;
 	width: 100%;
 	padding-left: 5px;
 .operations {
 	background: rgba(251, 252, 246, 0.9);
 }
-#loops span {
-	display: block;
-	font-family: "Lucida Sans Unicode", Sans, sans-serif;
-	font-weight: bold;
-	font-size: 15px;
-	padding-left: 5px;
-	text-shadow: rgba(255, 255, 255, 0.3);
-	margin-bottom: 5px;
+/* #loops span { */
+/* 	display: block; */
+/* 	font-family: "Lucida Sans Unicode", Sans, sans-serif; */
+/* 	font-weight: bold; */
+/* 	font-size: 15px; */
+/* 	padding-left: 5px; */
+/* 	text-shadow: rgba(255, 255, 255, 0.3); */
+/* 	margin-bottom: 5px; */
 	
 
-}
+/* } */
 /* End of Floating Side-Menu  
 -----------------------------------------*/
 
             if loop.comment:
                 comment = loop.comment.strip()
                 if 'entry bridge' in comment:
-                    continue
+                    pass
                 elif comment.startswith('# bridge out of'):
                     no = int(comment[len('# bridge out of Guard '):].split(' ', 1)[0])
                     guard_dict[no].bridge = loop

templates/index.html

   </script>
 </head>
 <body>
+  <header>
+    <span>Menu</span><br/>
+    <a href="#" onClick="toggle()">Toggle operations</a>
+    <div id="callstack">
+    </div>
+  </header>
   <div id="loops">
     <ul>
-      {% for item in loops %}
-      <li><a href="#" onClick="show_loop({{loop.index}})">{{item.repr()}}</a></li>
+      {% for is_entry_bridge, item in loops %}
+      {% if is_entry_bridge %}
+        <li><span>Entry bridge: <a href="#" onClick="show_loop({{loop.index}})">{{item.repr()}}</a></span></li>
+      {% else %}
+        <li><span><a href="#" onClick="show_loop({{loop.index}})">{{item.repr()}}</a></span></li>
+      {% endif %}
       {% endfor %}
     </ul>
   </div>
   <div id="main">
-    Loop placeholder
   </div>
 </body>
 </html>

test/test_loops.py

 from pypy.jit.metainterp.resoperation import ResOperation, rop
 from pypy.jit.metainterp.history import ConstInt, Const
 from loops import parse, Bytecode, Function, slice_debug_merge_points,\
-     adjust_bridges
+     adjust_bridges, parse_log_counts
 import py
 from storage import LoopStorage
 
     res = slice_debug_merge_points(ops.operations)
     assert res.repr() == res.chunks[1].repr()
 
-
-#def test_parse_log_count():
-#    parse_log_counts(LINES)
-
 def test_lineno():
     fname = str(py.path.local(__file__).join('..', 'x.py'))
     ops = parse('''
     []
     ''')
     loops = LoopStorage().reconnect_loops([main, bridge, entry_bridge])
-    assert len(loops) == 1
+    assert len(loops) == 2
     assert len(loops[0].operations[0].bridge.operations) == 1
     assert loops[0].operations[0].bridge.no == 18
 
     loops = LoopStorage().reconnect_loops([main, bridge])
     assert adjust_bridges(main, {})[1].name == 'guard_true'
     assert adjust_bridges(main, {'loop-13': True})[1].name == 'int_add'
+
+def test_parsing_strliteral():
+    ops = parse("""
+    debug_merge_point('StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]')
+    """).operations
+    assert slice_debug_merge_points(ops).chunks[0].bytecode_name == 'StrLiteralSearch'
+
+LINES = '''
+0:3
+1:3
+2:604
+3:396
+4:102
+5:2000
+6:3147
+7:2445
+8:2005
+9:2000
+10:1420
+11:40
+12:0
+'''.split("\n")
+
+def test_parse_log_count():
+    nums = parse_log_counts(LINES)
+    assert nums[5] == 2000