{
struct obstack *obst = be_get_be_obst(irg);
amd64_irg_data_t *irg_data = OALLOCZ(obst, amd64_irg_data_t);
- irg_data->dump = (be_get_irg_options(irg)->dump_flags & DUMP_BE) ? 1 : 0;
+ irg_data->dump = (be_options.dump_flags & DUMP_BE) ? 1 : 0;
be_birg_from_irg(irg)->isa_link = irg_data;
}
int statev; /**< enable stat event dumping */
char filtev[128]; /**< filter mask for stat events */
};
+extern be_options_t be_options;
struct be_main_env_t {
arch_env_t *arch_env;
FILE *file_handle;
- 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 */
{
be_abi_irg_t *env = XMALLOCZ(be_abi_irg_t);
ir_node *old_frame = get_irg_frame(irg);
- be_options_t *options = be_get_irg_options(irg);
const arch_env_t *arch_env = be_get_irg_arch_env(irg);
ir_entity *entity = get_irg_entity(irg);
ir_type *method_type = get_entity_type(entity);
*/
be_set_irg_abi(irg, env);
- be_omit_fp = options->omit_fp;
+ be_omit_fp = be_options.omit_fp;
env->keep_map = pmap_create();
env->call = be_abi_call_new(arch_env->sp->reg_class);
edges_assure(irg);
- if (options->pic) {
+ if (be_options.pic) {
irg_walk_graph(irg, fix_pic_symconsts, NULL, env);
}
static void coalesce_blocks_ilp(blocksched_ilp_env_t *env)
{
int edge_count = ARR_LEN(env->ilpedges);
- be_options_t *options = be_get_irg_options(env->env.irg);
int i;
/* complete out constraints */
lpp_set_factor_fast(env->lpp, entry->out_cst, edge->ilpvar, 1.0);
}
- lpp_solve_net(env->lpp, options->ilp_server, options->ilp_solver);
+ lpp_solve_net(env->lpp, be_options.ilp_server, be_options.ilp_solver);
assert(lpp_is_sol_valid(env->lpp));
/* Apply results to edges */
lpp_sol_state_t ilp_go(ilp_env_t *ienv)
{
- ir_graph *irg = ienv->co->irg;
- be_options_t *options = be_get_irg_options(irg);
+ ir_graph *irg = ienv->co->irg;
sr_remove(ienv->sr);
if (solve_log)
lpp_set_log(ienv->lp, stdout);
- lpp_solve(ienv->lp, options->ilp_server, options->ilp_solver);
+ lpp_solve(ienv->lp, be_options.ilp_server, be_options.ilp_solver);
//be_stat_ev_dbl("co_ilp_objval", ienv->lp->objval);
//be_stat_ev_dbl("co_ilp_best_bound", ienv->lp->best_bound);
be_birg_from_irg(irg)->abi = abi;
}
-static inline be_options_t *be_get_irg_options(const ir_graph *irg)
-{
- return be_birg_from_irg(irg)->main_env->options;
-}
-
/** deprecated */
static inline ir_graph *be_get_birg_irg(const be_irg_t *birg)
{
#define NEW_ID(s) new_id_from_chars(s, sizeof(s) - 1)
/* options visible for anyone */
-static be_options_t be_options = {
+be_options_t be_options = {
DUMP_NONE, /* dump flags */
BE_TIME_OFF, /* no timing */
false, /* profile_generate */
const char *compilation_unit_name)
{
memset(env, 0, sizeof(*env));
- env->options = &be_options;
env->file_handle = file_handle;
env->ent_trampoline_map = pmap_create();
env->pic_trampolines_type = new_type_class(NEW_ID("$PIC_TRAMPOLINE_TYPE"));
/* solve lpp */
{
- ir_graph *irg = get_irn_irg(node);
- be_options_t *options = be_get_irg_options(irg);
- unsigned *assignment;
- lpp_solve(lpp, options->ilp_server, options->ilp_solver);
+ unsigned *assignment;
+ lpp_solve(lpp, be_options.ilp_server, be_options.ilp_solver);
if (!lpp_is_sol_valid(lpp))
panic("ilp solution not valid!");
static void dump(int mask, ir_graph *irg, const char *suffix)
{
- if (be_get_irg_options(irg)->dump_flags & mask)
+ if (be_options.dump_flags & mask)
dump_ir_graph(irg, suffix);
}
/* verify schedule and register pressure */
be_timer_push(T_VERIFY);
- if (be_get_irg_options(irg)->verify_option == BE_VERIFY_WARN) {
+ if (be_options.verify_option == BE_VERIFY_WARN) {
be_verify_schedule(irg);
be_verify_register_pressure(irg, cls);
- } else if (be_get_irg_options(irg)->verify_option == BE_VERIFY_ASSERT) {
+ } else if (be_options.verify_option == BE_VERIFY_ASSERT) {
assert(be_verify_schedule(irg) && "Schedule verification failed");
assert(be_verify_register_pressure(irg, cls)
&& "Register pressure verification failed");
be_timer_pop(T_RA_SPILL_APPLY);
be_timer_push(T_VERIFY);
- if (be_get_irg_options(irg)->verify_option == BE_VERIFY_WARN) {
+ if (be_options.verify_option == BE_VERIFY_WARN) {
be_verify_register_allocation(irg);
- } else if (be_get_irg_options(irg)->verify_option == BE_VERIFY_ASSERT) {
+ } else if (be_options.verify_option == BE_VERIFY_ASSERT) {
assert(be_verify_register_allocation(irg)
&& "Register allocation invalid");
}
struct obstack *obst = be_get_be_obst(irg);
ia32_irg_data_t *irg_data = OALLOCZ(obst, ia32_irg_data_t);
- irg_data->dump = (be_get_irg_options(irg)->dump_flags & DUMP_BE) ? 1 : 0;
+ irg_data->dump = (be_options.dump_flags & DUMP_BE) ? 1 : 0;
if (gprof) {
/* Linux gprof implementation needs base pointer */
- be_get_irg_options(irg)->omit_fp = 0;
+ be_options.omit_fp = 0;
}
be_birg_from_irg(irg)->isa_link = irg_data;
parameter_dbg_info_t *infos;
int i, n;
- isa = (ia32_isa_t*) arch_env;
- do_pic = be_get_irg_options(irg)->pic;
+ isa = (ia32_isa_t*) arch_env;
+ do_pic = be_options.pic;
be_gas_elf_type_char = '@';
{
ir_graph *irg = current_ir_graph;
- if (be_get_irg_options(irg)->pic) {
+ if (be_options.pic) {
const arch_env_t *arch_env = be_get_irg_arch_env(irg);
return arch_env->impl->get_pic_base(irg);
}
/* special case for PIC trampoline calls */
old_no_pic_adjust = ia32_no_pic_adjust;
- ia32_no_pic_adjust = be_get_irg_options(current_ir_graph)->pic;
+ ia32_no_pic_adjust = be_options.pic;
match_arguments(&am, src_block, NULL, src_ptr, src_mem,
match_am | match_immediate);
unsigned *caller_saves;
if (irg != NULL) {
- const be_options_t *options = be_get_irg_options(irg);
- omit_fp = options->omit_fp;
+ omit_fp = be_options.omit_fp;
/* our current vaarg handling needs the standard space to store the
* args 0-5 in it */
if (get_method_variadicity(function_type) == variadicity_variadic)