consolidate utility macros in util.h
[libfirm] / ir / be / beflags.c
index 1a08275..40282ae 100644 (file)
 #include "beflags.h"
 #include "bearch.h"
 #include "beirg.h"
+#include "beirgmod.h"
 #include "besched.h"
 #include "benode.h"
 #include "belive.h"
+#include "beabihelper.h"
 
 static const arch_register_class_t *flag_class;
 static const arch_register_t       *flags_reg;
@@ -160,6 +162,7 @@ static void rematerialize_or_move(ir_node *flags_needed, ir_node *node,
        if (get_irn_mode(copy) == mode_T) {
                ir_mode *mode = flag_class->mode;
                value = new_rd_Proj(NULL, copy, mode, pn);
+               be_add_missing_keeps_node(copy);
        } else {
                value = copy;
        }
@@ -239,8 +242,9 @@ static void fix_flags_walker(ir_node *block, void *env)
                /* test whether the current node needs flags */
                arity = get_irn_arity(node);
                for (i = 0; i < arity; ++i) {
-                       const arch_register_class_t *cls = arch_get_irn_reg_class(node, i);
-                       if (cls == flag_class) {
+                       const arch_register_req_t *req
+                               = arch_get_irn_register_req_in(node, i);
+                       if (req->cls == flag_class) {
                                assert(new_flags_needed == NULL);
                                new_flags_needed = get_irn_n(node, i);
                        }