fixed remat flag for load nodes
[libfirm] / ir / be / besched_t.h
index abefd2d..d218df9 100644 (file)
@@ -17,6 +17,9 @@ extern size_t sched_irn_data_offset;
 
 /**
  * The schedule structure which is present at each ir node.
+ *
+ * Currently, only basic blocks are scheduled. The list head of
+ * every block schedule list is the Block list.
  */
 typedef struct _sched_info_t {
        struct list_head list;         /**< The list head to list the nodes in a schedule. */
@@ -37,6 +40,16 @@ typedef struct _sched_info_t {
  */
 void be_sched_init(void);
 
+/**
+ * Check, if the node is scheduled.
+ * @param irn The node.
+ * @return 1, if the node is scheduled, 0 if not.
+ */
+static INLINE int _sched_is_scheduled(const ir_node *irn)
+{
+  return get_irn_sched_info(irn)->scheduled;
+}
+
 /**
  * Get the time step of an irn in a schedule.
  * @param irn The node.
@@ -44,6 +57,7 @@ void be_sched_init(void);
  */
 static INLINE int _sched_get_time_step(const ir_node *irn)
 {
+       assert(_sched_is_scheduled(irn));
        return get_irn_sched_info(irn)->time_step;
 }
 
@@ -55,10 +69,14 @@ static INLINE int _sched_get_time_step(const ir_node *irn)
  */
 static INLINE int to_appear_in_schedule(const ir_node *irn)
 {
-  if(get_irn_opcode(irn) == iro_Start)
-       return 1;
-
-  return is_data_node(irn);
+       switch(get_irn_opcode(irn)) {
+               case iro_Start:
+               case iro_Jmp:
+               case iro_Break:
+                       return 1;
+               default:
+                       return is_data_node(irn);
+       }
 }
 
 /**
@@ -209,16 +227,6 @@ static INLINE void _sched_remove(ir_node *irn)
   info->scheduled = 0;
 }
 
-/**
- * Check, if the node is scheduled.
- * @param irn The node.
- * @return 1, if the node is scheduled, 0 if not.
- */
-static INLINE int _sched_is_scheduled(const ir_node *irn)
-{
-  return get_irn_sched_info(irn)->scheduled;
-}
-
 /**
  * Compare two nodes according to their position in the schedule.
  * @param a The first node.
@@ -287,18 +295,18 @@ int sched_skip_phi_predicator(const ir_node *irn, void *data);
 extern ir_node *sched_skip(ir_node *from, int forward,
     sched_predicator_t *predicator, void *data);
 
-#define sched_get_time_step(irn)           _sched_get_time_step(irn)
-#define sched_has_succ(irn)                    _sched_has_succ(irn)
-#define sched_has_prev(irn)                    _sched_has_prev(irn)
-#define sched_succ(irn)                                _sched_succ(irn)
-#define sched_prev(irn)                                _sched_prev(irn)
-#define sched_first(irn)                               _sched_first(irn)
-#define sched_last(irn)                                _sched_last(irn)
-#define sched_add_before(before, irn)  _sched_add_before(before, irn)
-#define sched_add_after(after, irn)    _sched_add_after(after, irn)
-#define sched_remove(irn)              _sched_remove(irn)
+#define sched_get_time_step(irn)        _sched_get_time_step(irn)
+#define sched_has_next(irn)             _sched_has_next(irn)
+#define sched_has_prev(irn)             _sched_has_prev(irn)
+#define sched_next(irn)                 _sched_next(irn)
+#define sched_prev(irn)                 _sched_prev(irn)
+#define sched_first(irn)                _sched_first(irn)
+#define sched_last(irn)                 _sched_last(irn)
+#define sched_add_before(before, irn)   _sched_add_before(before, irn)
+#define sched_add_after(after, irn)     _sched_add_after(after, irn)
+#define sched_remove(irn)               _sched_remove(irn)
 #define sched_is_scheduled(irn)         _sched_is_scheduled(irn)
-#define sched_comes_after(n1, n2)       _sched_comes_after(n1, n1)
+#define sched_comes_after(n1, n2)       _sched_comes_after(n1, n2)
 #define sched_cmp(a, b)                 _sched_cmp(a, b)
 
 #endif