X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopyheur3.c;h=d22a6f4b7970ae93ebd21ed4f4803433f7cd501c;hb=8535fe8732b0acf822be252812a7158ce5b8134a;hp=d8a452b26c845ee374944805f0ad34a43c466464;hpb=da48a7f7266cfe6274fc4d159d63bba245724222;p=libfirm diff --git a/ir/be/becopyheur3.c b/ir/be/becopyheur3.c index d8a452b26..d22a6f4b7 100644 --- a/ir/be/becopyheur3.c +++ b/ir/be/becopyheur3.c @@ -1,18 +1,14 @@ - /** * More experiments on coalescing. * @author Sebastian Hack * @date 25.07.2006 */ - #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif -#ifdef WITH_LIBCORE #include #include -#endif /* WITH_LIBCORE */ #include #include @@ -24,6 +20,7 @@ #include "debug.h" #include "bitfiddle.h" #include "bitset.h" +#include "raw_bitset.h" #include "irphase_t.h" #include "irgraph_t.h" @@ -49,7 +46,6 @@ static unsigned dump_flags = 0; static int dbg_level = 0; -#ifdef WITH_LIBCORE static const lc_opt_enum_mask_items_t dump_items[] = { { "before", DUMP_BEFORE }, { "after", DUMP_AFTER }, @@ -78,24 +74,23 @@ void be_init_copyheur3(void) } BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyheur3); -#endif static void set_admissible_regs(be_java_coal_t *coal, copy_opt_t *co, ir_node *irn, int t_idx, int *col_map) { - unsigned i; - arch_register_req_t req; - unsigned n_regs = co->cls->n_regs; + const arch_register_req_t *req; + + req = arch_get_register_req(co->aenv, irn, BE_OUT_POS(0)); // ir_printf("%+F\n", irn); - arch_get_register_req(co->aenv, &req, irn, BE_OUT_POS(0)); - if(arch_register_req_is(&req, limited)) { - bitset_t *adm = bitset_alloca(n_regs); - req.limited(req.limited_env, adm); - for(i = 0; i < n_regs; ++i) - if(!bitset_is_set(adm, i) && col_map[i] >= 0) { - // printf("\tforbidding color: %d\n", i); + if(arch_register_req_is(req, limited)) { + unsigned i; + unsigned n_regs = co->cls->n_regs; + + for(i = 0; i < n_regs; ++i) { + if(!rbitset_is_set(req->limited, i) && col_map[i] >= 0) { be_java_coal_forbid_color(coal, t_idx, col_map[i]); } + } } }