+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_sched);
+
+void sched_renumber(const ir_node *block)
+{
+ ir_node *irn;
+ sched_info_t *inf;
+ sched_timestep_t step = SCHED_INITIAL_GRANULARITY;
+
+ sched_foreach(block, irn) {
+ inf = get_irn_sched_info(irn);
+ inf->time_step = step;
+ step += SCHED_INITIAL_GRANULARITY;
+ }
+}
+
+int sched_skip_cf_predicator(const ir_node *irn, void *data) {
+ arch_env_t *ae = data;
+ return arch_irn_class_is(ae, irn, branch);
+}
+
+int sched_skip_phi_predicator(const ir_node *irn, void *data) {
+ return is_Phi(irn);
+}
+
+/* Skip nodes in a schedule. */
+ir_node *sched_skip(ir_node *from, int forward, sched_predicator_t *predicator, void *data)
+{
+ const ir_node *bl = get_block(from);
+ ir_node *curr;
+
+ if (forward) {
+ if (is_Block(from))
+ from = sched_next(from);
+ for (curr = from; curr != bl && predicator(curr, data); curr = sched_next(curr)) {
+ }
+ } else {
+ if (is_Block(from))
+ from = sched_prev(from);
+ for (curr = from; curr != bl && predicator(curr, data); curr = sched_prev(curr)) {
+ }
+ }
+
+ return curr;
+}
+
+//---------------------------------------------------------------------------
+
+typedef struct remove_dead_nodes_env_t_ {
+ ir_graph *irg;
+ bitset_t *reachable;
+} remove_dead_nodes_env_t;
+
+/**
+ * Post-walker: remember all visited nodes in a bitset.
+ */
+static void mark_dead_nodes_walker(ir_node *node, void *data)
+{
+ remove_dead_nodes_env_t *env = (remove_dead_nodes_env_t*) data;
+ bitset_set(env->reachable, get_irn_idx(node));
+}
+
+/**
+ * Post-block-walker:
+ * Walk through the schedule of every block and remove all dead nodes from it.
+ */
+static void remove_dead_nodes_walker(ir_node *block, void *data)