Esempio n. 1
0
 def test_jump(self):
     namespace = {'target': JitCellToken()}
     namespace['target'].number = 3
     inp = '''
     [i0]
     jump(i0, descr=target)
     '''
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd())
     output = logger.log_loop(loop)
     assert output.splitlines()[-1] == "jump(i0, descr=<Loop3>)"
     pure_parse(output)
Esempio n. 2
0
 def test_jump(self):
     namespace = {'target': JitCellToken()}
     namespace['target'].number = 3
     inp = '''
     [i0]
     jump(i0, descr=target)
     '''
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd())
     output = logger.log_loop(loop)
     assert output.splitlines()[-1] == "jump(i0, descr=<Loop3>)"
     pure_parse(output)
Esempio n. 3
0
def test_equaloplists():
    ops = """
    [i0]
    i1 = int_add(i0, 1)
    i2 = int_add(i1, 1)
    guard_true(i1) [i2]
    jump(i1)
    """
    namespace = {}
    loop1 = pure_parse(ops, namespace=namespace)
    loop2 = pure_parse(ops, namespace=namespace)
    loop3 = pure_parse(ops.replace("i2 = int_add", "i2 = int_sub"), namespace=namespace)
    assert equaloplists(loop1.operations, loop2.operations)
    py.test.raises(AssertionError, "equaloplists(loop1.operations, loop3.operations)")
Esempio n. 4
0
 def reparse(self, inp, namespace=None, check_equal=True):
     """ parse loop once, then log it and parse again.
     Checks that we get the same thing.
     """
     if namespace is None:
         namespace = {}
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd())
     output = logger.log_loop(loop, namespace)
     oloop = pure_parse(output, namespace=namespace)
     if check_equal:
         equaloplists(loop.operations, oloop.operations)
         assert oloop.inputargs == loop.inputargs
     return logger, loop, oloop
Esempio n. 5
0
 def reparse(self, inp, namespace=None, check_equal=True):
     """ parse loop once, then log it and parse again.
     Checks that we get the same thing.
     """
     if namespace is None:
         namespace = {}
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd())
     output = logger.log_loop(loop, namespace)
     oloop = pure_parse(output, namespace=namespace)
     if check_equal:
         equaloplists(loop.operations, oloop.operations)
         assert oloop.inputargs == loop.inputargs
     return logger, loop, oloop
Esempio n. 6
0
 def test_class_name(self):
     from pypy.rpython.lltypesystem import lltype
     AbcVTable = lltype.Struct('AbcVTable')
     abcvtable = lltype.malloc(AbcVTable, immortal=True)
     namespace = {'Name': abcvtable}
     inp = '''
     [i0]
     p = new_with_vtable(ConstClass(Name))
     '''
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd())
     output = logger.log_loop(loop)
     assert output.splitlines()[-1].endswith(
         " = new_with_vtable(ConstClass(Name))")
     pure_parse(output, namespace=namespace)
Esempio n. 7
0
def test_equaloplists_fail_args():
    ops = """
    [i0]
    i1 = int_add(i0, 1)
    i2 = int_add(i1, 1)
    guard_true(i1) [i2, i1]
    jump(i1)
    """
    namespace = {}
    loop1 = pure_parse(ops, namespace=namespace)
    loop2 = pure_parse(ops.replace("[i2, i1]", "[i1, i2]"), namespace=namespace)
    py.test.raises(AssertionError, "equaloplists(loop1.operations, loop2.operations)")
    assert equaloplists(loop1.operations, loop2.operations, strict_fail_args=False)
    loop3 = pure_parse(ops.replace("[i2, i1]", "[i2, i0]"), namespace=namespace)
    py.test.raises(AssertionError, "equaloplists(loop1.operations, loop3.operations)")
Esempio n. 8
0
 def test_class_name(self):
     from pypy.rpython.lltypesystem import lltype
     AbcVTable = lltype.Struct('AbcVTable')
     abcvtable = lltype.malloc(AbcVTable, immortal=True)
     namespace = {'Name': abcvtable}
     inp = '''
     [i0]
     p = new_with_vtable(ConstClass(Name))
     '''
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd())
     output = logger.log_loop(loop)
     assert output.splitlines()[-1].endswith(
         " = new_with_vtable(ConstClass(Name))")
     pure_parse(output, namespace=namespace)
Esempio n. 9
0
def test_equaloplists():
    ops = """
    [i0]
    i1 = int_add(i0, 1)
    i2 = int_add(i1, 1)
    guard_true(i1) [i2]
    jump(i1)
    """
    namespace = {}
    loop1 = pure_parse(ops, namespace=namespace)
    loop2 = pure_parse(ops, namespace=namespace)
    loop3 = pure_parse(ops.replace("i2 = int_add", "i2 = int_sub"),
                       namespace=namespace)
    assert equaloplists(loop1.operations, loop2.operations)
    py.test.raises(AssertionError,
                   "equaloplists(loop1.operations, loop3.operations)")
