def copy_propagate_update_analysis(stmt, var_dict, array_analysis): """update array analysis data during copy propagation. If an array is in defs of a statement, we update its size variables. """ array_shape_classes = array_analysis.array_shape_classes class_sizes = array_analysis.class_sizes array_size_vars = array_analysis.array_size_vars # find defs of stmt def_set = set() if isinstance(stmt, ir.Assign): def_set.add(stmt.target.name) for T, def_func in analysis.ir_extension_usedefs.items(): if isinstance(stmt, T): _, def_set = def_func(stmt) # update analysis for arrays in defs for var in def_set: if var in array_shape_classes: if var in array_size_vars: array_size_vars[var] = replace_vars_inner(array_size_vars[var], var_dict) shape_corrs = array_shape_classes[var] for c in shape_corrs: if c != -1: class_sizes[c] = replace_vars_inner( class_sizes[c], var_dict) return
def apply_copies_sort(sort_node, var_dict, name_var_table, typemap, calltypes, save_copies): """apply copy propagate in sort node""" sort_node.key_arr = replace_vars_inner(sort_node.key_arr, var_dict) for col_name in list(sort_node.df_vars.keys()): sort_node.df_vars[col_name] = replace_vars_inner( sort_node.df_vars[col_name], var_dict) return
def apply_copies_filter(filter_node, var_dict, name_var_table, ext_func, ext_data, typemap, calltypes, save_copies): """apply copy propagate in filter node""" filter_node.bool_arr = replace_vars_inner(filter_node.bool_arr, var_dict) for col_name in list(filter_node.df_in_vars.keys()): filter_node.df_in_vars[col_name] = replace_vars_inner(filter_node.df_in_vars[col_name], var_dict) for col_name in list(filter_node.df_out_vars.keys()): filter_node.df_out_vars[col_name] = replace_vars_inner(filter_node.df_out_vars[col_name], var_dict) return
def apply_copies_csv(csv_node, var_dict, name_var_table, typemap, calltypes, save_copies): """apply copy propagate in csv node""" # update output_vars new_out_vars = [] for col_var in csv_node.out_vars: new_var = replace_vars_inner(col_var, var_dict) new_out_vars.append(new_var) csv_node.out_vars = new_out_vars csv_node.file_name = replace_vars_inner(csv_node.file_name, var_dict) return
def apply_copies_sort(sort_node, var_dict, name_var_table, typemap, calltypes, save_copies): """apply copy propagate in sort node""" for i in range(len(sort_node.key_arrs)): sort_node.key_arrs[i] = replace_vars_inner(sort_node.key_arrs[i], var_dict) sort_node.out_key_arrs[i] = replace_vars_inner(sort_node.out_key_arrs[i], var_dict) for col_name in list(sort_node.df_in_vars.keys()): sort_node.df_in_vars[col_name] = replace_vars_inner( sort_node.df_in_vars[col_name], var_dict) for col_name in list(sort_node.df_out_vars.keys()): sort_node.df_out_vars[col_name] = replace_vars_inner( sort_node.df_out_vars[col_name], var_dict) return
def apply_copies_join(join_node, var_dict, name_var_table, typemap, calltypes, save_copies): """apply copy propagate in join node""" # left for col_name in list(join_node.left_vars.keys()): join_node.left_vars[col_name] = replace_vars_inner( join_node.left_vars[col_name], var_dict) # right for col_name in list(join_node.right_vars.keys()): join_node.right_vars[col_name] = replace_vars_inner( join_node.right_vars[col_name], var_dict) # output for col_name in list(join_node.df_out_vars.keys()): join_node.df_out_vars[col_name] = replace_vars_inner( join_node.df_out_vars[col_name], var_dict) return