-/**
- * Returns non-zero if a node must be placed in the schedule.
- */
-static INLINE int must_appear_in_schedule(const list_sched_selector_t *sel, void *block_env, const ir_node *irn)
-{
- int res = -1;
-
- /* if there are no uses, don't schedule */
- if (get_irn_n_edges(irn) < 1)
- return 0;
-
- /* else ask the scheduler */
- if (sel->to_appear_in_schedule)
- res = sel->to_appear_in_schedule(block_env, irn);
-
- return res >= 0 ? res : ((to_appear_in_schedule(irn) || BE_SCHED_NODE(irn)) && ! is_Unknown(irn));
-}
-
-/* forward */
-static void make_users_ready(block_sched_env_t *env, ir_node *irn);
-
-static void make_user_ready(block_sched_env_t *env, ir_node *pred, ir_node *user) {
- if (! is_Phi(user)) {
- if (! must_appear_in_schedule(env->selector, env, user)) {
- /* notify the selector about the finally selected node. */
- if (env->selector->node_selected)
- env->selector->node_selected(env->selector_block_env, user);
-
- /* Insert the node in the set of all available scheduled nodes. */
- set_already_scheduled(env, user);
-
- make_users_ready(env, user);
- } else {
- if (! ir_nodeset_contains(&env->cands, user)) {
- /* work-around: this should NEVER be true, else we have a cycle in the basic block.
- for now it's needed to compile bzip2.c */
- if (sched_is_scheduled(user)) {
- //assert(!"make an already scheduled user ready");
- }
- else {
- make_ready(env, pred, user);
- }
- }
- }
- }
-}
-
-