Esempio n. 10
0
    def test_guard_descr(self):
        namespace = {'fdescr': BasicFailDescr()}
        inp = '''
        [i0]
        guard_true(i0, descr=fdescr) [i0]
        '''
        loop = pure_parse(inp, namespace=namespace)
        logger = Logger(self.make_metainterp_sd(), guard_number=True)
        output = logger.log_loop(loop)
        assert output.splitlines()[-1] == "guard_true(i0, descr=<Guard0>) [i0]"
        pure_parse(output)

        logger = Logger(self.make_metainterp_sd(), guard_number=False)
        output = logger.log_loop(loop)
        lastline = output.splitlines()[-1]
        assert lastline.startswith("guard_true(i0, descr=<")
        assert not lastline.startswith("guard_true(i0, descr=<Guard")
Esempio n. 11
0
 def test_guard_descr(self):
     namespace = {'fdescr': BasicFailDescr()}
     inp = '''
     [i0]
     guard_true(i0, descr=fdescr) [i0]
     '''
     loop = pure_parse(inp, namespace=namespace)
     logger = Logger(self.make_metainterp_sd(), guard_number=True)
     output = logger.log_loop(loop)
     assert output.splitlines()[-1] == "guard_true(i0, descr=<Guard0>) [i0]"
     pure_parse(output)
     
     logger = Logger(self.make_metainterp_sd(), guard_number=False)
     output = logger.log_loop(loop)
     lastline = output.splitlines()[-1]
     assert lastline.startswith("guard_true(i0, descr=<")
     assert not lastline.startswith("guard_true(i0, descr=<Guard")
Esempio n. 12
0
def test_equaloplists_fail_args():
    ops = """
    [i0]
    i1 = int_add(i0, 1)
    i2 = int_add(i1, 1)
    guard_true(i1) [i2, i1]
    jump(i1)
    """
    namespace = {}
    loop1 = pure_parse(ops, namespace=namespace)
    loop2 = pure_parse(ops.replace("[i2, i1]", "[i1, i2]"),
                       namespace=namespace)
    py.test.raises(AssertionError,
                   "equaloplists(loop1.operations, loop2.operations)")
    assert equaloplists(loop1.operations, loop2.operations,
                        strict_fail_args=False)
    loop3 = pure_parse(ops.replace("[i2, i1]", "[i2, i0]"),
                       namespace=namespace)
    py.test.raises(AssertionError,
                   "equaloplists(loop1.operations, loop3.operations)")
Esempio n. 13
0
    def test_ops_offset(self):
        inp = '''
        [i0]
        i1 = int_add(i0, 1)
        i2 = int_mul(i1, 2)
        jump(i2)
        '''
        loop = pure_parse(inp)
        ops = loop.operations
        ops_offset = {ops[0]: 10, ops[2]: 30, None: 40}
        logger = Logger(self.make_metainterp_sd())
        output = logger.log_loop(loop, ops_offset=ops_offset)
        assert output.strip() == """
[i0]
+10: i2 = int_add(i0, 1)
i4 = int_mul(i2, 2)
+30: jump(i4)
+40: --end of the loop--
""".strip()
Esempio n. 14
0
    def test_ops_offset(self):
        inp = '''
        [i0]
        i1 = int_add(i0, 1)
        i2 = int_mul(i1, 2)
        jump(i2)
        '''
        loop = pure_parse(inp)
        ops = loop.operations
        ops_offset = {
            ops[0]: 10,
            ops[2]: 30,
            None: 40
            }
        logger = Logger(self.make_metainterp_sd())
        output = logger.log_loop(loop, ops_offset=ops_offset)
        assert output.strip() == """
[i0]
+10: i2 = int_add(i0, 1)
i4 = int_mul(i2, 2)
+30: jump(i4)
+40: --end of the loop--
""".strip()
Esempio n. 15
0
 def test_intro_bridge(self):
     bare_logger = logger.Logger(self.make_metainterp_sd())
     output = capturing(bare_logger.log_bridge, [], [], 3)
     assert output.splitlines()[0] == "# bridge out of Guard 3 with 0 ops"
     pure_parse(output)
Esempio n. 16
0
 def test_intro_loop(self):
     bare_logger = logger.Logger(self.make_metainterp_sd())
     output = capturing(bare_logger.log_loop, [], [], 1, "foo")
     assert output.splitlines()[0] == "# Loop 1 () : foo with 0 ops"
     pure_parse(output)
Esempio n. 17
0
 def test_intro_bridge(self):
     bare_logger = logger.Logger(self.make_metainterp_sd())
     output = capturing(bare_logger.log_bridge, [], [], 3)
     assert output.splitlines()[0] == "# bridge out of Guard 3 with 0 ops"
     pure_parse(output)
Esempio n. 18
0
 def test_intro_loop(self):
     bare_logger = logger.Logger(self.make_metainterp_sd())
     output = capturing(bare_logger.log_loop, [], [], 1, "foo")
     assert output.splitlines()[0] == "# Loop 1 () : foo with 0 ops"
     pure_parse(output)