X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeutil.h;h=d25f2e4f9c797e8cae244e1a4a7faf7a30e6ab87;hb=39d4311ea8a4f1bd78d1e0282d77d71f7ef4efdb;hp=d1b1eb03a3e3edc65a53483495f5a6922ed1e1a4;hpb=f436f72951577e35b60e0ea1f2e6a536e4f479bb;p=libfirm diff --git a/ir/be/beutil.h b/ir/be/beutil.h index d1b1eb03a..d25f2e4f9 100644 --- a/ir/be/beutil.h +++ b/ir/be/beutil.h @@ -1,14 +1,42 @@ +/* + * 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. + */ -#ifndef _BEUTIL_H -#define _BEUTIL_H +/** + * @file + * @brief Contains some useful function for the backend. + * @author Sebastian Hack + * @version $Id$ + */ +#ifndef FIRM_BE_BEUTIL_H +#define FIRM_BE_BEUTIL_H #include "firm_config.h" #include +#include "firm_types.h" #include "pset.h" -#include "irnode.h" -#include "bearch.h" + +#include "bearch_t.h" + +/* iterate over a list of ir_nodes linked by link field */ +#define foreach_linked_irns(head, iter) for ((iter) = (head); (iter); (iter) = get_irn_link((iter))) /** * Get an empty set. @@ -16,7 +44,6 @@ */ pset *be_empty_set(void); - /** Undefine this to disable debugging mode. */ #define BE_DEBUG 1 @@ -50,13 +77,13 @@ static INLINE int is_data_node(const ir_node *irn) int i, n; /* If the node produces a data value, return immediately. */ - if(is_firm_be_mode(get_irn_mode(irn))) + if (is_firm_be_mode(get_irn_mode(irn))) return 1; /* else check, if it takes a data value, if that is so, return */ for(i = 0, n = get_irn_arity(irn); i < n; ++i) { ir_node *op = get_irn_n(irn, i); - if(is_firm_be_mode(get_irn_mode(op))) + if (is_firm_be_mode(get_irn_mode(op))) return 1; } @@ -64,14 +91,6 @@ static INLINE int is_data_node(const ir_node *irn) return 0; } -/** - * Make each constant local to its use. - * This duplicates all constants in order to simulate a realistic - * register pressure. - * @param irg The graph. - */ -void localize_consts(ir_graph *irg); - /** * Dump a vcg graph containing the controlflow graph, the schedule and * allocated registers. @@ -82,18 +101,6 @@ void dump_allocated_irg(arch_env_t *env, ir_graph *irg, char *suffix); void be_clear_links(ir_graph *irg); -static INLINE FILE *ffopen(const char *base, const char *ext, const char *mode) { - FILE *out; - char buf[1024]; - - snprintf(buf, sizeof(buf), "%s.%s", base, ext); - if (! (out = fopen(buf, mode))) { - fprintf(stderr, "Cannot open file %s in mode %s\n", buf, mode); - return NULL; - } - return out; -} - /** * Dump a graph with schedule edges. * @param irg The graph. @@ -116,6 +123,19 @@ void dump_ir_extblock_graph_sched(ir_graph *irg, const char *suffix); */ void be_dump(ir_graph *irg, const char *suffix, void (*dumper)(ir_graph *, const char *)); +/** + * Returns the number of reachable nodes in an irg. + * @param irg The irg. + * @return The number of reachable nodes. + */ +unsigned get_num_reachable_nodes(ir_graph *irg); + +/** + * Sets all node inputs to BAD node. + * @param irn The node to be killed. + */ +void be_kill_node(ir_node *irn); + /** * Search for an irn in @p accept. * The search is started at @p start_point_exclusive and continues upwards the dom-tree @@ -123,4 +143,14 @@ void be_dump(ir_graph *irg, const char *suffix, void (*dumper)(ir_graph *, const */ ir_node *dom_up_search(pset *accept, ir_node *start_point_exclusive); -#endif /* _BEUTIL_H */ +/** + * Gets the Proj with number pn from irn. + */ +ir_node *be_get_Proj_for_pn(const ir_node *irn, long pn); + +/** + * Opens a file named base.ext with the mode mode. + */ +FILE *be_ffopen(const char *base, const char *ext, const char *mode); + +#endif /* FIRM_BE_BEUTIL_H */