+ if (be_is_Keep(node) || be_is_CopyKeep(node)) {
+ /* at least 1 of the keep arguments has to be its schedule
+ * predecessor */
+ int arity = get_irn_arity(node);
+ bool found = false;
+ ir_node *prev = sched_prev(node);
+ while (be_is_Keep(prev) || be_is_CopyKeep(prev))
+ prev = sched_prev(prev);
+
+ while (true) {
+ for (i = 0; i < arity; ++i) {
+ ir_node *in = get_irn_n(node, i);
+ in = skip_Proj(in);
+ if (in == prev)
+ found = true;
+ }
+ if (found)
+ break;
+ prev = sched_prev(prev);
+ if (!is_Phi(prev))
+ break;
+ }
+ if (!found) {
+ ir_fprintf(stderr, "%+F not scheduled after its pred node in block %+F (%s)\n",
+ node, block, get_irg_dump_name(env->irg));
+ env->problem_found = 1;
+ }
+ }