source: parabix-LLVM/llvm_git/bindings/python/llvm/tests/test_core.py @ 4078

Last change on this file since 4078 was 4078, checked in by linmengl, 5 years ago

checkin llvm-meng source

File size: 4.6 KB
Line 
1from .base import TestBase
2from ..core import MemoryBuffer
3from ..core import PassRegistry
4from ..core import Context
5from ..core import Module
6from ..core import Enums
7from ..core import OpCode
8from ..bit_reader import parse_bitcode
9
10class TestCore(TestBase):
11    def test_enumerations(self):
12        for enum_cls, enum_spec in Enums:
13            for enum_name, enum_value in enum_spec:
14                # First make sure that enum_cls has the name of the enum as an
15                # attribute. People will access these values as
16                # EnumCls.EnumName.
17                self.assertTrue(hasattr(enum_cls, enum_name))
18                v_attr = getattr(enum_cls, enum_name)
19                self.assertTrue(isinstance(v_attr, enum_cls))
20
21                # Then make sure that the value returned for this attribute is
22                # correct in both ways.
23                self.assertEqual(v_attr.value, enum_value)
24
25                e = enum_cls.from_value(enum_value)
26                self.assertTrue(isinstance(e, enum_cls))
27                self.assertEqual(e, v_attr)
28
29    def test_memory_buffer_create_from_file(self):
30        source = self.get_test_file()
31
32        MemoryBuffer(filename=source)
33
34    def test_memory_buffer_failing(self):
35        with self.assertRaises(Exception):
36            MemoryBuffer(filename="/hopefully/this/path/doesnt/exist")
37
38    def test_memory_buffer_len(self):
39        source = self.get_test_file()
40        m = MemoryBuffer(filename=source)
41        self.assertEqual(len(m), 50)
42
43    def test_create_passregistry(self):
44        PassRegistry()
45
46    def test_create_context(self):
47        Context.GetGlobalContext()
48
49    def test_create_module_with_name(self):
50        # Make sure we can not create a module without a LLVMModuleRef.
51        with self.assertRaises(TypeError):
52            m = Module()
53        m = Module.CreateWithName("test-module")
54
55    def test_module_getset_datalayout(self):
56        m = Module.CreateWithName("test-module")
57        dl = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
58        m.datalayout = dl
59        self.assertEqual(m.datalayout, dl)
60
61    def test_module_getset_target(self):
62        m = Module.CreateWithName("test-module")
63        target = "thumbv7-apple-ios5.0.0"
64        m.target = target
65        self.assertEqual(m.target, target)
66
67    def test_module_print_module_to_file(self):
68        m = Module.CreateWithName("test")
69        dl = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
70        m.datalayout = dl
71        target = "thumbv7-apple-ios5.0.0"
72        m.target = target
73        m.print_module_to_file("test2.ll")
74
75    def test_module_function_iteration(self):
76        m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
77        i = 0
78        functions = ["f", "f2", "f3", "f4", "f5", "f6", "g1", "g2", "h1", "h2",
79                     "h3"]
80        # Forward
81        for f in m:
82            self.assertEqual(f.name, functions[i])
83            f.dump()
84            i += 1
85        # Backwards
86        for f in reversed(m):
87            i -= 1
88            self.assertEqual(f.name, functions[i])
89            f.dump()
90
91    def test_function_basicblock_iteration(self):
92        m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
93        i = 0
94
95        bb_list = ['b1', 'b2', 'end']
96
97        f = m.first
98        while f.name != "f6":
99            f = f.next
100
101        # Forward
102        for bb in f:
103            self.assertEqual(bb.name, bb_list[i])
104            bb.dump()
105            i += 1
106
107        # Backwards
108        for bb in reversed(f):
109            i -= 1
110            self.assertEqual(bb.name, bb_list[i])
111            bb.dump()
112
113    def test_basicblock_instruction_iteration(self):
114        m = parse_bitcode(MemoryBuffer(filename=self.get_test_bc()))
115        i = 0
116
117        inst_list = [('arg1', OpCode.ExtractValue),
118                     ('arg2', OpCode.ExtractValue),
119                     ('', OpCode.Call),
120                     ('', OpCode.Ret)]
121
122        bb = m.first.first
123
124        # Forward
125        for inst in bb:
126            self.assertEqual(inst.name, inst_list[i][0])
127            self.assertEqual(inst.opcode, inst_list[i][1])
128            for op in range(len(inst)):
129                o = inst.get_operand(op)
130                print o.name
131                o.dump()
132            inst.dump()
133            i += 1
134
135        # Backwards
136        for inst in reversed(bb):
137            i -= 1
138            self.assertEqual(inst.name, inst_list[i][0])
139            self.assertEqual(inst.opcode, inst_list[i][1])
140            inst.dump()
Note: See TracBrowser for help on using the repository browser.