X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeutil.h;h=72a81fa054fb06bf4ad9037c85594d0a5498d52d;hb=fe36fbcb66909a979e16111b8dc8cee19088fede;hp=d25f2e4f9c797e8cae244e1a4a7faf7a30e6ab87;hpb=d1de7107f847963fbce099597e6c42c2371b053c;p=libfirm diff --git a/ir/be/beutil.h b/ir/be/beutil.h index d25f2e4f9..72a81fa05 100644 --- a/ir/be/beutil.h +++ b/ir/be/beutil.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -26,14 +26,28 @@ #ifndef FIRM_BE_BEUTIL_H #define FIRM_BE_BEUTIL_H -#include "firm_config.h" - #include #include "firm_types.h" #include "pset.h" -#include "bearch_t.h" +#include "bearch.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))) @@ -44,9 +58,6 @@ */ pset *be_empty_set(void); -/** Undefine this to disable debugging mode. */ -#define BE_DEBUG 1 - /** * Convenient block getter. * Works also, if the given node is a block. @@ -54,14 +65,14 @@ pset *be_empty_set(void); * @return The block of the node, or the node itself, if the node is a * block. */ -static INLINE const ir_node *get_block(const ir_node *irn) +static inline ir_node *get_block(ir_node *irn) { return is_Block(irn) ? irn : get_nodes_block(irn); } -static INLINE int is_firm_be_mode(const ir_mode *mode) +static inline const ir_node *get_block_const(const ir_node *irn) { - return mode_is_data(mode); + return is_Block(irn) ? irn : get_nodes_block(irn); } /** @@ -72,18 +83,18 @@ static INLINE int is_firm_be_mode(const ir_mode *mode) * @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) +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 (mode_is_data(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 (mode_is_data(get_irn_mode(op))) return 1; } @@ -92,13 +103,9 @@ static INLINE int is_data_node(const ir_node *irn) } /** - * Dump a vcg graph containing the controlflow graph, the schedule and - * allocated registers. - * @param irg The irg. Note that scheduling, register allocation must - * have been performed. + * Clears the link fields of all nodes of the given graph. + * @param irg The graph. */ -void dump_allocated_irg(arch_env_t *env, ir_graph *irg, char *suffix); - void be_clear_links(ir_graph *irg); /** @@ -131,22 +138,16 @@ void be_dump(ir_graph *irg, const char *suffix, void (*dumper)(ir_graph *, const 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 - * @return The first node out of accept if found. Else NULL is returned. + * Gets the Proj with number pn from irn. */ -ir_node *dom_up_search(pset *accept, ir_node *start_point_exclusive); +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.