X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeflags.c;h=52027ecc4e193ecb24b47380621c8a8cd15991f3;hb=a25c9abc4bc057c1c09f40afb150920aadbb7a42;hp=6ea8dd1dc5714b44c84dbb0f252419f609052728;hpb=7a2c7fed8fdbe29fa0b6e1901865a901f71a6c5f;p=libfirm diff --git a/ir/be/beflags.c b/ir/be/beflags.c index 6ea8dd1dc..52027ecc4 100644 --- a/ir/be/beflags.c +++ b/ir/be/beflags.c @@ -21,7 +21,6 @@ * @file * @brief modifies schedule so flags dependencies are respected. * @author Matthias Braun, Christoph Mallon - * @version $Id: besched.h 14693 2007-06-21 15:35:49Z beck $ * * Fixup schedule to respect flag constraints by moving and rematerialisation of * nodes. @@ -54,6 +53,7 @@ #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; @@ -161,6 +161,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; } @@ -240,8 +241,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); }