struct deref_node *arg_node =
get_deref_node(copy->variables[i], state);
- if (arg_node == NULL)
+ /* Only bother removing copy entries for other nodes */
+ if (arg_node == NULL || arg_node == node)
continue;
struct set_entry *arg_entry = _mesa_set_search(arg_node->copies, copy);
nir_instr_remove(©->instr);
}
+ node->copies = NULL;
+
return true;
}
state.add_to_direct_deref_nodes = true;
nir_foreach_block(impl, register_variable_uses_block, &state);
- struct set *outputs = _mesa_set_create(state.dead_ctx,
- _mesa_hash_pointer,
- _mesa_key_pointer_equal);
-
bool progress = false;
nir_metadata_require(impl, nir_metadata_block_index);
def_stack_push(node, &load->def, &state);
}
- if (deref->var->data.mode == nir_var_shader_out)
- _mesa_set_add(outputs, node);
-
foreach_deref_node_match(deref, lower_copies_to_load_store, &state);
}