set_Proj_proj(pairs[i].out_node, get_Proj_proj(pairs[i].in_node));
}
-#ifdef SCHEDULE_PROJS
- /* remove the proj from the schedule */
- sched_remove(pairs[i].out_node);
-#endif
-
/* reroute the edges from the proj to the argument */
exchange(pairs[i].out_node, pairs[i].in_node);
//edges_reroute(pairs[i].out_node, pairs[i].in_node, env->birg->irg);
/* set as in for next Perm */
pairs[pidx].in_node = res1;
}
- else {
-#ifdef SCHEDULE_PROJS
- sched_remove(res1);
-#endif
- }
-
-#ifdef SCHEDULE_PROJS
- sched_remove(res2);
-#endif
set_Proj_pred(res2, cpyxchg);
set_Proj_proj(res2, 0);
set_Proj_pred(res1, cpyxchg);
set_Proj_proj(res1, 1);
-#ifdef SCHEDULE_PROJS
- sched_add_after(sched_point, res1);
- sched_add_after(sched_point, res2);
-#endif
arch_set_irn_register(arch_env, res2, cycle->elems[i + 1]);
arch_set_irn_register(arch_env, res1, cycle->elems[i]);
arch_set_irn_register(arch_env, cpyxchg, cycle->elems[i + 1]);
n_ops++;
-#ifdef SCHEDULE_PROJS
- /* remove the proj from the schedule */
- sched_remove(res2);
-#endif
/* exchange copy node and proj */
exchange(res2, cpyxchg);
bitset_set(keep, nr);
if (!is_Proj(op) && get_nodes_block(op) == bl
&& (op == frontier || sched_comes_after(frontier, op))) {
+ /* don't move around nodes that modifies the flags */
+ if (arch_irn_is(aenv, op, modify_flags)) {
+ continue;
+ }
+
for (i = get_irn_arity(op) - 1; i >= 0; --i) {
ir_node *opop = get_irn_n(op, i);
if (!arch_irn_consider_in_reg_alloc(aenv, cls, opop)) {
/* reroute all users of the proj to the moved node. */
edges_reroute(proj, move, irg);
-#ifdef SCHEDULE_PROJS
- /* remove the proj from the schedule. */
- sched_remove(proj);
-#endif
-
/* and like it to bad so it is no more in the use array of the perm */
set_Proj_pred(proj, get_irg_bad(irg));
* @param walk_env The walker environment
*/
static void lower_nodes_after_ra_walker(ir_node *irn, void *walk_env) {
- if (! is_Block(irn) && ! is_Proj(irn)) {
- if (be_is_Perm(irn)) {
- int perm_stayed = 1; //push_through_perm(irn, walk_env);
- if (perm_stayed)
- lower_perm_node(irn, walk_env);
- }
- }
+ int perm_stayed;
- return;
+ if (is_Block(irn) || is_Proj(irn))
+ return;
+ if (!be_is_Perm(irn))
+ return;
+
+ perm_stayed = push_through_perm(irn, walk_env);
+ if (!perm_stayed)
+ return;
+
+ lower_perm_node(irn, walk_env);
}
/**