X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeverify.c;h=4e211188db84d8594f4f33c911487bf49203aee6;hb=cdebd065a81afa949d70bbb2737f686acc30c946;hp=b3ad1d8def8005e77230b2ae7c625f5e34f03aa4;hpb=36cc900831e2648ebe5e7bf1b18278cd770730d5;p=libfirm diff --git a/ir/be/beverify.c b/ir/be/beverify.c index b3ad1d8de..4e211188d 100644 --- a/ir/be/beverify.c +++ b/ir/be/beverify.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -83,10 +83,12 @@ static void verify_liveness_walker(ir_node *block, void *data) { int pressure; /* collect register pressure info, start with end of a block */ + // ir_fprintf(stderr, "liveness check %+F\n", block); ir_nodeset_init(&live_nodes); be_liveness_end_of_block(env->lv, env->arch_env, env->cls, block, &live_nodes); + // print_living_values(stderr, &live_nodes); pressure = ir_nodeset_size(&live_nodes); if(pressure > env->registers_available) { ir_fprintf(stderr, "Verify Warning: Register pressure too high at end of block %+F(%s) (%d/%d):\n", @@ -99,6 +101,7 @@ static void verify_liveness_walker(ir_node *block, void *data) { if (is_Phi(irn)) break; + // print_living_values(stderr, &live_nodes); be_liveness_transfer(env->arch_env, env->cls, irn, &live_nodes); pressure = ir_nodeset_size(&live_nodes); @@ -108,6 +111,7 @@ static void verify_liveness_walker(ir_node *block, void *data) { irn, block, get_irg_dump_name(env->irg), pressure, env->registers_available); print_living_values(stderr, &live_nodes); env->problem_found = 1; + assert(0); } } ir_nodeset_destroy(&live_nodes); @@ -121,9 +125,9 @@ int be_verify_register_pressure(const be_irg_t *birg, ir_graph *irg) { be_verify_register_pressure_env_t env; - env.lv = be_liveness(irg); + env.lv = be_liveness(birg); env.irg = irg; - env.arch_env = birg->main_env->arch_env; + env.arch_env = &birg->main_env->arch_env; env.cls = cls; env.registers_available = env.cls->n_regs - be_put_ignore_regs(birg, env.cls, NULL); env.problem_found = 0; @@ -347,7 +351,7 @@ int be_verify_schedule(const be_irg_t *birg) env.problem_found = 0; env.irg = be_get_birg_irg(birg); env.scheduled = bitset_alloca(get_irg_last_idx(env.irg)); - env.arch_env = birg->main_env->arch_env; + env.arch_env = &birg->main_env->arch_env; irg_block_walk_graph(env.irg, verify_schedule_walker, NULL, &env); /* check if all nodes are scheduled */ @@ -745,8 +749,8 @@ static void check_register_constraints(ir_node *node, reg = arch_get_irn_register(arch_env, pred); if (reg == NULL) { - ir_fprintf(stderr, "Verify warning: Node %+F in block %+F(%s) should have a register assigned\n", - pred, get_nodes_block(pred), get_irg_dump_name(env->irg)); + ir_fprintf(stderr, "Verify warning: Node %+F in block %+F(%s) should have a register assigned (%+F input constraint)\n", + pred, get_nodes_block(pred), get_irg_dump_name(env->irg), node); env->problem_found = 1; continue; } @@ -830,16 +834,16 @@ static void verify_block_register_allocation(ir_node *block, void *data) { } } -int be_verify_register_allocation(const arch_env_t *arch_env, ir_graph *irg) { +int be_verify_register_allocation(const be_irg_t *birg) { be_verify_register_allocation_env_t env; - env.arch_env = arch_env; - env.irg = irg; - env.lv = be_liveness(irg); + env.arch_env = be_get_birg_arch_env(birg); + env.irg = be_get_birg_irg(birg); + env.lv = be_liveness(birg); env.problem_found = 0; be_liveness_assure_sets(env.lv); - irg_block_walk_graph(irg, verify_block_register_allocation, NULL, &env); + irg_block_walk_graph(env.irg, verify_block_register_allocation, NULL, &env); be_liveness_free(env.lv);