#include "irnode_t.h"
#include "irgraph_t.h"
+#include "beutil.h"
#include "besched.h"
typedef unsigned int sched_timestep_t;
*/
static INLINE int to_appear_in_schedule(ir_node *irn)
{
- int i, n;
+ if(get_irn_opcode(irn) == iro_Start)
+ return 1;
- for(i = 0, n = get_irn_arity(irn); i < n; ++i) {
- ir_node *op = get_irn_n(irn, i);
- if(mode_is_datab(get_irn_mode(op)))
- return 1;
- }
-
- return mode_is_datab(get_irn_mode(irn));
+ return is_data_node(irn);
}
/**
*/
static INLINE ir_node *_sched_add_before(ir_node *before, ir_node *irn)
{
- sched_info_t *info = get_irn_sched_info(irn);
+ sched_info_t *info = get_irn_sched_info(irn);
list_add_tail(&info->list, &get_irn_sched_info(before)->list);
- _sched_set_time_stamp(irn);
- info->scheduled = 1;
+ _sched_set_time_stamp(irn);
+ info->scheduled = 1;
return irn;
}
*/
static INLINE ir_node *_sched_add_after(ir_node *after, ir_node *irn)
{
- sched_info_t *info = get_irn_sched_info(irn);
+ sched_info_t *info = get_irn_sched_info(irn);
list_add(&info->list, &get_irn_sched_info(after)->list);
- _sched_set_time_stamp(irn);
- info->scheduled = 1;
+ _sched_set_time_stamp(irn);
+ info->scheduled = 1;
return irn;
}
{
sched_info_t *info = get_irn_sched_info(irn);
list_del(&info->list);
+ INIT_LIST_HEAD(&info->list);
info->scheduled = 0;
}
/**
- * Check, if thenode is scheduled.
+ * Check, if the node is scheduled.
* @param irn The node.
* @return 1, if the node is scheduled, 0 if not.
*/
* A predicate for a node.
* @param irn The node.
* @param data The custom data.
- * @return 1 or 0, depending on your criteria.
+ * @return 1 if irn should be skipped. Else 0.
*/
typedef int (sched_predicator_t)(const ir_node *irn, void *data);
+
+int sched_skip_cf_predicator(const ir_node *irn, void *data);
+int sched_skip_phi_predicator(const ir_node *irn, void *data);
+
/**
* Skip nodes in a schedule.
* @param from The node to start from.