X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbe_t.h;h=930239e61167ec9fe3c9b6b5f65dc7ad3201a154;hb=b9d45e08e23bcf058fa8f2d9e18dd78e8cccd044;hp=b5d402ed1d26b7708f4b1c85ae656a16a5f79327;hpb=dc3225d50c7056cfacfb244a16264892b75bc983;p=libfirm diff --git a/ir/be/be_t.h b/ir/be/be_t.h index b5d402ed1..930239e61 100644 --- a/ir/be/be_t.h +++ b/ir/be/be_t.h @@ -7,30 +7,87 @@ #ifndef _BE_T_H #define _BE_T_H +#include "firm_types.h" #include "obst.h" +#include "debug.h" +#include "bitset.h" -#if 0 -typedef struct _phase_t { - const char *name; - int id; -} phase_t; - -int phase_register(phase_t *phase); -void phase_applied(const ir_graph *irg, const phase_t *phase); -int phase_depends_on(const ir_graph *irg, const phase_t *phase, int n, ...); -int phase_invalidates(const ir_graph *irg, const phase_t *phase, int n, ...); -#endif - -typedef struct _be_main_env_t { - struct obstack obst; - struct _be_node_factory_t *node_factory; - struct _arch_env_t *arch_env; -} be_main_env_t; - -typedef struct _be_main_session_env_t { - const be_main_env_t *main_env; - ir_graph *irg; - struct _dom_front_info_t *dom_front; -} be_main_session_env_t; - -#endif +#include "be.h" +#include "bearch.h" +#include "beirgmod.h" +#include "be_dbgout.h" + +#define DUMP_NONE 0 +#define DUMP_INITIAL (1 << 0) +#define DUMP_ABI (1 << 1) +#define DUMP_SCHED (1 << 2) +#define DUMP_PREPARED (1 << 3) +#define DUMP_RA (1 << 4) +#define DUMP_FINAL (1 << 5) +#define DUMP_BE (1 << 6) + +enum { + BE_TIME_OFF, + BE_TIME_ON +}; + +enum { + BE_VRFY_OFF, + BE_VRFY_WARN, + BE_VRFY_ASSERT +}; + +enum { + BE_SCHED_SELECT_TRIVIAL = 0, + BE_SCHED_SELECT_REGPRESS = 1, + BE_SCHED_SELECT_MUCHNIK = 2, + BE_SCHED_SELECT_HEUR = 3, + BE_SCHED_SELECT_HMUCHNIK = 4, + BE_SCHED_SELECT_RANDOM = 5 +}; + +/** Backend options */ +struct _be_options_t { + int dump_flags; /**< backend dumping flags */ + int timing; /**< time the backend phases */ + int sched_select; /**< the current scheduler */ + int opt_profile; /**< instrument code for profiling */ + int mris; /**< enable mris preparation */ + int omit_fp; /**< try to omit the frame pointer */ + int stabs_debug_support; /**< enable stabs debugging support */ + int vrfy_option; /**< backend verify option */ + char ilp_server[128]; /**< the ilp server name */ + char ilp_solver[128]; /**< the ilp solver name */ +}; + +struct _be_main_env_t { + struct obstack obst; + struct _be_node_factory_t *node_factory; + struct _arch_env_t *arch_env; + struct _be_options_t *options; + struct _arch_code_generator_t *cg; + struct _arch_irn_handler_t *phi_handler; + dbg_handle *db_handle; + DEBUG_ONLY(firm_dbg_module_t *dbg;) +}; + +struct _be_irg_t { + ir_graph *irg; + struct _be_main_env_t *main_env; + struct _be_abi_irg_t *abi; + struct _arch_code_generator_t *cg; + exec_freq_t *execfreqs; +}; + +/** +* Put the registers to be ignored in this IRG into a bitset. +* @param birg The backend IRG data structure. +* @param cls The register class. +* @param bs The bitset (may be NULL). +* @return The number of registers to be ignored. +*/ +int be_put_ignore_regs(const struct _be_irg_t *birg, const struct _arch_register_class_t *cls, bitset_t *bs); + + + +#endif /* _BE_T_H */