@@ -528,10 +528,12 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
528528 self .builder .mul (current_capacity , ir .Constant (self .int_type , 2 ))
529529 )
530530
531- ptr_size = ir .Constant (self .int64_type , 8 )
532- new_adj_size_64 = self .builder .mul (self .builder .zext (new_capacity , self .int64_type ), ptr_size )
533- new_adj_mem = self .builder .call (self .malloc_func , [new_adj_size_64 ])
534- new_adj_array = self .builder .bitcast (new_adj_mem , self .void_ptr )
531+ 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_array = self .builder .bitcast (new_array_mem , node_ptr_type .as_pointer ())
535537
536538 copy_adj_block = self .builder .block .parent .append_basic_block (name = "copy_adj" )
537539 no_copy_adj_block = self .builder .block .parent .append_basic_block (name = "no_copy_adj" )
@@ -540,26 +542,31 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
540542 self .builder .cbranch (has_existing_adj , copy_adj_block , no_copy_adj_block )
541543
542544 self .builder .position_at_end (copy_adj_block )
543- old_adj_array = self .builder .load (adj_list_ptr )
544- old_adj_size_64 = self .builder .mul (self .builder .zext (current_count , self .int64_type ), ptr_size )
545- self .builder .call (self .memcpy_func , [new_adj_array , old_adj_array , old_adj_size_64 ])
545+ 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 )
546547
547- self .builder .call (self .free_func , [old_adj_array ])
548+ new_array_void = self .builder .bitcast (new_array , self .void_ptr )
549+ self .builder .call (self .memcpy_func , [new_array_void , old_adj_array_void , old_size_bytes ])
550+
551+ self .builder .call (self .free_func , [old_adj_array_void ])
548552 self .builder .branch (no_copy_adj_block )
549553
550554 self .builder .position_at_end (no_copy_adj_block )
551- self .builder .store (new_adj_array , adj_list_ptr )
555+ new_array_void = self .builder .bitcast (new_array , self .void_ptr )
556+ self .builder .store (new_array_void , adj_list_ptr )
552557 self .builder .store (new_capacity , adj_cap_ptr )
553558 self .builder .branch (add_adj_block )
554559
555560 self .builder .position_at_end (add_adj_block )
556- adj_array = self .builder .load (adj_list_ptr )
561+
562+ adj_array_void = self .builder .load (adj_list_ptr )
563+ adj_array_typed = self .builder .bitcast (adj_array_void , node_ptr_type .as_pointer ())
564+
557565 current_count_final = self .builder .load (adj_count_ptr )
558566
559- offset_64 = self .builder .mul (self .builder .zext (current_count_final , self .int64_type ), ptr_size )
560- tgt_slot_ptr = self .builder .gep (adj_array , [offset_64 ])
561- tgt_slot_typed = self .builder .bitcast (tgt_slot_ptr , self .node_type .as_pointer ().as_pointer ())
562- self .builder .store (tgt_node_ptr , tgt_slot_typed )
567+ tgt_slot_ptr = self .builder .gep (adj_array_typed , [current_count_final ])
568+
569+ self .builder .store (tgt_node_ptr , tgt_slot_ptr )
563570
564571 new_adj_count = self .builder .add (current_count_final , ir .Constant (self .int_type , 1 ))
565572 self .builder .store (new_adj_count , adj_count_ptr )
@@ -922,13 +929,15 @@ def _remove_from_all_adjacency_lists(self, graph_ptr, vertex_name, vertex_name_l
922929 self .builder .position_at_end (done_adj_cleanup )
923930
924931 def _remove_from_adjacency_list (self , src_node_ptr , tgt_node_ptr ):
925-
926932 adj_list_ptr = self .builder .gep (src_node_ptr , [ir .Constant (self .int_type , 0 ), ir .Constant (self .int_type , 3 )])
927933 adj_count_ptr = self .builder .gep (src_node_ptr , [ir .Constant (self .int_type , 0 ), ir .Constant (self .int_type , 4 )])
928934
929- adj_list = self .builder .load (adj_list_ptr )
935+ adj_list_void = self .builder .load (adj_list_ptr )
930936 adj_count = self .builder .load (adj_count_ptr )
931937
938+ node_ptr_type = self .node_type .as_pointer ()
939+ adj_list_typed = self .builder .bitcast (adj_list_void , node_ptr_type .as_pointer ())
940+
932941 i = self .builder .alloca (self .int_type , name = "adj_i" )
933942 self .builder .store (ir .Constant (self .int_type , 0 ), i )
934943
@@ -947,11 +956,9 @@ def _remove_from_adjacency_list(self, src_node_ptr, tgt_node_ptr):
947956 self .builder .cbranch (loop_condition , adj_check_block , adj_done_block )
948957
949958 self .builder .position_at_end (adj_check_block )
950- ptr_size = ir .Constant (self .int64_type , 8 )
951- offset_64 = self .builder .mul (self .builder .zext (i_val , self .int64_type ), ptr_size )
952- adj_entry_ptr = self .builder .gep (adj_list , [offset_64 ])
953- adj_entry_typed = self .builder .bitcast (adj_entry_ptr , self .node_type .as_pointer ().as_pointer ())
954- adj_node = self .builder .load (adj_entry_typed )
959+
960+ adj_entry_ptr = self .builder .gep (adj_list_typed , [i_val ])
961+ adj_node = self .builder .load (adj_entry_ptr )
955962
956963 is_target = self .builder .icmp_signed ('==' , adj_node , tgt_node_ptr )
957964 self .builder .cbranch (is_target , adj_found_block , adj_next_block )
@@ -972,17 +979,12 @@ def _remove_from_adjacency_list(self, src_node_ptr, tgt_node_ptr):
972979 self .builder .cbranch (shift_condition , do_adj_shift_block , finish_adj_shift_block )
973980
974981 self .builder .position_at_end (do_adj_shift_block )
975- src_offset_64 = self .builder .mul (self .builder .zext (next_shift_idx , self .int64_type ), ptr_size )
976- dst_offset_64 = self .builder .mul (self .builder .zext (shift_i_val , self .int64_type ), ptr_size )
977-
978- src_adj_ptr = self .builder .gep (adj_list , [src_offset_64 ])
979- dst_adj_ptr = self .builder .gep (adj_list , [dst_offset_64 ])
980982
981- src_adj_typed = self .builder .bitcast ( src_adj_ptr , self . node_type . as_pointer (). as_pointer () )
982- dst_adj_typed = self .builder .bitcast ( dst_adj_ptr , self . node_type . as_pointer (). as_pointer () )
983+ src_adj_ptr = self .builder .gep ( adj_list_typed , [ next_shift_idx ] )
984+ dst_adj_ptr = self .builder .gep ( adj_list_typed , [ shift_i_val ] )
983985
984- node_to_shift = self .builder .load (src_adj_typed )
985- self .builder .store (node_to_shift , dst_adj_typed )
986+ node_to_shift = self .builder .load (src_adj_ptr )
987+ self .builder .store (node_to_shift , dst_adj_ptr )
986988
987989 self .builder .store (next_shift_idx , shift_i )
988990 self .builder .branch (adj_shift_block )
0 commit comments