#include "integrate.h"
#include "debug.h"
#include "target.h"
+#include "langhooks.h"
#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
#include "dwarf2out.h"
#include "xcoffout.h" /* Needed for external data
declarations for e.g. AIX 4.x. */
#endif
+
+#ifdef HALF_PIC_DEBUG
+#include "halfpic.h"
+#endif
\f
#ifdef VMS
/* The extra parameters substantially improve the I/O performance. */
int align_loops;
int align_loops_log;
+int align_loops_max_skip;
int align_jumps;
int align_jumps_log;
+int align_jumps_max_skip;
int align_labels;
int align_labels_log;
+int align_labels_max_skip;
int align_functions;
int align_functions_log;
{"rename-registers", &flag_rename_registers, 1,
N_("Do the register renaming optimization pass") },
{"common", &flag_no_common, 0,
- N_("Do not put unitialised globals in the common section") },
+ N_("Do not put uninitialized globals in the common section") },
{"inhibit-size-directive", &flag_inhibit_size_directive, 1,
N_("Do not generate .size directives") },
{"function-sections", &flag_function_sections, 1,
{"ssa", &flag_ssa, 1,
N_("Enable SSA optimizations") },
{"ssa-ccp", &flag_ssa_ccp, 1,
- N_("Enable SSA conditonal constant propagation") },
+ N_("Enable SSA conditional constant propagation") },
{"ssa-dce", &flag_ssa_dce, 1,
N_("Enable aggressive SSA dead code elimination") },
{"leading-underscore", &flag_leading_underscore, 1,
{"unreachable-code", &warn_notreached, 1,
N_("Warn about code that will never be executed") },
{"uninitialized", &warn_uninitialized, 1,
- N_("Warn about unitialized automatic variables") },
+ N_("Warn about uninitialized automatic variables") },
{"inline", &warn_inline, 1,
N_("Warn when an inlined function cannot be inlined") },
{"packed", &warn_packed, 1,
pointer FN, and one argument DATA. DATA is usually a struct which
contains the real input and output for function FN. This function
returns 0 (failure) if longjmp was called (i.e. an exception
- occured.) It returns 1 (success) otherwise. */
+ occurred.) It returns 1 (success) otherwise. */
int
do_float_handler (fn, data)
/* In case there were missing block closers,
get us back to the global binding level. */
- while (! global_bindings_p ())
- poplevel (0, 0, 0);
+ (*lang_hooks.clear_binding_stack) ();
/* Compilation is now finished except for writing
what's left of the symbol table output. */
{
ggc_print_statistics ();
stringpool_statistics ();
+ dump_tree_statistics ();
}
/* Free up memory for the benefit of leak detectors. */
cleanup_cfg (CLEANUP_PRE_SIBCALL | CLEANUP_PRE_LOOP);
optimize = saved_optimize;
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
}
find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0) | CLEANUP_PRE_LOOP);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
copy_loop_headers (insns);
purge_line_number_notes (insns);
timevar_pop (TV_FROM_SSA);
ggc_collect ();
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
}
if_convert (0);
timevar_pop (TV_IFCVT);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
/* Try to identify useless null pointer tests and delete them. */
if (flag_delete_null_pointer_checks)
find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP);
timevar_pop (TV_JUMP);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
}
cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP);
delete_null_pointer_checks (insns);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
timevar_pop (TV_JUMP);
}
save_cfj = flag_cse_follow_jumps;
flag_cse_skip_blocks = flag_cse_follow_jumps = 0;
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
/* If -fexpensive-optimizations, re-run CSE to clean up things done
by gcse. */
delete_trivially_dead_insns (insns, max_reg_num (), 0);
find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
timevar_pop (TV_JUMP);
timevar_pop (TV_JUMP);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
reg_scan (insns, max_reg_num (), 0);
tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file);
rebuild_jump_labels (insns);
find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
cleanup_cfg (CLEANUP_EXPENSIVE);
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
timevar_pop (TV_JUMP);
}
/* Always purge dead edges, as we may eliminate an insn throwing
exception. */
- rebuild_jump_labels_after_combine |= purge_all_dead_edges ();
+ rebuild_jump_labels_after_combine |= purge_all_dead_edges (true);
/* Combining insns may have turned an indirect jump into a
direct jump. Rebuid the JUMP_LABEL fields of jumping
rebuild_jump_labels (insns);
timevar_pop (TV_JUMP);
- timevar_push (TV_FLOW);
- cleanup_cfg (CLEANUP_EXPENSIVE);
-
- /* Blimey. We've got to have the CFG up to date for the call to
- if_convert below. However, the random deletion of blocks
- without updating life info can wind up with Wierd Stuff in
- global_live_at_end. We then run sched1, which updates things
- properly, discovers the wierdness and aborts. */
- allocate_bb_life_data ();
- update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES,
- PROP_DEATH_NOTES | PROP_KILL_DEAD_CODE
- | PROP_SCAN_DEAD_CODE);
-
- timevar_pop (TV_FLOW);
+ cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_UPDATE_LIFE);
}
close_dump_file (DFI_combine, print_rtl_with_bb, insns);
}
compute_alignments ();
- /* CFG is no longer maitained up-to-date. */
+ /* CFG is no longer maintained up-to-date. */
free_bb_for_insn ();
/* If a machine dependent reorganization is needed, call it. */
}
}
\f
-/* Parse a -d... comand line switch. */
+/* Parse a -d... command line switch. */
static void
decode_d_option (arg)
rtl_dump_and_exit = 1;
break;
case 'y':
- set_yydebug (1);
+ (*lang_hooks.set_yydebug) (1);
break;
case 'D': /* These are handled by the preprocessor. */
case 'I':
}
}
-/* Parse a -f... comand line switch. ARG is the value after the -f.
+/* Parse a -f... command line switch. ARG is the value after the -f.
It is safe to access 'ARG - 2' to generate the full switch name.
Return the number of strings consumed. */
return 1;
}
-/* Parse a -W... comand line switch. ARG is the value after the -W.
+/* Parse a -W... command line switch. ARG is the value after the -W.
It is safe to access 'ARG - 2' to generate the full switch name.
Return the number of strings consumed. */
return 1;
}
-/* Parse a -g... comand line switch. ARG is the value after the -g.
+/* Parse a -g... command line switch. ARG is the value after the -g.
It is safe to access 'ARG - 2' to generate the full switch name.
Return the number of strings consumed. */
flag_short_enums = DEFAULT_SHORT_ENUMS;
#endif
+ tree_code_length[(int) IDENTIFIER_NODE]
+ = ((lang_hooks.identifier_size - sizeof (struct tree_common))
+ / sizeof (tree));
+
/* Initialize the garbage-collector. */
init_ggc ();
init_stringpool ();
/* Register the language-independent parameters. */
add_params (lang_independent_params, LAST_PARAM);
- /* Perform language-specific options intialization. */
+ /* Perform language-specific options initialization. */
(*lang_hooks.init_options) ();
/* Scan to see what optimization level has been specified. That will
/* Set up the align_*_log variables, defaulting them to 1 if they
were still unset. */
if (align_loops <= 0) align_loops = 1;
+ if (align_loops_max_skip > align_loops || !align_loops)
+ align_loops_max_skip = align_loops - 1;
align_loops_log = floor_log2 (align_loops * 2 - 1);
if (align_jumps <= 0) align_jumps = 1;
+ if (align_jumps_max_skip > align_jumps || !align_jumps)
+ align_jumps_max_skip = align_jumps - 1;
align_jumps_log = floor_log2 (align_jumps * 2 - 1);
if (align_labels <= 0) align_labels = 1;
align_labels_log = floor_log2 (align_labels * 2 - 1);
+ if (align_labels_max_skip > align_labels || !align_labels)
+ align_labels_max_skip = align_labels - 1;
if (align_functions <= 0) align_functions = 1;
align_functions_log = floor_log2 (align_functions * 2 - 1);
"%s%s%s version %s (%s) compiled by CC.\n"
#endif
, indent, *indent != 0 ? " " : "",
- language_string, version_string, TARGET_NAME,
+ lang_hooks.name, version_string, TARGET_NAME,
indent, __VERSION__);
}