is_ir_extbb() added
[libfirm] / ir / ana / irextbb_t.h
index 1577862..97e44bc 100644 (file)
@@ -23,6 +23,7 @@
 #include "firm_config.h"
 #include "irgraph_t.h"
 #include "irextbb.h"
+#include "irtools.h"
 
 /**
  * An extended block.
@@ -34,6 +35,14 @@ struct _ir_extblk {
   void *link;            /**< private link field */
 };
 
+/**
+ * Checks whether a pointer points to a extended basic block.
+ * Intern version for libFirm.
+ */
+static INLINE int
+_is_ir_extbb (const void *thing) {
+  return (get_kind(thing) == k_ir_extblk);
+}
 
 /**
  * Gets the visited counter of an extended block.
@@ -62,7 +71,7 @@ _set_extbb_visited(ir_extblk *blk, unsigned long visited) {
 static INLINE void
 _mark_extbb_visited(ir_extblk *blk) {
   assert(blk);
-  blk->visited = current_ir_graph->visited;
+  blk->visited = current_ir_graph->block_visited;
 }
 
 /**
@@ -72,7 +81,7 @@ _mark_extbb_visited(ir_extblk *blk) {
 static INLINE int
 _extbb_visited(const ir_extblk *blk) {
   assert(blk);
-  return blk->visited >= current_ir_graph->visited;
+  return blk->visited >= current_ir_graph->block_visited;
 }
 
 /**
@@ -82,7 +91,7 @@ _extbb_visited(const ir_extblk *blk) {
 static INLINE int
 _extbb_not_visited(const ir_extblk *blk) {
   assert(blk);
-  return blk->visited < current_ir_graph->visited;
+  return blk->visited < current_ir_graph->block_visited;
 }
 
 /**
@@ -124,13 +133,24 @@ _get_extbb_block(ir_extblk *blk, int pos)
   return blk->blks[pos];
 }
 
-#define get_extbb_visited(blk)         _get_extbb_visited(blk)
-#define set_extbb_visited(blk, v)      _set_extbb_visited(blk, v)
-#define mark_extbb_visited(blk)          _mark_extbb_visited(blk)
+/**
+ * Return the leader basis block of an extended block
+ */
+static INLINE ir_node *
+_get_extbb_leader(ir_extblk *blk)
+{
+  return blk->blks[0];
+}
+
+#define is_ir_extbb(thing)        _is_ir_extbb(thing)
+#define get_extbb_visited(blk)    _get_extbb_visited(blk)
+#define set_extbb_visited(blk, v) _set_extbb_visited(blk, v)
+#define mark_extbb_visited(blk)   _mark_extbb_visited(blk)
 #define extbb_visited(blk)        _extbb_visited(blk)
 #define extbb_not_visited(blk)    _extbb_not_visited(blk)
 #define get_extbb_link(blk)       _get_extbb_link(blk)
 #define set_extbb_link(blk, link) _set_extbb_link(blk, link)
 #define get_extbb_n_blocks(blk)   _get_extbb_n_blocks(blk)
+#define get_extbb_leader(blk)     _get_extbb_leader(blk)
 
 #endif /* _IREXTBB_H_ */