@@ -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