X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbe_t.h;h=7c6283e449698c87f6571a16dcef2ea97d87d829;hb=b460e057a0751e29f22c5e4407d9a48299b8096c;hp=af6a0b5ac624d535b53da53018f3e09af8eb3a2a;hpb=38efd2ac16aa827ae9f07acc9ebfc7d74422290e;p=libfirm diff --git a/ir/be/be_t.h b/ir/be/be_t.h index af6a0b5ac..7c6283e44 100644 --- a/ir/be/be_t.h +++ b/ir/be/be_t.h @@ -34,8 +34,7 @@ #include "pmap.h" #include "be.h" -#include "bearch_t.h" -#include "beirg.h" +#include "be_types.h" #define DUMP_NONE 0 #define DUMP_INITIAL (1 << 0) @@ -68,6 +67,7 @@ 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 */ @@ -79,14 +79,8 @@ struct be_options_t { char filtev[128]; /**< filter mask for stat events (regex is supported) */ }; -typedef struct { - arch_irn_ops_t irn_ops; - const arch_env_t *arch_env; - pmap *phi_attrs; -} phi_handler_t; - struct be_main_env_t { - arch_env_t arch_env; + 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 */ @@ -94,19 +88,29 @@ struct be_main_env_t { ir_type *pic_trampolines_type; /**< Class type containing all trampolines */ pmap *ent_pic_symbol_map; ir_type *pic_symbols_type; - phi_handler_t phi_handler; }; +extern unsigned short 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. -*/ + * 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); + +/** + * Initialize the backend. Must be run first in init_firm(); + */ +void firm_be_init(void); +void firm_be_finish(void); + extern int be_timing; #define BE_TIMER_PUSH(timer) \ @@ -146,4 +150,5 @@ extern ir_timer_t *t_ra_copymin; /**< timer for copy minimization */ extern ir_timer_t *t_ra_ssa; /**< timer for ssa destruction */ extern ir_timer_t *t_ra_other; /**< timer for remaining stuff */ + #endif /* FIRM_BE_BE_T_H */