def test_jump_target(): x = ''' [] jump() ''' loop = parse(x) assert loop.operations[0].descr is loop.token
def test_boxkind(): x = """ [sum0] """ loop = parse(x, None, {}, boxkinds={'sum': BoxInt}) b = loop.getboxes() assert isinstance(b.sum0, BoxInt)
def test_floats(): x = ''' [f0] f1 = float_add(f0, 3.5) ''' loop = parse(x) assert isinstance(loop.operations[0].args[0], BoxFloat)
def parse(self, s, boxkinds=None): return parse(s, self.cpu, self.namespace, type_system=self.type_system, boxkinds=boxkinds, invent_fail_descr=self.invent_fail_descr)
def test_jump_target_other(): looptoken = LoopToken() x = ''' [] jump(descr=looptoken) ''' loop = parse(x, namespace=locals()) assert loop.operations[0].descr is looptoken
def test_after_fail(): x = """ [i0] guard_value(i0, 3) [] i1 = int_add(1, 2) """ loop = parse(x, None, {}) assert len(loop.operations) == 2
def test_boxname(): x = """ [i42] i50 = int_add(i42, 1) """ loop = parse(x, None, {}) assert str(loop.inputargs[0]) == 'i42' assert str(loop.operations[0].result) == 'i50'
def test_getvar_const_ptr(): x = ''' [] call(ConstPtr(func_ptr)) ''' TP = lltype.GcArray(lltype.Signed) NULL = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.nullptr(TP)) loop = parse(x, None, {'func_ptr': NULL}) assert loop.operations[0].args[0].value == NULL
def test_getboxes(): x = """ [i0] i1 = int_add(i0, 10) """ loop = parse(x, None, {}) boxes = loop.getboxes() assert boxes.i0 is loop.inputargs[0] assert boxes.i1 is loop.operations[0].result
def test_setvalues(): x = """ [i0] i1 = int_add(i0, 10) """ loop = parse(x, None, {}) loop.setvalues(i0=32, i1=42) assert loop.inputargs[0].value == 32 assert loop.operations[0].result.value == 42
def test_getvar_const_ptr(): x = ''' [] call(ConstPtr(func_ptr)) ''' TP = lltype.GcArray(lltype.Signed) NULL = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.nullptr(TP)) loop = parse(x, None, {'func_ptr' : NULL}) assert loop.operations[0].args[0].value == NULL
def test_descr_setfield(): class Xyz(AbstractDescr): pass x = """ [p0] setfield_gc(p0, 3, descr=stuff) """ stuff = Xyz() loop = parse(x, None, locals()) assert loop.operations[0].descr is stuff
def test_const_ptr_subops(): x = """ [p0] guard_class(p0, ConstClass(vtable)) [] """ S = lltype.Struct('S') vtable = lltype.nullptr(S) loop = parse(x, None, locals()) assert len(loop.operations) == 1 assert loop.operations[0].descr assert loop.operations[0].fail_args == []
def test_debug_merge_point(): x = ''' [] debug_merge_point("info") debug_merge_point('info') debug_merge_point('<some ('other,')> info') debug_merge_point('(stuff) #1') ''' loop = parse(x) assert loop.operations[0].args[0]._get_str() == 'info' assert loop.operations[1].args[0]._get_str() == 'info' assert loop.operations[2].args[0]._get_str() == "<some ('other,')> info" assert loop.operations[3].args[0]._get_str() == "(stuff) #1"
def test_basic_parse(): x = """ [i0, i1] # a comment i2 = int_add(i0, i1) i3 = int_sub(i2, 3) # another comment finish() # (tricky) """ loop = parse(x) assert len(loop.operations) == 3 assert [op.opnum for op in loop.operations ] == [rop.INT_ADD, rop.INT_SUB, rop.FINISH] assert len(loop.inputargs) == 2 assert loop.operations[-1].descr
def test_basic_parse(): x = """ [i0, i1] # a comment i2 = int_add(i0, i1) i3 = int_sub(i2, 3) # another comment finish() # (tricky) """ loop = parse(x) assert len(loop.operations) == 3 assert [op.opnum for op in loop.operations] == [rop.INT_ADD, rop.INT_SUB, rop.FINISH] assert len(loop.inputargs) == 2 assert loop.operations[-1].descr
def main(argv): parts = split_logs_into_loops(py.path.local(argv[0]).read()) for oplist in parts: loop = parse(oplist, no_namespace=True) num_ops = 0 num_dmp = 0 num_guards = 0 for op in loop.operations: if op.opnum == rop.DEBUG_MERGE_POINT: num_dmp += 1 else: num_ops += 1 if op.is_guard(): num_guards += 1 print "Loop, length: %d, opcodes: %d, guards: %d" % (num_ops, num_dmp, num_guards)
def main(argv): log = logparser.parse_log_file(argv[0]) parts = logparser.extract_category(log, "jit-log-opt-") for i, oplist in enumerate(parts): loop = parse(oplist, no_namespace=True) num_ops = 0 num_dmp = 0 num_guards = 0 for op in loop.operations: if op.opnum == rop.DEBUG_MERGE_POINT: num_dmp += 1 else: num_ops += 1 if op.is_guard(): num_guards += 1 print "Loop #%d, length: %d, opcodes: %d, guards: %d, %f" % (i, num_ops, num_dmp, num_guards, num_ops/num_dmp)
def test_compile_new_loop(): cpu = FakeCPU() staticdata = FakeMetaInterpStaticData() staticdata.cpu = cpu staticdata.globaldata = FakeGlobalData() staticdata.globaldata.loopnumbering = 1 # loop = parse(''' [p1] i1 = getfield_gc(p1, descr=valuedescr) i2 = int_add(i1, 1) p2 = new_with_vtable(ConstClass(node_vtable)) setfield_gc(p2, i2, descr=valuedescr) jump(p2) ''', namespace=LLtypeMixin.__dict__.copy()) # metainterp = FakeMetaInterp() metainterp.staticdata = staticdata metainterp.cpu = cpu metainterp.history = History(metainterp.cpu) metainterp.history.operations = loop.operations[:] metainterp.history.inputargs = loop.inputargs[:] # loop_tokens = [] loop_token = compile_new_loop(metainterp, loop_tokens, [], 0) assert loop_tokens == [loop_token] assert loop_token.number == 1 assert staticdata.globaldata.loopnumbering == 2 # assert len(cpu.seen) == 1 assert cpu.seen[0][2] == loop_token # del cpu.seen[:] metainterp = FakeMetaInterp() metainterp.staticdata = staticdata metainterp.cpu = cpu metainterp.history = History(metainterp.cpu) metainterp.history.operations = loop.operations[:] metainterp.history.inputargs = loop.inputargs[:] # loop_token_2 = compile_new_loop(metainterp, loop_tokens, [], 0) assert loop_token_2 is loop_token assert loop_tokens == [loop_token] assert len(cpu.seen) == 0 assert staticdata.globaldata.loopnumbering == 2
def main(argv): log = logparser.parse_log_file(argv[0]) parts = logparser.extract_category(log, "jit-log-opt-") for i, oplist in enumerate(parts): loop = parse(oplist, no_namespace=True) num_ops = 0 num_dmp = 0 num_guards = 0 for op in loop.operations: if op.opnum == rop.DEBUG_MERGE_POINT: num_dmp += 1 else: num_ops += 1 if op.is_guard(): num_guards += 1 print "Loop #%d, length: %d, opcodes: %d, guards: %d, %f" % ( i, num_ops, num_dmp, num_guards, num_ops / num_dmp)
def test_compile_new_loop(): cpu = FakeCPU() staticdata = FakeMetaInterpStaticData() staticdata.cpu = cpu staticdata.globaldata = FakeGlobalData() staticdata.globaldata.loopnumbering = 1 # loop = parse(''' [p1] i1 = getfield_gc(p1, descr=valuedescr) i2 = int_add(i1, 1) p2 = new_with_vtable(ConstClass(node_vtable)) setfield_gc(p2, i2, descr=valuedescr) jump(p2) ''', namespace=LLtypeMixin.__dict__.copy()) # metainterp = FakeMetaInterp() metainterp.staticdata = staticdata metainterp.cpu = cpu metainterp.history = History() metainterp.history.operations = loop.operations[:] metainterp.history.inputargs = loop.inputargs[:] # loop_tokens = [] loop_token = compile_new_loop(metainterp, loop_tokens, [], 0) assert loop_tokens == [loop_token] assert loop_token.number == 1 assert staticdata.globaldata.loopnumbering == 2 # assert len(cpu.seen) == 1 assert cpu.seen[0][2] == loop_token # del cpu.seen[:] metainterp = FakeMetaInterp() metainterp.staticdata = staticdata metainterp.cpu = cpu metainterp.history = History() metainterp.history.operations = loop.operations[:] metainterp.history.inputargs = loop.inputargs[:] # loop_token_2 = compile_new_loop(metainterp, loop_tokens, [], 0) assert loop_token_2 is loop_token assert loop_tokens == [loop_token] assert len(cpu.seen) == 0 assert staticdata.globaldata.loopnumbering == 2
def parse_loops(self, opslogfile): from pypy.jit.metainterp.test.oparser import parse, split_logs_into_loops assert opslogfile.check() logs = opslogfile.read() parts = split_logs_into_loops(logs) # skip entry bridges, they can contain random things self.loops = [parse(part, no_namespace=True) for part in parts if "entry bridge" not in part] self.sliced_loops = [] # contains all bytecodes of all loops for loop in self.loops: for op in loop.operations: if op.getopname() == "debug_merge_point": sliced_loop = BytecodeTrace() sliced_loop.bytecode = op.args[0]._get_str().rsplit(" ", 1)[1] self.sliced_loops.append(sliced_loop) else: sliced_loop.append(op) self.check_0_op_bytecodes()
def parse_loops(self, opslogfile): from pypy.jit.metainterp.test.oparser import parse from pypy.tool import logparser assert opslogfile.check() log = logparser.parse_log_file(str(opslogfile)) parts = logparser.extract_category(log, 'jit-log-opt-') # skip entry bridges, they can contain random things self.loops = [parse(part, no_namespace=True) for part in parts if not from_entry_bridge(part, parts)] self.sliced_loops = [] # contains all bytecodes of all loops self.total_ops = 0 for loop in self.loops: self.total_ops += len(loop.operations) for op in loop.operations: if op.getopname() == "debug_merge_point": sliced_loop = BytecodeTrace() sliced_loop.bytecode = op.args[0]._get_str().rsplit(" ", 1)[1] self.sliced_loops.append(sliced_loop) else: sliced_loop.append(op) self.check_0_op_bytecodes()
def parse_loops(self, opslogfile): from pypy.jit.metainterp.test.oparser import parse from pypy.tool import logparser assert opslogfile.check() log = logparser.parse_log_file(str(opslogfile)) parts = logparser.extract_category(log, 'jit-log-opt-') # skip entry bridges, they can contain random things self.loops = [ parse(part, no_namespace=True) for part in parts if not from_entry_bridge(part, parts) ] self.sliced_loops = [] # contains all bytecodes of all loops self.total_ops = 0 for loop in self.loops: self.total_ops += len(loop.operations) for op in loop.operations: if op.getopname() == "debug_merge_point": sliced_loop = BytecodeTrace() sliced_loop.bytecode = op.args[0]._get_str().rsplit( " ", 1)[1] self.sliced_loops.append(sliced_loop) else: sliced_loop.append(op) self.check_0_op_bytecodes()
def test_parse_no_namespace(): parts = split_logs_into_loops(examplelog) for part in parts: loop = parse(part, no_namespace=True)
def parse(self, s, boxkinds=None): return parse(s, self.cpu, self.namespace, type_system=self.type_system, boxkinds=boxkinds)
def main(loopnum, loopfile): log = logparser.parse_log_file(loopfile) loops = logparser.extract_category(log, "jit-log-opt-") inp = loops[loopnum] loop = parse(inp, no_namespace=True) loop.show()
def test_parse_no_namespace(): loop = parse(example_loop_log, no_namespace=True)
def test_descr_with_obj_print(): x = ''' [p0] setfield_gc(p0, 1, descr=<SomeDescr>) ''' loop = parse(x)
def main(loopnum, loopfile): data = py.path.local(loopfile).read() loops = split_logs_into_loops(data) inp = loops[loopnum] loop = parse(inp, no_namespace=True) loop.show()