bescripts: Remove unused execution unit specification.
[libfirm] / ir / be / belive_t.h
index 15e58ed..06ea057 100644 (file)
@@ -31,6 +31,7 @@
 #include "irhooks.h"
 #include "irlivechk.h"
 #include "belive.h"
+#include "bearch.h"
 
 #define be_is_live_in(lv, bl, irn)    _be_is_live_xxx(lv, bl, irn, be_lv_state_in)
 #define be_is_live_end(lv, bl, irn)   _be_is_live_xxx(lv, bl, irn, be_lv_state_end)
@@ -103,9 +104,32 @@ static inline ir_node *be_lv_iteration_next(lv_iterator_t *iterator, be_lv_state
        return NULL;
 }
 
+static inline ir_node *be_lv_iteration_cls_next(lv_iterator_t *iterator, be_lv_state_t flags, const arch_register_class_t *cls)
+{
+       while (iterator->i != 0) {
+               const be_lv_info_t *info = iterator->info + iterator->i--;
+               if (!(info->node.flags & flags))
+                       continue;
+
+               ir_node *node = info->node.node;
+               ir_mode *mode = get_irn_mode(node);
+               if (!mode_is_datab(mode))
+                       continue;
+               if (!arch_irn_consider_in_reg_alloc(cls, node))
+                       continue;
+               return node;
+       }
+       return NULL;
+}
+
 #define be_lv_foreach(lv, block, flags, node) \
        for (bool once = true; once;) \
                for (lv_iterator_t iter = be_lv_iteration_begin((lv), (block)); once; once = false) \
                        for (ir_node *node; (node = be_lv_iteration_next(&iter, (flags))) != NULL;)
 
+#define be_lv_foreach_cls(lv, block, flags, cls, node) \
+       for (bool once = true; once;) \
+               for (lv_iterator_t iter = be_lv_iteration_begin((lv), (block)); once; once = false) \
+                       for (ir_node *node; (node = be_lv_iteration_cls_next(&iter, (flags), (cls))) != NULL;)
+
 #endif