X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbedomfront.c;h=d5a3abea75f9d3f16c2197cd0724793730d7aadf;hb=69a5cd48b51a38cf6abc517bca2feef9f3a6c433;hp=c2f3703fa622741bb36a8cea1811203d602c343f;hpb=2adf84106c02caf097c2d6cf1764706bdc437bcc;p=libfirm diff --git a/ir/be/bedomfront.c b/ir/be/bedomfront.c index c2f3703fa..d5a3abea7 100644 --- a/ir/be/bedomfront.c +++ b/ir/be/bedomfront.c @@ -1,16 +1,30 @@ +/* + * Copyright (C) 1995-2008 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 Algorithms for computing dominance frontiers. * @author Sebastian Hack, Daniel Grund - * @date: 04.05.2005 + * @date 04.05.2005 * @version $Id$ - * Copyright: (c) Universitaet Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif - -#include "bedomfront.h" #include "obst.h" #include "pmap.h" @@ -19,6 +33,9 @@ #include "array.h" #include "irgraph.h" #include "iredges_t.h" +#include "irnodeset.h" + +#include "bedomfront.h" /** * The dominance frontier for a graph. @@ -36,8 +53,7 @@ struct _be_dom_front_info_t { * @param bl The block. * @return The immediate dominator of the block. */ -static INLINE -ir_node *get_idom(ir_node *bl) +static inline ir_node *get_idom(ir_node *bl) { ir_node *idom = get_Block_idom(bl); return idom == NULL ? bl : idom; @@ -50,8 +66,7 @@ ir_node *get_idom(ir_node *bl) * * @return the list of all blocks in the dominance frontier of blk */ -static -ir_node **compute_df(ir_node *blk, be_dom_front_info_t *info) +static ir_node **compute_df(ir_node *blk, be_dom_front_info_t *info) { ir_node *c; const ir_edge_t *edge; @@ -96,7 +111,7 @@ ir_node **compute_df(ir_node *blk, be_dom_front_info_t *info) be_dom_front_info_t *be_compute_dominance_frontiers(ir_graph *irg) { - be_dom_front_info_t *info = xmalloc(sizeof(*info)); + be_dom_front_info_t *info = XMALLOC(be_dom_front_info_t); edges_assure(irg); obstack_init(&info->obst); @@ -120,36 +135,3 @@ ir_node **be_get_dominance_frontier(const be_dom_front_info_t *info, { return pmap_get(info->df_map, block); } - -/** - * Calculates the iterated dominance frontier of a set of blocks. - * Also clears the link field of the returned blocks as a side effect - */ -void be_get_iterated_dominance_frontiers(const be_dom_front_info_t *domfronts, - ir_nodeset_t *blocks) -{ - ir_node *block; - ir_nodeset_iterator_t iter; - waitq *worklist = new_waitq(); - - foreach_ir_nodeset(blocks, block, iter) { - waitq_put(worklist, block); - } - - while(!pdeq_empty(worklist)) { - int i; - ir_node *block = waitq_get(worklist); - ir_node **domfront = be_get_dominance_frontier(domfronts, block); - int domfront_len = ARR_LEN(domfront); - - for (i = 0; i < domfront_len; ++i) { - ir_node *y = domfront[i]; - if(!ir_nodeset_insert(blocks, y)) - continue; - - waitq_put(worklist, y); - } - } - - del_waitq(worklist); -}