X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbe_t.h;h=db6cced6322b88ee2351cfddc21e1da031641f1c;hb=f85d684391adac08d54c3fdcda868e6392de2ffb;hp=0c349863bc2cb89c43645d539bb81621906a97af;hpb=f6d087a414f0541ada64323431ae6444f32fddbf;p=libfirm diff --git a/ir/be/be_t.h b/ir/be/be_t.h index 0c349863b..db6cced63 100644 --- a/ir/be/be_t.h +++ b/ir/be/be_t.h @@ -53,14 +53,9 @@ enum { }; enum { - BE_VRFY_OFF, - BE_VRFY_WARN, - BE_VRFY_ASSERT -}; - -enum { - BE_SCHED_LIST, - BE_SCHED_ILP + BE_VERIFY_OFF, + BE_VERIFY_WARN, + BE_VERIFY_ASSERT }; /** Backend options */ @@ -69,11 +64,9 @@ struct be_options_t { int timing; /**< time the backend phases */ int opt_profile; /**< instrument code for profiling */ int omit_fp; /**< try to omit the frame pointer */ - int omit_leaf_fp; /**< try to omit the frame pointer in leaf routines */ int pic; /**< create position independent code */ int gprof; /**< create gprof compatible profiling code */ - int vrfy_option; /**< backend verify option */ - int scheduler; /**< the scheduler */ + int verify_option; /**< backend verify option */ char target_os[128]; /**< target operating system name */ char ilp_server[128]; /**< the ilp server name */ char ilp_solver[128]; /**< the ilp solver name */ @@ -82,30 +75,28 @@ struct be_options_t { }; struct be_main_env_t { - arch_env_t *arch_env; - be_options_t *options; /**< backend options */ - arch_code_generator_t *cg; - const char *cup_name; /**< name of the compilation unit */ - pmap *ent_trampoline_map; /**< A map containing PIC trampolines for methods. */ - ir_type *pic_trampolines_type; /**< Class type containing all trampolines */ - pmap *ent_pic_symbol_map; - ir_type *pic_symbols_type; + arch_env_t *arch_env; + be_options_t *options; /**< backend options */ + const char *cup_name; /**< name of the compilation unit */ + pmap *ent_trampoline_map; /**< A map containing PIC trampolines for methods. */ + ir_type *pic_trampolines_type; /**< Class type containing all trampolines */ + pmap *ent_pic_symbol_map; + ir_type *pic_symbols_type; }; -extern unsigned short asm_constraint_flags[256]; +extern asm_constraint_flags_t asm_constraint_flags[256]; void be_init_default_asm_constraint_flags(void); -/** - * 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. - */ -unsigned be_put_ignore_regs(const be_irg_t *birg, - const arch_register_class_t *cls, bitset_t *bs); +void be_put_allocatable_regs(const ir_graph *irg, + const arch_register_class_t *cls, bitset_t *bs); + +void be_set_allocatable_regs(const ir_graph *irg, + const arch_register_class_t *cls, + unsigned *raw_bitset); +unsigned be_get_n_allocatable_regs(const ir_graph *irg, + const arch_register_class_t *cls); /** * Initialize the backend. Must be run first in init_firm(); @@ -116,7 +107,8 @@ void firm_be_finish(void); extern int be_timing; typedef enum { - T_ABI, + T_FIRST, + T_ABI = T_FIRST, T_CODEGEN, T_RA_PREPARATION, T_SCHED, @@ -141,6 +133,7 @@ typedef enum { T_RA_OTHER, T_LAST = T_RA_OTHER } be_timer_id_t; +ENUM_COUNTABLE(be_timer_id_t) extern ir_timer_t *be_timers[T_LAST+1]; static inline void be_timer_push(be_timer_id_t id) @@ -163,6 +156,7 @@ static inline void be_timer_pop(be_timer_id_t id) tmp = ir_timer_pop(); (void) tmp; + (void) id; assert(tmp == be_timers[id] && "Attempt to pop wrong timer."); }