Skip to content

Commit f028882

Browse files
Prerak SinghPrerak Singh
authored andcommitted
bug fix
1 parent 5cbabd2 commit f028882

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

pydatastructs/graphs/_backend/cpp/llvm_adjacency_list.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ def _create_structures(self):
6262
self.int_type
6363
])
6464

65+
self.target_machine = None
66+
67+
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()
71+
return self.target_machine.target_data
72+
6573
def _create_function_declarations(self):
6674

6775
malloc_type = ir.FunctionType(self.void_ptr, [self.int64_type])
@@ -255,7 +263,7 @@ def _create_node_functions(self):
255263

256264
name_ptr, name_len, node_id = self.create_node.args
257265

258-
node_size = ir.Constant(self.int64_type, self.node_type.get_abi_size(llvm.create_target_data("")))
266+
node_size = ir.Constant(self.int64_type, self.node_type.get_abi_size(self._get_target_data()))
259267
node_mem = self.builder.call(self.malloc_func, [node_size])
260268
node_ptr = self.builder.bitcast(node_mem, self.node_type.as_pointer())
261269

@@ -285,7 +293,7 @@ def _create_graph_init(self):
285293
block = self.graph_init.append_basic_block(name="entry")
286294
self.builder = ir.IRBuilder(block)
287295

288-
graph_size = ir.Constant(self.int64_type, self.graph_type.get_abi_size(llvm.create_target_data("")))
296+
graph_size = ir.Constant(self.int64_type, self.graph_type.get_abi_size(self._get_target_data()))
289297
graph_mem = self.builder.call(self.malloc_func, [graph_size])
290298
graph_ptr = self.builder.bitcast(graph_mem, self.graph_type.as_pointer())
291299

@@ -491,7 +499,7 @@ def _create_add_edge(self):
491499

492500
self.builder.position_at_end(create_edge_block)
493501

494-
edge_size = ir.Constant(self.int64_type, self.edge_type.get_abi_size(llvm.create_target_data("")))
502+
edge_size = ir.Constant(self.int64_type, self.edge_type.get_abi_size(self._get_target_data()))
495503
edge_mem = self.builder.call(self.malloc_func, [edge_size])
496504
edge_ptr = self.builder.bitcast(edge_mem, self.edge_type.as_pointer())
497505

@@ -533,8 +541,9 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
533541
)
534542

535543
node_ptr_type = self.node_type.as_pointer()
544+
ptr_size = ir.Constant(self.int64_type, node_ptr_type.get_abi_size(self._get_target_data()))
536545
new_size_elements = self.builder.zext(new_capacity, self.int64_type)
537-
new_array_mem = self.builder.call(self.malloc_func, [self.builder.mul(new_size_elements, ir.Constant(self.int64_type, node_ptr_type.get_abi_size(llvm.create_target_data(""))))])
546+
new_array_mem = self.builder.call(self.malloc_func, [self.builder.mul(new_size_elements, ptr_size)])
538547
new_array = self.builder.bitcast(new_array_mem, node_ptr_type.as_pointer())
539548

540549
copy_adj_block = self.builder.block.parent.append_basic_block(name="copy_adj")
@@ -546,7 +555,7 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
546555
self.builder.position_at_end(copy_adj_block)
547556
old_adj_array_void = self.builder.load(adj_list_ptr)
548557
old_size_elements = self.builder.zext(current_count, self.int64_type)
549-
old_size_bytes = self.builder.mul(old_size_elements, ir.Constant(self.int64_type, node_ptr_type.get_abi_size(llvm.create_target_data(""))))
558+
old_size_bytes = self.builder.mul(old_size_elements, ptr_size)
550559

551560
new_array_void = self.builder.bitcast(new_array, self.void_ptr)
552561
self.builder.call(self.memcpy_func, [new_array_void, old_adj_array_void, old_size_bytes])
@@ -582,7 +591,7 @@ def _create_hash_insert(self):
582591

583592
table_ptr, key, key_len, value = self.hash_insert.args
584593

585-
entry_size = ir.Constant(self.int64_type, self.hash_entry_type.get_abi_size(llvm.create_target_data("")))
594+
entry_size = ir.Constant(self.int64_type, self.hash_entry_type.get_abi_size(self._get_target_data()))
586595
entry_mem = self.builder.call(self.malloc_func, [entry_size])
587596
entry_ptr = self.builder.bitcast(entry_mem, self.hash_entry_type.as_pointer())
588597

@@ -1225,11 +1234,9 @@ def _remove_vertex_from_node_adjacency(self, node_ptr, vertex_name, vertex_name_
12251234
self.builder.cbranch(loop_condition, check_vertex_block, update_count_block)
12261235

12271236
self.builder.position_at_end(check_vertex_block)
1228-
ptr_size = ir.Constant(self.int64_type, 8)
1229-
read_offset_64 = self.builder.mul(self.builder.zext(i_val, self.int64_type), ptr_size)
1230-
read_entry_ptr = self.builder.gep(adj_list, [read_offset_64])
1231-
read_entry_typed = self.builder.bitcast(read_entry_ptr, self.node_type.as_pointer().as_pointer())
1232-
adj_node = self.builder.load(read_entry_typed)
1237+
adj_list_typed = self.builder.bitcast(adj_list, self.node_type.as_pointer().as_pointer())
1238+
read_entry_ptr = self.builder.gep(adj_list_typed, [i_val])
1239+
adj_node = self.builder.load(read_entry_ptr)
12331240

12341241
adj_node_name_ptr = self.builder.gep(adj_node, [ir.Constant(self.int_type, 0), ir.Constant(self.int_type, 1)])
12351242
adj_node_name = self.builder.load(adj_node_name_ptr)
@@ -1258,10 +1265,8 @@ def _remove_vertex_from_node_adjacency(self, node_ptr, vertex_name, vertex_name_
12581265
self.builder.cbranch(indices_different, do_copy_block, advance_write_block)
12591266

12601267
self.builder.position_at_end(do_copy_block)
1261-
write_offset_64 = self.builder.mul(self.builder.zext(write_idx_val, self.int64_type), ptr_size)
1262-
write_entry_ptr = self.builder.gep(adj_list, [write_offset_64])
1263-
write_entry_typed = self.builder.bitcast(write_entry_ptr, self.node_type.as_pointer().as_pointer())
1264-
self.builder.store(adj_node, write_entry_typed)
1268+
write_entry_ptr = self.builder.gep(adj_list_typed, [write_idx_val])
1269+
self.builder.store(adj_node, write_entry_ptr)
12651270
self.builder.branch(advance_write_block)
12661271

12671272
self.builder.position_at_end(advance_write_block)
@@ -1386,6 +1391,7 @@ def compile_to_machine_code(self):
13861391

13871392
target = llvm.Target.from_default_triple()
13881393
target_machine = target.create_target_machine()
1394+
self.target_machine = target_machine
13891395

13901396
mod = llvm.parse_assembly(str(self.module))
13911397
mod.verify()

0 commit comments

Comments
 (0)