From: Adam Szalkowski Date: Tue, 12 Sep 2006 07:38:35 +0000 (+0000) Subject: some more debug output if no definition for a value is found on a path X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=e7e5dbe35dbb245c5c833192e05c22de3618a5a5;p=libfirm some more debug output if no definition for a value is found on a path --- diff --git a/ir/be/beirgmod.c b/ir/be/beirgmod.c index 45db09588..50d65bdad 100644 --- a/ir/be/beirgmod.c +++ b/ir/be/beirgmod.c @@ -243,10 +243,12 @@ static ir_node *search_def(ir_node *usage, int pos, pset *copies, pset *copy_blo * predecessor block of the usage. */ while(curr_bl != NULL) { + ir_node *phim; /* * If this block contains a copy, search the block - * instruction by instruction. + * instruction by instruction. If nothing is found + * search for a not scheduled PhiM. */ if(pset_find_ptr(copy_blocks, curr_bl)) { ir_node *irn; @@ -258,6 +260,16 @@ static ir_node *search_def(ir_node *usage, int pos, pset *copies, pset *copy_blo if(pset_find_ptr(copies, irn)) return irn; } + + for(phim = pset_first(copies); phim; phim = pset_next(copies)) { + if(!is_Phi(phim) || !(get_irn_mode(phim) == mode_M)) + continue; + + if(get_nodes_block(phim) == curr_bl) { + pset_break(copies); + return phim; + } + } } if(pset_find_ptr(phi_blocks, curr_bl)) { @@ -280,6 +292,16 @@ static ir_node *search_def(ir_node *usage, int pos, pset *copies, pset *copy_blo for(i = 0; i < n_preds; ++i) { ir_node *arg = search_def(phi, i, copies, copy_blocks, phis, phi_blocks, mode); + if(arg == NULL) { + ir_node *irn; + + ir_fprintf(stderr, "no definition found for %+F at position %d\nCopies: ", phi, i); + for(irn = pset_first(copies); irn; irn = pset_next(copies)) { + ir_fprintf(stderr, "%+F ", irn); + } + ir_fprintf(stderr, "\n\n"); + assert(arg && "no definition found"); + } DBG((dbg, LEVEL_2, "\t\t%+F(%d) -> %+F\n", phi, i, arg)); set_irn_n(phi, i, arg); } @@ -347,8 +369,15 @@ static void fix_usages(pset *copies, pset *copy_blocks, pset *phi_blocks, pset * def = search_def(irn, pos, copies, copy_blocks, phis, phi_blocks, mode); DBG((dbg, LEVEL_2, "\t%+F(%d) -> %+F\n", irn, pos, def)); - if(def != NULL) - set_irn_n(irn, pos, def); + if(def == NULL) { + ir_fprintf(stderr, "no definition found for %+F at position %d\nCopies: ", irn, pos); + for(irn = pset_first(copies); irn; irn = pset_next(copies)) { + ir_fprintf(stderr, "%+F ", irn); + } + ir_fprintf(stderr, "\n\n"); + assert(def && "no definition found"); + } + set_irn_n(irn, pos, def); } obstack_free(&obst, NULL);