-/**
- * A walker along the memory edge. Load and Phi nodes muss be found for optimisation
- *
- * @param *node A node from the graph.
- * @param *env Contains information about scalars number and mode.
- * @parm *repairs A set, that contains all blocks, that have a link, and all Phis, that
- * have copies to repair.
-*/
-
-static void memory_edge_walk2(ir_node *node, env_t *env, set *repairs)
-{
- int i, p, n = get_irn_arity(node);
- repairs_t key, *value, *value_block;
- ir_node *phi_pred;
- DDMN(node);
-
- for (i = 0; i < n; i++){
-
- ir_node *pred = get_irn_n(node, i);
-
- if((get_irn_op(pred) == op_Proj &&
- get_irn_mode(pred) == mode_M) ||
- get_irn_mode(pred) == mode_T ||
- is_memop(pred) ||
- get_irn_op(pred) == op_Call ||
- get_irn_op(pred) == op_Alloc)
- memory_edge_walk2(pred, env, repairs);
-
- if(get_irn_op(pred) == op_Phi &&
- get_irn_mode(pred) == mode_M &&
- get_irn_link(pred) != NODE_VISITED){
- set_irn_link(pred, NODE_VISITED);
- memory_edge_walk2(pred, env, repairs);
- }
- }
-
- if (get_irn_op(node) == op_Load)
- load_handling(node, env, repairs);
-
- if (get_irn_op(node) == op_Phi && get_irn_mode(node) == mode_M){
- key.irn = node;
- value = set_find(repairs, &key, sizeof(key), HASH_PTR(key.irn));
- /* If the phi is in the set " repairs ", then muss be handled.*/
- if(value != NULL){
- // DDMN(node);
- key.irn = get_nodes_block(node);
- value_block = set_find(repairs, &key, sizeof(key), HASH_PTR(key.irn));
- n = get_irn_arity(node);
- /* All predecessors of a Phi node muss be found.*/
- for(i = 0; i < env->nvals; i ++)
- for(p = 0; p < n; p ++){
- phi_pred = get_Phi_pred(value->irn, p);
- pred_search(phi_pred, value_block, repairs, i, p);
- }
- }
- }
- /* Reset the links, that have beeb used by the walk.*/
- if(get_irn_link(node) == NODE_VISITED)
- set_irn_link(node, NULL);
-}
-
-/**
- * A walker along the memory edge in a loop.The walker walk from the node to the loop head.
- * Load and Phi nodes muss be found for optimisation
- *
- * @param *node A node from the graph.
- * @param *env Contains information about scalars number and mode.
- * @parm *repairs A set, that contains all blocks, that have a link, and all Phis, that
- * have copies to repair.
-*/
-static void loop_walk(ir_node *node, env_t *env, set *repairs)
-{
- int i, p, n = get_irn_arity(node);
- repairs_t key, *value, *value_block;
- ir_node *phi_pred;
- DDMN(node);
-
- /* Test if the loop head have been achieved. */
- if(has_backedges(get_nodes_block(node)))
- return;
-
- for (i = 0; i < n; i++){
-
- ir_node *pred = get_irn_n(node, i);
-
-
- if((get_irn_op(pred) == op_Proj &&
- get_irn_mode(pred) == mode_M) ||
- get_irn_mode(pred) == mode_T ||
- is_memop(pred) ||
- get_irn_op(pred) == op_Call ||
- get_irn_op(pred) == op_Alloc)
- loop_walk(pred, env, repairs);
-
-
- if(get_irn_op(pred) == op_Phi &&
- get_irn_mode(pred) == mode_M &&
- get_irn_link(pred) != LOOP_WALK) {
- set_irn_link(pred, LOOP_WALK);
- loop_walk(pred, env, repairs);
- }
-
- }
-
-
- if (get_irn_op(node) == op_Load)
- load_handling(node, env, repairs);
-
- if (get_irn_op(node) == op_Phi && get_irn_mode(node) == mode_M){
- key.irn = node;
- value = set_find(repairs, &key, sizeof(key), HASH_PTR(key.irn));
- /* If the phi is in the set " repairs ", then muss be handled.*/
- if(value != NULL){
- DDMN(node);
- key.irn = get_nodes_block(node);
- value_block = set_find(repairs, &key, sizeof(key), HASH_PTR(key.irn));
- n = get_irn_arity(node);
- /* All predecessors of a Phi node muss be found.*/
- for(i = 0; i < env->nvals; i ++)
- for(p = 0; p < n; p ++){
- phi_pred = get_Phi_pred(value->irn, p);
- pred_search(phi_pred, value_block, repairs, i, p);
- }
- }
- }
- /* Reset the links, that have beeb used by the walk.*/
- if(get_irn_link(node) == LOOP_WALK)
- set_irn_link(node, NULL);
-}
-
-/**
- * Handle Stors, that were been scalar replaced or
- * will be scalar replaced.
- *
- * @param *load A store node.
- * @param *env Contains information about scalars number and mode.
- * @parm *repairs A set, that contains all blocks, that have a link, and all Phis, that
- * have copies to repair.