X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Fircfscc.c;h=a1dcc0b660e03449a83f982350b5c139704ccb59;hb=427f3beeb5d575e58b41c156f352e9dea708132a;hp=b573c1f94d8241f3ec2536a7f4832fcacdd2df79;hpb=1dd85c8a385de68bafff794258b52c08deb0cd00;p=libfirm diff --git a/ir/ana/ircfscc.c b/ir/ana/ircfscc.c index b573c1f94..a1dcc0b66 100644 --- a/ir/ana/ircfscc.c +++ b/ir/ana/ircfscc.c @@ -1,18 +1,31 @@ /* - * Project: libFIRM - * File name: ir/ana/irscc.c - * Purpose: Compute the strongly connected regions and build - * backedge/cfloop datastructures. - * A variation on the Tarjan algorithm. See also [Trapp:99], - * Chapter 5.2.1.2. - * Author: Goetz Lindenmaier - * Modified by: - * Created: 7.2002 - * CVS-ID: $Id$ - * Copyright: (c) 2002-2003 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. */ +/** + * @file + * @brief Compute the strongly connected regions and build backedge/cfloop + * datastructures. A variation on the Tarjan algorithm. See also + * [Trapp:99], Chapter 5.2.1.2. + * @author Goetz Lindenmaier + * @date 7.2002 + * @version $Id$ + */ #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -291,7 +304,9 @@ static ir_loop *new_loop (void) { * Called from a walker. */ static INLINE void -init_node (ir_node *n, void *env) { +init_node (ir_node *n, void *env) +{ + (void) env; if (is_Block(n)) set_irn_link (n, new_scc_info()); clear_backedges(n); @@ -317,6 +332,7 @@ init_scc (ir_graph *irg) { irg_walk_graph(irg, init_node, NULL, NULL); } +#ifdef INTERPROCEDURAL_VIEW /** * Initializes the scc algorithm for the interprocedural case. */ @@ -329,6 +345,7 @@ init_ip_scc (void) { cg_walk (link_to_reg_end, NULL, NULL); #endif } +#endif /** * Condition for breaking the recursion: n is the block @@ -369,7 +386,6 @@ is_head (ir_node *n, ir_node *root) some_outof_loop = 1; } else { if (get_irn_uplink(pred) < get_irn_uplink(root)) { - DDMN(pred); DDMN(root); assert(get_irn_uplink(pred) >= get_irn_uplink(root)); } some_in_loop = 1; @@ -406,7 +422,6 @@ is_endless_head (ir_node *n, ir_node *root) some_outof_loop = 1; //printf(" some out of loop "); } else { if(get_irn_uplink(pred) < get_irn_uplink(root)) { - DDMN(pred); DDMN(root); assert(get_irn_uplink(pred) >= get_irn_uplink(root)); } some_in_loop = 1; @@ -683,7 +698,7 @@ int construct_cf_backedges(ir_graph *irg) { return max_loop_depth; } - +#ifdef INTERPROCEDURAL_VIEW int construct_ip_cf_backedges (void) { ir_graph *rem = current_ir_graph; int rem_ipv = get_interprocedural_view(); @@ -755,20 +770,27 @@ int construct_ip_cf_backedges (void) { set_interprocedural_view(rem_ipv); return max_loop_depth; } +#endif /** * Clear the intra- and the interprocedural * backedge information pf a block. */ static void reset_backedges(ir_node *block) { - int rem = get_interprocedural_view(); + int rem; assert(is_Block(block)); +#ifdef INTERPROCEDURAL_VIEW + rem = get_interprocedural_view(); set_interprocedural_view(1); clear_backedges(block); set_interprocedural_view(0); clear_backedges(block); set_interprocedural_view(rem); +#else + (void) rem; + clear_backedges(block); +#endif } /** @@ -799,10 +821,14 @@ void free_cfloop_information(ir_graph *irg) { void free_all_cfloop_information (void) { int i; +#ifdef INTERPROCEDURAL_VIEW int rem = get_interprocedural_view(); set_interprocedural_view(1); /* To visit all filter nodes */ +#endif for (i = get_irp_n_irgs() - 1; i >= 0; --i) { free_cfloop_information(get_irp_irg(i)); } +#ifdef INTERPROCEDURAL_VIEW set_interprocedural_view(rem); +#endif }