+ sched_info_t *info = get_irn_sched_info(irn);
+ assert(_sched_is_scheduled(before));
+ assert(!_sched_is_scheduled(irn));
+ assert(!is_Proj(irn));
+ list_add_tail(&info->list, &get_irn_sched_info(before)->list);
+ _sched_set_time_stamp(irn);
+ info->scheduled = 1;
+}
+
+/**
+ * Add a node to a block schedule.
+ * @param block The block to whose schedule the node shall be added to.
+ * @param irn The node to add.
+ * @return The given node.
+ */
+static INLINE void _sched_add_after(const ir_node *after, const ir_node *irn)
+{
+ sched_info_t *info = get_irn_sched_info(irn);
+ assert(_sched_is_scheduled(after));
+ assert(!_sched_is_scheduled(irn));
+ assert(!is_Proj(irn));
+ list_add(&info->list, &get_irn_sched_info(after)->list);
+ _sched_set_time_stamp(irn);
+ info->scheduled = 1;
+}
+
+static INLINE void _sched_init_block(const ir_node *block)
+{
+ sched_info_t *info = get_irn_sched_info(block);
+ assert(info->scheduled == 0 && info->time_step == 0);
+ INIT_LIST_HEAD(&info->list);
+ info->scheduled = 1;
+}
+
+static INLINE void _sched_reset(const ir_node *node)
+{
+ sched_info_t *info = get_irn_sched_info(node);
+ info->scheduled = 0;
+}
+
+/**
+ * Remove a node from the scheduled.
+ * @param irn The node.
+ */
+static INLINE void _sched_remove(const ir_node *irn)
+{
+ sched_info_t *info = get_irn_sched_info(irn);
+ list_del(&info->list);
+ INIT_LIST_HEAD(&info->list);
+ info->scheduled = 0;