+static unsigned live_cond(ir_node *node, int pos)
+{
+ ir_node *cp = get_inversion_copy(loop_head);
+ if(node==loop_head) {
+ return is_own_backedge(loop_head, pos);
+ } else if (node == cp) {
+ return !is_own_backedge(cp, pos);
+ } else
+ return 1;
+
+}
+
+#if 0
+/* */
+static void construct_ssa_special(ir_node *orig_block, ir_node *orig_val,
+ ir_node *second_block, ir_node *second_val, is_live_edge *cond)
+{
+ ir_graph *irg;
+ ir_mode *mode;
+ const ir_edge_t *edge;
+ const ir_edge_t *next;
+ out_edge *users;
+ int i;
+
+ assert(orig_block && orig_val && second_block && second_val &&
+ "no parameter of construct_ssa may be NULL");
+
+ /* no need to do anything */
+ if (orig_val == second_val)
+ return;
+
+ irg = get_irn_irg(orig_val);
+
+ ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED);
+ inc_irg_visited(irg);
+
+ mode = get_irn_mode(orig_val);
+ set_irn_link(orig_block, orig_val);
+ mark_irn_visited(orig_block);
+
+ ssa_second_def_block = second_block;
+ ssa_second_def = second_val;
+ found_sec_def = 0;
+
+ users = NEW_ARR_F(out_edge, 0);
+
+ foreach_out_edge_safe(orig_val, edge, next) {
+ ir_node *user = get_edge_src_irn(edge);
+ int j = get_edge_src_pos(edge);
+
+ out_edge e;
+ e.node = user;
+ e.pos = j;
+
+ /* ignore keeps */
+ if (! is_End(user))
+ ARR_APP1(out_edge, users, e);
+ }
+
+ /* Only fix the users of the first, i.e. the original node */
+ for (i = 0; i < ARR_LEN(users); ++i) {
+ out_edge e = users[i];
+ ir_node *user = e.node;
+ int j = e.pos;
+ ir_node *user_block = get_nodes_block(user);
+ ir_node *newval;
+
+ /* ignore keeps */
+ if (is_End(user))
+ continue;
+
+ DB((dbg, LEVEL_5, "USER %N of original %N\n", user, orig_val));
+ /*FIXME*/
+ if (is_Phi(user)) {
+ int u_arity = get_irn_arity(user);
+ int i;
+ ir_node **ins;
+
+ NEW_ARR_A(ir_node *, ins, u_arity);
+ for(i = 0; i < u_arity; ++i) {
+
+ ir_node *pred_block = get_Block_cfgpred_block(user_block, i);
+ DB((dbg, LEVEL_5, "SEARCH %N?\n", pred_block));
+ if (! cond(user_block, i)) {
+ DB((dbg, LEVEL_5, "SEARCH %N NO\n", pred_block));
+ ins[i] = get_irn_n(user, i);
+ continue;
+ }
+ ins[i] = search_def_and_create_phis(pred_block, mode, 1);
+ DB((dbg, LEVEL_5, "SEARCH %N RETURNED %N\n", ins[i]));
+
+ }
+ set_irn_in(user, u_arity, ins);
+
+ } else {
+ newval = search_def_and_create_phis(user_block, mode, 1);
+ if (newval != user && !is_Bad(newval))
+ set_irn_n(user, j, newval);
+ }
+ }
+
+ ir_free_resources(irg, IR_RESOURCE_IRN_VISITED);
+}
+#endif
+
+