X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeflags.c;h=40282aee6c3abba5fffb1744fdbb5e6527fe009b;hb=f8dfdaaff8e4f364da8494fd35a9bb2f8c267e7f;hp=1a08275b02da4f481435be3293f5254122577cb6;hpb=12203fc84a7620ce57d6cfdf2d56eb6b0a3ce076;p=libfirm diff --git a/ir/be/beflags.c b/ir/be/beflags.c index 1a08275b0..40282aee6 100644 --- a/ir/be/beflags.c +++ b/ir/be/beflags.c @@ -50,9 +50,11 @@ #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); }