Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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