Skip to content

Commit 0280cb8

Browse files
Prerak SinghPrerak Singh
authored andcommitted
bug fix
1 parent 23a138a commit 0280cb8

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

pydatastructs/graphs/_backend/cpp/llvm_adjacency_list.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ def __init__(self):
2323
self.char_ptr = self.int8_type.as_pointer()
2424
self.void_ptr = self.int8_type.as_pointer()
2525

26+
target = llvm.Target.from_default_triple()
27+
self.target_machine = target.create_target_machine()
28+
2629
self._create_structures()
2730

2831
self._create_function_declarations()
@@ -62,14 +65,16 @@ def _create_structures(self):
6265
self.int_type
6366
])
6467

65-
self.target_machine = None
66-
6768
def _get_target_data(self):
68-
if self.target_machine is None:
69-
target = llvm.Target.from_default_triple()
70-
self.target_machine = target.create_target_machine()
7169
return self.target_machine.target_data
7270

71+
def _get_struct_size(self, struct_type):
72+
return struct_type.get_abi_size(self._get_target_data())
73+
74+
def _get_pointer_size(self):
75+
import struct
76+
return struct.calcsize("P")
77+
7378
def _create_function_declarations(self):
7479

7580
malloc_type = ir.FunctionType(self.void_ptr, [self.int64_type])
@@ -263,7 +268,7 @@ def _create_node_functions(self):
263268

264269
name_ptr, name_len, node_id = self.create_node.args
265270

266-
node_size = ir.Constant(self.int64_type, self.node_type.get_abi_size(self._get_target_data()))
271+
node_size = ir.Constant(self.int64_type, self._get_struct_size(self.node_type))
267272
node_mem = self.builder.call(self.malloc_func, [node_size])
268273
node_ptr = self.builder.bitcast(node_mem, self.node_type.as_pointer())
269274

@@ -293,7 +298,7 @@ def _create_graph_init(self):
293298
block = self.graph_init.append_basic_block(name="entry")
294299
self.builder = ir.IRBuilder(block)
295300

296-
graph_size = ir.Constant(self.int64_type, self.graph_type.get_abi_size(self._get_target_data()))
301+
graph_size = ir.Constant(self.int64_type, self._get_struct_size(self.graph_type))
297302
graph_mem = self.builder.call(self.malloc_func, [graph_size])
298303
graph_ptr = self.builder.bitcast(graph_mem, self.graph_type.as_pointer())
299304

@@ -379,7 +384,10 @@ def _create_add_vertex(self):
379384
self.builder.mul(current_capacity, ir.Constant(self.int_type, 2))
380385
)
381386

382-
ptr_size = ir.Constant(self.int64_type, 8)
387+
target_data = self._get_target_data()
388+
ptr_type = self.node_type.as_pointer()
389+
ptr_size = ir.Constant(self.int64_type, self._get_pointer_size())
390+
383391
new_size_64 = self.builder.mul(self.builder.zext(new_capacity, self.int64_type), ptr_size)
384392
new_array_mem = self.builder.call(self.malloc_func, [new_size_64])
385393
new_array = self.builder.bitcast(new_array_mem, self.node_type.as_pointer().as_pointer())
@@ -499,7 +507,7 @@ def _create_add_edge(self):
499507

500508
self.builder.position_at_end(create_edge_block)
501509

502-
edge_size = ir.Constant(self.int64_type, self.edge_type.get_abi_size(self._get_target_data()))
510+
edge_size = ir.Constant(self.int64_type, self._get_struct_size(self.edge_type))
503511
edge_mem = self.builder.call(self.malloc_func, [edge_size])
504512
edge_ptr = self.builder.bitcast(edge_mem, self.edge_type.as_pointer())
505513

@@ -541,7 +549,10 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
541549
self.builder.mul(current_capacity, ir.Constant(self.int_type, 2))
542550
)
543551

544-
ptr_size = ir.Constant(self.int64_type, 8)
552+
target_data = self._get_target_data()
553+
ptr_type = self.node_type.as_pointer()
554+
ptr_size = ir.Constant(self.int64_type, self._get_pointer_size())
555+
545556
new_size_bytes = self.builder.mul(self.builder.zext(new_capacity, self.int64_type), ptr_size)
546557
new_array_mem = self.builder.call(self.malloc_func, [new_size_bytes])
547558

@@ -585,7 +596,7 @@ def _create_hash_insert(self):
585596

586597
table_ptr, key, key_len, value = self.hash_insert.args
587598

588-
entry_size = ir.Constant(self.int64_type, self.hash_entry_type.get_abi_size(self._get_target_data()))
599+
entry_size = ir.Constant(self.int64_type, self._get_struct_size(self.hash_entry_type))
589600
entry_mem = self.builder.call(self.malloc_func, [entry_size])
590601
entry_ptr = self.builder.bitcast(entry_mem, self.hash_entry_type.as_pointer())
591602

@@ -1383,14 +1394,10 @@ def _create_graph_cleanup(self):
13831394

13841395
def compile_to_machine_code(self):
13851396

1386-
target = llvm.Target.from_default_triple()
1387-
target_machine = target.create_target_machine()
1388-
self.target_machine = target_machine
1389-
13901397
mod = llvm.parse_assembly(str(self.module))
13911398
mod.verify()
13921399

1393-
ee = llvm.create_mcjit_compiler(mod, target_machine)
1400+
ee = llvm.create_mcjit_compiler(mod, self.target_machine)
13941401
ee.finalize_object()
13951402

13961403
functions = {}

0 commit comments

Comments
 (0)