@@ -150,7 +150,9 @@ def reduce_var_deps_by_var(mem_model: MemoryModel, insts_list: list, var_name: s
150150 last_pos += 1
151151
152152
153- def assign_register_banks_to_vars (mem_model : MemoryModel , insts_list : list , use_bank0 : bool ) -> str :
153+ def assign_register_banks_to_vars (
154+ mem_model : MemoryModel , insts_list : list , use_bank0 : bool , strategy = "largest_first" , interchange = False
155+ ) -> str :
154156 """
155157 Assigns register banks to variables using vertex coloring graph algorithm.
156158
@@ -171,7 +173,8 @@ def assign_register_banks_to_vars(mem_model: MemoryModel, insts_list: list, use_
171173 If `False`, bank 0 will not be assigned to any variable. Resulting ASM instructions
172174 should add corresponding `move` instructions to move variables from bank 0 to
173175 correct bank.
174- verbose (bool, optional): If True, prints verbose output. Defaults to False.
176+ strategy (str, optional): Strategy for greedy coloring algorithm. Defaults to "largest_first".
177+ interchange (bool, optional): Whether to use interchange in greedy coloring. Defaults to False.
175178
176179 Raises:
177180 ValueError: Thrown for these cases:
@@ -193,7 +196,7 @@ def assign_register_banks_to_vars(mem_model: MemoryModel, insts_list: list, use_
193196 # Extract the dependency graph for variables
194197 dep_graph_vars , dest_names , source_names = dependency_graph_for_vars (insts_list )
195198 only_sources = source_names - dest_names # Find which variables are ever only used as sources
196- color_dict = nx .greedy_color (dep_graph_vars ) # Do coloring
199+ color_dict = nx .greedy_color (dep_graph_vars , strategy = strategy , interchange = interchange ) # Do coloring
197200
198201 needs_reduction = False
199202 for var_name , bank in color_dict .items ():
0 commit comments