def on_assign(self, states, assign): rhs = assign.value if isinstance(rhs, ir.Inst): newdef = self._fix_var( states, assign, assign.value.list_vars(), ) # Has a replacement that is not the current variable if newdef is not None and newdef.target is not ir.UNDEFINED: if states["varname"] != newdef.target.name: replmap = {states["varname"]: newdef.target} rhs = copy(rhs) ir_utils.replace_vars_inner(rhs, replmap) return ir.Assign( target=assign.target, value=rhs, loc=assign.loc, ) elif isinstance(rhs, ir.Var): newdef = self._fix_var(states, assign, [rhs]) # Has a replacement that is not the current variable if newdef is not None and states["varname"] != newdef.target.name: return ir.Assign( target=assign.target, value=newdef.target, loc=assign.loc, ) return assign
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