X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=driver%2Ffirm_opt.c;h=c37c87add667cfbc80bc5a1ccbb6259d3610b7e2;hb=22d24ddd2209686fa723a62ccc19b7c2eea2d172;hp=a7575ffdb5387378e0b4090cbbb570d8571ac6f5;hpb=ceb6d78c4b3aca2bd09e108cbfce3589b3640c0d;p=cparser diff --git a/driver/firm_opt.c b/driver/firm_opt.c index a7575ff..c37c87a 100644 --- a/driver/firm_opt.c +++ b/driver/firm_opt.c @@ -2,10 +2,13 @@ * * @file firm_opt.c -- Firm-generating back end optimizations. * - * (C) 2005-2007 Michael Beck beck@ipd.info.uni-karlsruhe.de + * (C) 2005-2009 Michael Beck beck@ipd.info.uni-karlsruhe.de * * $Id$ */ + +#include + #include #include #include @@ -21,14 +24,10 @@ #include "firm_timing.h" #include "ast2firm.h" -#ifdef _WIN32 -#define snprintf _snprintf -#endif - #if defined(_DEBUG) || defined(FIRM_DEBUG) #define DBG(x) dbg_printf x #else -#define DBG(x) +#define DBG(x) ((void)0) #endif /* _DEBUG || FIRM_DEBUG */ @@ -113,8 +112,6 @@ static create_intrinsic_fkt *arch_create_intrinsic = NULL; static void *create_intrinsic_ctx = NULL; static const ir_settings_if_conv_t *if_conv_info = NULL; -ir_mode *firm_imm_fp_mode = NULL; - /* entities of runtime functions */ ir_entity_ptr rts_entities[rts_max]; @@ -215,11 +212,15 @@ static void rts_map(void) { { &rts_entities[rts_tanhl], i_mapper_tanh }, /* string */ - { &rts_entities[rts_memcpy], i_mapper_memcpy }, - { &rts_entities[rts_memset], i_mapper_memset }, { &rts_entities[rts_strcmp], i_mapper_strcmp }, { &rts_entities[rts_strncmp], i_mapper_strncmp }, - { &rts_entities[rts_strlen], i_mapper_strlen } + { &rts_entities[rts_strcpy], i_mapper_strcpy }, + { &rts_entities[rts_strlen], i_mapper_strlen }, + { &rts_entities[rts_memcpy], i_mapper_memcpy }, + { &rts_entities[rts_mempcpy], i_mapper_mempcpy }, + { &rts_entities[rts_memmove], i_mapper_memmove }, + { &rts_entities[rts_memset], i_mapper_memset }, + { &rts_entities[rts_memcmp], i_mapper_memcmp } }; i_record rec[sizeof(mapper)/sizeof(mapper[0])]; unsigned i, n_map; @@ -492,7 +493,7 @@ static void do_firm_optimizations(const char *input_filename) set_irp_memory_disambiguator_options(aa_opt); /* parameter passing code should set them directly sometime... */ - set_opt_enabled("rts", firm_opt.freestanding); + set_opt_enabled("rts", !firm_opt.freestanding); set_opt_enabled("gc_irgs", firm_opt.remove_unused); set_opt_enabled("tailrec", firm_opt.tail_rec); set_opt_enabled("funccalls", firm_opt.func_calls); @@ -642,6 +643,10 @@ static int compute_type_size(ir_type *ty) ir_type *ent_ty = get_entity_type(ent); unsigned align, misalign; + /* inner functions do not expand the frame */ + if (is_Method_type(ent_ty) && is_frame_type(ty)) + continue; + /* compute member types */ if (! compute_type_size(ent_ty)) return 0; @@ -909,7 +914,7 @@ void gen_firm_init(void) params.cc_mask = 0; /* no regparam, cdecl */ params.builtin_dbg = NULL; - init_firm(¶ms); + ir_init(¶ms); if (firm_be_opt.selection == BE_FIRM_BE) { const backend_params *be_params = be_get_backend_param(); @@ -921,9 +926,6 @@ void gen_firm_init(void) ad_param = be_params->dep_param; if_conv_info = be_params->if_conv_info; - - if (be_params->has_imm_fp_mode) - firm_imm_fp_mode = be_params->imm_fp_mode; } dbg_init(NULL, NULL, dbg_snprint); @@ -1080,5 +1082,4 @@ void firm_early_init(void) { /* arg: need this here for command line options */ be_opt_register(); - firm_init_options(NULL, 0, NULL); }