@@ -528,7 +528,7 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
528528 current_capacity = self .builder .load (adj_cap_ptr )
529529
530530 needs_resize = self .builder .icmp_signed ('>=' , current_count , current_capacity )
531-
531+
532532 resize_adj_block = self .builder .block .parent .append_basic_block (name = "resize_adj" )
533533 add_adj_block = self .builder .block .parent .append_basic_block (name = "add_adj" )
534534
@@ -547,33 +547,30 @@ def _add_to_adjacency_list(self, src_node_ptr, tgt_node_ptr):
547547
548548 old_adj_list = self .builder .load (adj_list_ptr )
549549 copy_needed = self .builder .icmp_signed ('>' , current_count , ir .Constant (self .int_type , 0 ))
550-
550+
551551 copy_block = self .builder .block .parent .append_basic_block (name = "copy_existing" )
552552 store_block = self .builder .block .parent .append_basic_block (name = "store_new_array" )
553-
553+
554554 self .builder .cbranch (copy_needed , copy_block , store_block )
555-
555+
556556 self .builder .position_at_end (copy_block )
557557 old_size_bytes = self .builder .mul (self .builder .zext (current_count , self .int64_type ), ptr_size )
558558 self .builder .call (self .memcpy_func , [new_array_mem , old_adj_list , old_size_bytes ])
559559 self .builder .call (self .free_func , [old_adj_list ])
560560 self .builder .branch (store_block )
561-
561+
562562 self .builder .position_at_end (store_block )
563563 self .builder .store (new_array_mem , adj_list_ptr )
564564 self .builder .store (new_capacity , adj_cap_ptr )
565565 self .builder .branch (add_adj_block )
566566
567567 self .builder .position_at_end (add_adj_block )
568568 adj_array = self .builder .load (adj_list_ptr )
569+ adj_array_typed = self .builder .bitcast (adj_array , self .node_type .as_pointer ().as_pointer ())
569570
570571 current_count_final = self .builder .load (adj_count_ptr )
571- offset_bytes = self .builder .mul (self .builder .zext (current_count_final , self .int64_type ), ptr_size )
572- target_addr = self .builder .gep (adj_array , [offset_bytes ])
573-
574- node_as_int = self .builder .ptrtoint (tgt_node_ptr , self .int64_type )
575- node_bytes = self .builder .bitcast (target_addr , self .int64_type .as_pointer ())
576- self .builder .store (node_as_int , node_bytes )
572+ target_addr = self .builder .gep (adj_array_typed , [current_count_final ])
573+ self .builder .store (tgt_node_ptr , target_addr )
577574
578575 new_count = self .builder .add (current_count_final , ir .Constant (self .int_type , 1 ))
579576 self .builder .store (new_count , adj_count_ptr )
@@ -655,6 +652,8 @@ def _create_is_adjacent(self):
655652 self .builder .cbranch (should_search , search_adj_block , false_block )
656653
657654 self .builder .position_at_end (search_adj_block )
655+ adj_array_typed = self .builder .bitcast (adj_list_void , self .node_type .as_pointer ().as_pointer ())
656+
658657 i = self .builder .alloca (self .int_type , name = "adj_search_i" )
659658 self .builder .store (ir .Constant (self .int_type , 0 ), i )
660659
@@ -671,15 +670,8 @@ def _create_is_adjacent(self):
671670 self .builder .cbranch (loop_condition , adj_check_block , false_block )
672671
673672 self .builder .position_at_end (adj_check_block )
674- adj_array = self .builder .load (adj_list_ptr )
675-
676- ptr_size = ir .Constant (self .int64_type , 8 )
677- offset_bytes = self .builder .mul (self .builder .zext (i_val , self .int64_type ), ptr_size )
678- entry_addr = self .builder .gep (adj_array , [offset_bytes ])
679-
680- entry_as_int_ptr = self .builder .bitcast (entry_addr , self .int64_type .as_pointer ())
681- entry_as_int = self .builder .load (entry_as_int_ptr )
682- adj_node = self .builder .inttoptr (entry_as_int , self .node_type .as_pointer ())
673+ entry_ptr = self .builder .gep (adj_array_typed , [i_val ])
674+ adj_node = self .builder .load (entry_ptr )
683675
684676 nodes_match = self .builder .icmp_signed ('==' , adj_node , node2_ptr )
685677 self .builder .cbranch (nodes_match , true_block , adj_next_block )
@@ -967,7 +959,6 @@ def _remove_from_adjacency_list(self, src_node_ptr, tgt_node_ptr):
967959 self .builder .cbranch (loop_condition , adj_check_block , adj_done_block )
968960
969961 self .builder .position_at_end (adj_check_block )
970-
971962 adj_entry_ptr = self .builder .gep (adj_list_typed , [i_val ])
972963 adj_node = self .builder .load (adj_entry_ptr )
973964
@@ -990,7 +981,6 @@ def _remove_from_adjacency_list(self, src_node_ptr, tgt_node_ptr):
990981 self .builder .cbranch (shift_condition , do_adj_shift_block , finish_adj_shift_block )
991982
992983 self .builder .position_at_end (do_adj_shift_block )
993-
994984 src_adj_ptr = self .builder .gep (adj_list_typed , [next_shift_idx ])
995985 dst_adj_ptr = self .builder .gep (adj_list_typed , [shift_i_val ])
996986
@@ -1217,6 +1207,7 @@ def _remove_vertex_from_node_adjacency(self, node_ptr, vertex_name, vertex_name_
12171207 self .builder .cbranch (adj_exists , process_adj_block , skip_adj_block )
12181208
12191209 self .builder .position_at_end (process_adj_block )
1210+ adj_list_typed = self .builder .bitcast (adj_list , self .node_type .as_pointer ().as_pointer ())
12201211
12211212 write_index = self .builder .alloca (self .int_type , name = "write_idx" )
12221213 self .builder .store (ir .Constant (self .int_type , 0 ), write_index )
@@ -1238,7 +1229,6 @@ def _remove_vertex_from_node_adjacency(self, node_ptr, vertex_name, vertex_name_
12381229 self .builder .cbranch (loop_condition , check_vertex_block , update_count_block )
12391230
12401231 self .builder .position_at_end (check_vertex_block )
1241- adj_list_typed = self .builder .bitcast (adj_list , self .node_type .as_pointer ().as_pointer ())
12421232 read_entry_ptr = self .builder .gep (adj_list_typed , [i_val ])
12431233 adj_node = self .builder .load (read_entry_ptr )
12441234
0 commit comments