X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeutil.h;h=fdddf335b63ea3d9a8f6ec400e439e99e636afa4;hb=b77d68268801b173deaf58d6a85c0c25e0a9e1da;hp=921f592c83e796764750e7fe93a40d1b02534e69;hpb=bb9f2e36362333c6635b89f5258171b06c786608;p=libfirm diff --git a/ir/be/beutil.h b/ir/be/beutil.h index 921f592c8..fdddf335b 100644 --- a/ir/be/beutil.h +++ b/ir/be/beutil.h @@ -21,7 +21,6 @@ * @file * @brief Contains some useful function for the backend. * @author Sebastian Hack - * @version $Id$ */ #ifndef FIRM_BE_BEUTIL_H #define FIRM_BE_BEUTIL_H @@ -31,35 +30,7 @@ #include "firm_types.h" #include "pset.h" -#include "bearch_t.h" - -#ifdef _MSC_VER -typedef __int64 long64; -typedef unsigned __int64 ulong64; - -#define LL_FMT "i64" -#define ULL_FMT "ui64" - -#else -typedef long long long64; -typedef unsigned long long ulong64; - -#define LL_FMT "ll" -#define ULL_FMT "llu" - -#endif /* _MSC_VER */ - -/* 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. - * This function always returns the same set. - */ -pset *be_empty_set(void); - -/** Undefine this to disable debugging mode. */ -#define BE_DEBUG 1 +#include "bearch.h" /** * Convenient block getter. @@ -78,38 +49,6 @@ static inline const ir_node *get_block_const(const ir_node *irn) return is_Block(irn) ? irn : get_nodes_block(irn); } -static inline int is_firm_be_mode(const ir_mode *mode) -{ - return mode_is_data(mode); -} - -/** - * Check, if a node produces or consumes a data value. - * If it does, it is significant for scheduling and register allocation. - * A node produces/consumes a data value, if one of its operands is of - * mode datab, or his retuning mode is of mode datab. - * @param irn The node to check for. - * @return 1, if the node is a data node, 0 if not. - */ -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))) - 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))) - return 1; - } - - /* Else the node does not produce/consume a data value */ - return 0; -} - /** * Clears the link fields of all nodes of the given graph. * @param irg The graph. @@ -117,42 +56,21 @@ static inline int is_data_node(const ir_node *irn) void be_clear_links(ir_graph *irg); /** - * Dump a graph with schedule edges. - * @param irg The graph. - * @param suffix A suffix to its file name. - */ -void dump_ir_block_graph_sched(ir_graph *irg, const char *suffix); - -/** - * Dump a extended block graph with schedule edges. - * @param irg The graph. - * @param suffix A suffix to its file name. - */ -void dump_ir_extblock_graph_sched(ir_graph *irg, const char *suffix); - -/** - * Dumps a graph and numbers all dumps. - * @param irg The graph - * @param suffix A suffix to its file name. - * @param dumper The dump function - */ -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. + * Gets the Proj with number pn from irn. */ -unsigned get_num_reachable_nodes(ir_graph *irg); +ir_node *be_get_Proj_for_pn(const ir_node *irn, long pn); /** - * Gets the Proj with number pn from irn. + * Returns an array (an ARR_F) of the programs blocks in reverse postorder + * (note: caller has to free the memory with DEL_ARR_F after use; + * of course you can use ARR_LEN on the array too.) */ -ir_node *be_get_Proj_for_pn(const ir_node *irn, long pn); +ir_node **be_get_cfgpostorder(ir_graph *irg); /** - * Opens a file named base.ext with the mode mode. + * convenience function to return the first successor block + * (it is often known that there is exactly 1 successor anyway) */ -FILE *be_ffopen(const char *base, const char *ext, const char *mode); +ir_node *get_first_block_succ(const ir_node *block); -#endif /* FIRM_BE_BEUTIL_H */ +#endif