X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbe_t.h;h=336950198a9d28de6cb777eeb40fffda7f210384;hb=63e8a062a48c91aa36429576c648624f88dcfe35;hp=3629f8b5860d8b5a86fb258e71a6e71d1634d3d2;hpb=2cc256e5c8310acfebb981a3671c78e116a449fb;p=libfirm diff --git a/ir/be/be_t.h b/ir/be/be_t.h index 3629f8b58..336950198 100644 --- a/ir/be/be_t.h +++ b/ir/be/be_t.h @@ -1,42 +1,151 @@ +/* + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + /** - * Internal backend global data structures. - * @author Sebastian Hack - * @date 8.12.2004 + * @file + * @brief Internal backend global data structures. + * @author Sebastian Hack */ +#ifndef FIRM_BE_BE_T_H +#define FIRM_BE_BE_T_H -#ifndef _BE_T_H -#define _BE_T_H +#include "be.h" +#include "be_types.h" +#include "bitset.h" +#include "firm_types.h" +#include "pmap.h" +#include "timing.h" -#include "obst.h" +enum { + DUMP_NONE = 0, + DUMP_INITIAL = 1 << 0, + DUMP_ABI = 1 << 1, + DUMP_SCHED = 1 << 2, + DUMP_PREPARED = 1 << 3, + DUMP_RA = 1 << 4, + DUMP_FINAL = 1 << 5, + DUMP_BE = 1 << 6 +}; +enum { + BE_TIME_OFF, + BE_TIME_ON +}; -#include -#include +enum { + BE_VERIFY_OFF, + BE_VERIFY_WARN, + BE_VERIFY_ASSERT +}; -#include "benode_t.h" +/** Backend options */ +struct be_options_t { + unsigned dump_flags; /**< backend dumping flags */ + int timing; /**< time the backend phases */ + int opt_profile_generate; /**< instrument code for profiling */ + int opt_profile_use; /**< use existing profile data */ + int omit_fp; /**< try to omit the frame pointer */ + int pic; /**< create position independent code */ + int verify_option; /**< backend verify option */ + char ilp_server[128]; /**< the ilp server name */ + char ilp_solver[128]; /**< the ilp solver name */ + int statev; /**< enable stat event dumping */ + char filtev[128]; /**< filter mask for stat events */ + int verbose_asm; /**< dump verbose assembler */ +}; +extern be_options_t be_options; -#if 0 -typedef struct _phase_t { - const char *name; - int id; -} phase_t; +struct be_main_env_t { + arch_env_t *arch_env; + FILE *file_handle; + 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; +}; -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 +extern asm_constraint_flags_t asm_constraint_flags[256]; + +void be_init_default_asm_constraint_flags(void); + +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(); + */ +void firm_be_init(void); +void firm_be_finish(void); + +extern int be_timing; + +typedef enum { + T_FIRST, + T_ABI = T_FIRST, + T_CODEGEN, + T_RA_PREPARATION, + T_SCHED, + T_CONSTR, + T_FINISH, + T_EMIT, + T_VERIFY, + T_OTHER, + T_HEIGHTS, + T_LIVE, + T_EXECFREQ, + T_SSA_CONSTR, + T_RA_EPILOG, + T_RA_CONSTR, + T_RA_SPILL, + T_RA_SPILL_APPLY, + T_RA_COLOR, + T_RA_IFG, + T_RA_COPYMIN, + T_RA_SSA, + 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) +{ + assert(id <= T_LAST); + if (!be_timing) + return; + ir_timer_push(be_timers[id]); +} -typedef struct _be_main_env_t { - struct obstack obst; - be_node_factory_t *node_factory; - 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; - dom_front_info_t *dom_front; -} be_main_session_env_t; +static inline void be_timer_pop(be_timer_id_t id) +{ + assert(id <= T_LAST); + if (!be_timing) + return; + ir_timer_pop(be_timers[id]); +} #endif