Skip to content

Commit 5cbabd2

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

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

pydatastructs/graphs/_backend/cpp/llvm_adjacency_list.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -223,16 +223,20 @@ def _create_hash_functions(self):
223223

224224
len_match = self.builder.icmp_signed('==', entry_key_len, key_len)
225225

226-
next_entry_ptr = self.builder.gep(entry_ptr, [ir.Constant(self.int_type, 0), ir.Constant(self.int_type, 3)])
227-
next_entry = self.builder.load(next_entry_ptr)
228-
self.builder.store(next_entry, current)
229-
230226
content_check_block = self.hash_lookup.append_basic_block(name="content_check")
231-
self.builder.cbranch(len_match, content_check_block, loop_block)
227+
next_block = self.hash_lookup.append_basic_block(name="next_entry")
228+
229+
self.builder.cbranch(len_match, content_check_block, next_block)
232230

233231
self.builder.position_at_end(content_check_block)
234232
strings_match = self._compare_strings(entry_key, key, key_len)
235-
self.builder.cbranch(strings_match, found_block, loop_block)
233+
self.builder.cbranch(strings_match, found_block, next_block)
234+
235+
self.builder.position_at_end(next_block)
236+
next_entry_ptr = self.builder.gep(entry_ptr, [ir.Constant(self.int_type, 0), ir.Constant(self.int_type, 3)])
237+
next_entry = self.builder.load(next_entry_ptr)
238+
self.builder.store(next_entry, current)
239+
self.builder.branch(loop_block)
236240

237241
self.builder.position_at_end(found_block)
238242
value_ptr = self.builder.gep(entry_ptr, [ir.Constant(self.int_type, 0), ir.Constant(self.int_type, 2)])
@@ -529,10 +533,8 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
529533
)
530534

531535
node_ptr_type = self.node_type.as_pointer()
532-
ptr_size_bytes = ir.Constant(self.int64_type, 8)
533-
new_size_bytes = self.builder.mul(self.builder.zext(new_capacity, self.int64_type), ptr_size_bytes)
534-
535-
new_array_mem = self.builder.call(self.malloc_func, [new_size_bytes])
536+
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(""))))])
536538
new_array = self.builder.bitcast(new_array_mem, node_ptr_type.as_pointer())
537539

538540
copy_adj_block = self.builder.block.parent.append_basic_block(name="copy_adj")
@@ -543,7 +545,8 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
543545

544546
self.builder.position_at_end(copy_adj_block)
545547
old_adj_array_void = self.builder.load(adj_list_ptr)
546-
old_size_bytes = self.builder.mul(self.builder.zext(current_count, self.int64_type), ptr_size_bytes)
548+
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(""))))
547550

548551
new_array_void = self.builder.bitcast(new_array, self.void_ptr)
549552
self.builder.call(self.memcpy_func, [new_array_void, old_adj_array_void, old_size_bytes])
@@ -558,12 +561,10 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
558561
self.builder.branch(add_adj_block)
559562

560563
self.builder.position_at_end(add_adj_block)
561-
562564
adj_array_void = self.builder.load(adj_list_ptr)
563565
adj_array_typed = self.builder.bitcast(adj_array_void, node_ptr_type.as_pointer())
564566

565567
current_count_final = self.builder.load(adj_count_ptr)
566-
567568
tgt_slot_ptr = self.builder.gep(adj_array_typed, [current_count_final])
568569

569570
self.builder.store(tgt_node_ptr, tgt_slot_ptr)
@@ -604,7 +605,6 @@ def _create_hash_insert(self):
604605
self.builder.ret(ir.Constant(self.int_type, 0))
605606

606607
def _create_is_adjacent(self):
607-
608608
is_adj_type = ir.FunctionType(self.bool_type,
609609
[self.graph_type.as_pointer(), self.char_ptr, self.int_type, self.char_ptr, self.int_type])
610610
self.is_adjacent = ir.Function(self.module, is_adj_type, name="is_adjacent")
@@ -663,11 +663,9 @@ def _create_is_adjacent(self):
663663
self.builder.cbranch(loop_condition, adj_check_block, false_block)
664664

665665
self.builder.position_at_end(adj_check_block)
666-
ptr_size = ir.Constant(self.int64_type, 8)
667-
offset_64 = self.builder.mul(self.builder.zext(i_val, self.int64_type), ptr_size)
668-
adj_entry_ptr = self.builder.gep(adj_list, [offset_64])
669-
adj_entry_typed = self.builder.bitcast(adj_entry_ptr, self.node_type.as_pointer().as_pointer())
670-
adj_node = self.builder.load(adj_entry_typed)
666+
adj_list_typed = self.builder.bitcast(adj_list, self.node_type.as_pointer().as_pointer())
667+
adj_entry_ptr = self.builder.gep(adj_list_typed, [i_val])
668+
adj_node = self.builder.load(adj_entry_ptr)
671669

672670
nodes_match = self.builder.icmp_signed('==', adj_node, node2_ptr)
673671
self.builder.cbranch(nodes_match, true_block, adj_next_block)

0 commit comments

Comments
 (0)