- icc 11 defines __ptr32
[cparser] / driver / firm_opt.c
index a7575ff..c37c87a 100644 (file)
@@ -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 <config.h>
+
 #include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 #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(&params);
+  ir_init(&params);
 
   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);
 }