Makefile.in: Update.

* Makefile.in: Update.
	* opts.c: Include tm_p.h.
	(handle_options): Make static.
	(decode_options): Copied from toplev.c.
	* opts.h (decode_options): New.
	* toplev.c (parse_options_and_default_flags): Move most to opts.c,
	some to...
	(general_init): ...here.
	(toplev_main): Use decode_options instead.
	* toplev.h (save_argc, save_argv): New.

From-SVN: r68629
This commit is contained in:
Neil Booth 2003-06-28 06:18:10 +00:00 committed by Neil Booth
parent f7400894d9
commit 9756310a6e
6 changed files with 200 additions and 188 deletions

View File

@ -1,3 +1,16 @@
2003-06-28 Neil Booth <neil@daikokuya.co.uk>
* Makefile.in: Update.
* opts.c: Include tm_p.h.
(handle_options): Make static.
(decode_options): Copied from toplev.c.
* opts.h (decode_options): New.
* toplev.c (parse_options_and_default_flags): Move most to opts.c,
some to...
(general_init): ...here.
(toplev_main): Use decode_options instead.
* toplev.h (save_argc, save_argv): New.
2003-06-28 Kazu Hirata <kazu@cs.umass.edu> 2003-06-28 Kazu Hirata <kazu@cs.umass.edu>
* explow.c (find_next_ref): Remove. * explow.c (find_next_ref): Remove.

View File

@ -1483,7 +1483,7 @@ diagnostic.o : diagnostic.c diagnostic.h real.h diagnostic.def \
input.h toplev.h intl.h langhooks.h $(LANGHOOKS_DEF_H) input.h toplev.h intl.h langhooks.h $(LANGHOOKS_DEF_H)
opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \ opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TREE_H) $(TM_H) $(LANGHOOKS_H) $(GGC_H) $(RTL_H) \ coretypes.h $(TREE_H) $(TM_H) $(LANGHOOKS_H) $(GGC_H) $(RTL_H) \
output.h diagnostic.h output.h diagnostic.h $(TM_P_H)
toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \ toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
function.h flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h diagnostic.h \ function.h flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h diagnostic.h \
debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \ debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \

View File

@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "toplev.h" #include "toplev.h"
#include "params.h" #include "params.h"
#include "diagnostic.h" #include "diagnostic.h"
#include "tm_p.h" /* For OPTIMIZATION_OPTIONS. */
/* Value of the -G xx switch, and whether it was passed or not. */ /* Value of the -G xx switch, and whether it was passed or not. */
unsigned HOST_WIDE_INT g_switch_value; unsigned HOST_WIDE_INT g_switch_value;
@ -133,6 +134,7 @@ static unsigned int handle_option (char **argv, unsigned int lang_mask);
static char *write_langs (unsigned int lang_mask); static char *write_langs (unsigned int lang_mask);
static void complain_wrong_lang (const char *, const struct cl_option *, static void complain_wrong_lang (const char *, const struct cl_option *,
unsigned int lang_mask); unsigned int lang_mask);
static void handle_options (unsigned int, char **, unsigned int lang_mask);
/* Perform a binary search to find which option the command-line INPUT /* Perform a binary search to find which option the command-line INPUT
matches. Returns its index in the option array, and N_OPTS matches. Returns its index in the option array, and N_OPTS
@ -404,7 +406,7 @@ handle_option (char **argv, unsigned int lang_mask)
/* Decode and handle the vector of command line options. LANG_MASK /* Decode and handle the vector of command line options. LANG_MASK
contains has a single bit set representing the current contains has a single bit set representing the current
language. */ language. */
void static void
handle_options (unsigned int argc, char **argv, unsigned int lang_mask) handle_options (unsigned int argc, char **argv, unsigned int lang_mask)
{ {
unsigned int n, i; unsigned int n, i;
@ -421,6 +423,183 @@ handle_options (unsigned int argc, char **argv, unsigned int lang_mask)
} }
} }
/* Parse command line options and set default flag values. Do minimal
options processing. */
void
decode_options (int argc, char **argv)
{
int i, lang_mask;
/* Save in case md file wants to emit args as a comment. */
save_argc = argc;
save_argv = argv;
/* Perform language-specific options initialization. */
lang_mask = (*lang_hooks.init_options) ();
/* Scan to see what optimization level has been specified. That will
determine the default value of many flags. */
for (i = 1; i < argc; i++)
{
if (!strcmp (argv[i], "-O"))
{
optimize = 1;
optimize_size = 0;
}
else if (argv[i][0] == '-' && argv[i][1] == 'O')
{
/* Handle -Os, -O2, -O3, -O69, ... */
char *p = &argv[i][2];
if ((p[0] == 's') && (p[1] == 0))
{
optimize_size = 1;
/* Optimizing for size forces optimize to be 2. */
optimize = 2;
}
else
{
const int optimize_val = read_integral_parameter (p, p - 2, -1);
if (optimize_val != -1)
{
optimize = optimize_val;
optimize_size = 0;
}
}
}
}
if (!optimize)
{
flag_merge_constants = 0;
}
if (optimize >= 1)
{
flag_defer_pop = 1;
flag_thread_jumps = 1;
#ifdef DELAY_SLOTS
flag_delayed_branch = 1;
#endif
#ifdef CAN_DEBUG_WITHOUT_FP
flag_omit_frame_pointer = 1;
#endif
flag_guess_branch_prob = 1;
flag_cprop_registers = 1;
flag_loop_optimize = 1;
flag_crossjumping = 1;
flag_if_conversion = 1;
flag_if_conversion2 = 1;
}
if (optimize >= 2)
{
flag_optimize_sibling_calls = 1;
flag_cse_follow_jumps = 1;
flag_cse_skip_blocks = 1;
flag_gcse = 1;
flag_expensive_optimizations = 1;
flag_strength_reduce = 1;
flag_rerun_cse_after_loop = 1;
flag_rerun_loop_opt = 1;
flag_caller_saves = 1;
flag_force_mem = 1;
flag_peephole2 = 1;
#ifdef INSN_SCHEDULING
flag_schedule_insns = 1;
flag_schedule_insns_after_reload = 1;
#endif
flag_regmove = 1;
flag_strict_aliasing = 1;
flag_delete_null_pointer_checks = 1;
flag_reorder_blocks = 1;
flag_reorder_functions = 1;
}
if (optimize >= 3)
{
flag_inline_functions = 1;
flag_rename_registers = 1;
flag_unswitch_loops = 1;
flag_unit_at_a_time = 1;
}
if (optimize < 2 || optimize_size)
{
align_loops = 1;
align_jumps = 1;
align_labels = 1;
align_functions = 1;
/* Don't reorder blocks when optimizing for size because extra
jump insns may be created; also barrier may create extra padding.
More correctly we should have a block reordering mode that tried
to minimize the combined size of all the jumps. This would more
or less automatically remove extra jumps, but would also try to
use more short jumps instead of long jumps. */
flag_reorder_blocks = 0;
}
/* Initialize whether `char' is signed. */
flag_signed_char = DEFAULT_SIGNED_CHAR;
#ifdef DEFAULT_SHORT_ENUMS
/* Initialize how much space enums occupy, by default. */
flag_short_enums = DEFAULT_SHORT_ENUMS;
#endif
/* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
modify it. */
target_flags = 0;
set_target_switch ("");
/* Unwind tables are always present in an ABI-conformant IA-64
object file, so the default should be ON. */
#ifdef IA64_UNWIND_INFO
flag_unwind_tables = IA64_UNWIND_INFO;
#endif
#ifdef OPTIMIZATION_OPTIONS
/* Allow default optimizations to be specified on a per-machine basis. */
OPTIMIZATION_OPTIONS (optimize, optimize_size);
#endif
handle_options (argc, argv, lang_mask);
if (flag_pie)
flag_pic = flag_pie;
if (flag_pic && !flag_pie)
flag_shlib = 1;
if (flag_no_inline == 2)
flag_no_inline = 0;
else
flag_really_no_inline = flag_no_inline;
/* Set flag_no_inline before the post_options () hook. The C front
ends use it to determine tree inlining defaults. FIXME: such
code should be lang-independent when all front ends use tree
inlining, in which case it, and this condition, should be moved
to the top of process_options() instead. */
if (optimize == 0)
{
/* Inlining does not work if not optimizing,
so force it not to be done. */
flag_no_inline = 1;
warn_inline = 0;
/* The c_decode_option function and decode_option hook set
this to `2' if -Wall is used, so we can avoid giving out
lots of errors for people who don't realize what -Wall does. */
if (warn_uninitialized == 1)
warning ("-Wuninitialized is not supported without -O");
}
if (flag_really_no_inline == 2)
flag_really_no_inline = flag_no_inline;
}
/* Handle target- and language-independent options. Return zero to /* Handle target- and language-independent options. Return zero to
generate an "unknown option" message. */ generate an "unknown option" message. */
static int static int

View File

@ -21,8 +21,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_OPTS_H #ifndef GCC_OPTS_H
#define GCC_OPTS_H #define GCC_OPTS_H
extern void handle_options (unsigned int argc, char **argv, extern void decode_options (int argc, char **argv);
unsigned int lang_mask);
struct cl_option struct cl_option
{ {

View File

@ -105,7 +105,6 @@ extern tree last_assemble_variable_decl;
extern void reg_alloc (void); extern void reg_alloc (void);
static void general_init (char *); static void general_init (char *);
static void parse_options_and_default_flags (int, char **);
static void do_compile (void); static void do_compile (void);
static void process_options (void); static void process_options (void);
static void backend_init (void); static void backend_init (void);
@ -4590,23 +4589,6 @@ general_init (char *argv0)
init_stringpool (); init_stringpool ();
init_ttree (); init_ttree ();
}
/* Parse command line options and set default flag values, called
after language-independent option-independent initialization. Do
minimal options processing. Outputting diagnostics is OK, but GC
and identifier hashtables etc. are not initialized yet.
Return nonzero to suppress compiler back end initialization. */
static void
parse_options_and_default_flags (int argc, char **argv)
{
int i, lang_mask;
/* Save in case md file wants to emit args as a comment. */
save_argc = argc;
save_argv = argv;
/* Initialize register usage now so switches may override. */ /* Initialize register usage now so switches may override. */
init_reg_sets (); init_reg_sets ();
@ -4615,171 +4597,6 @@ parse_options_and_default_flags (int argc, char **argv)
/* This must be done after add_params but before argument processing. */ /* This must be done after add_params but before argument processing. */
init_ggc_heuristics(); init_ggc_heuristics();
/* Perform language-specific options initialization. */
lang_mask = (*lang_hooks.init_options) ();
/* Scan to see what optimization level has been specified. That will
determine the default value of many flags. */
for (i = 1; i < argc; i++)
{
if (!strcmp (argv[i], "-O"))
{
optimize = 1;
optimize_size = 0;
}
else if (argv[i][0] == '-' && argv[i][1] == 'O')
{
/* Handle -Os, -O2, -O3, -O69, ... */
char *p = &argv[i][2];
if ((p[0] == 's') && (p[1] == 0))
{
optimize_size = 1;
/* Optimizing for size forces optimize to be 2. */
optimize = 2;
}
else
{
const int optimize_val = read_integral_parameter (p, p - 2, -1);
if (optimize_val != -1)
{
optimize = optimize_val;
optimize_size = 0;
}
}
}
}
if (!optimize)
{
flag_merge_constants = 0;
}
if (optimize >= 1)
{
flag_defer_pop = 1;
flag_thread_jumps = 1;
#ifdef DELAY_SLOTS
flag_delayed_branch = 1;
#endif
#ifdef CAN_DEBUG_WITHOUT_FP
flag_omit_frame_pointer = 1;
#endif
flag_guess_branch_prob = 1;
flag_cprop_registers = 1;
flag_loop_optimize = 1;
flag_crossjumping = 1;
flag_if_conversion = 1;
flag_if_conversion2 = 1;
}
if (optimize >= 2)
{
flag_optimize_sibling_calls = 1;
flag_cse_follow_jumps = 1;
flag_cse_skip_blocks = 1;
flag_gcse = 1;
flag_expensive_optimizations = 1;
flag_strength_reduce = 1;
flag_rerun_cse_after_loop = 1;
flag_rerun_loop_opt = 1;
flag_caller_saves = 1;
flag_force_mem = 1;
flag_peephole2 = 1;
#ifdef INSN_SCHEDULING
flag_schedule_insns = 1;
flag_schedule_insns_after_reload = 1;
#endif
flag_regmove = 1;
flag_strict_aliasing = 1;
flag_delete_null_pointer_checks = 1;
flag_reorder_blocks = 1;
flag_reorder_functions = 1;
}
if (optimize >= 3)
{
flag_inline_functions = 1;
flag_rename_registers = 1;
flag_unswitch_loops = 1;
flag_unit_at_a_time = 1;
}
if (optimize < 2 || optimize_size)
{
align_loops = 1;
align_jumps = 1;
align_labels = 1;
align_functions = 1;
/* Don't reorder blocks when optimizing for size because extra
jump insns may be created; also barrier may create extra padding.
More correctly we should have a block reordering mode that tried
to minimize the combined size of all the jumps. This would more
or less automatically remove extra jumps, but would also try to
use more short jumps instead of long jumps. */
flag_reorder_blocks = 0;
}
/* Initialize whether `char' is signed. */
flag_signed_char = DEFAULT_SIGNED_CHAR;
#ifdef DEFAULT_SHORT_ENUMS
/* Initialize how much space enums occupy, by default. */
flag_short_enums = DEFAULT_SHORT_ENUMS;
#endif
/* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
modify it. */
target_flags = 0;
set_target_switch ("");
/* Unwind tables are always present in an ABI-conformant IA-64
object file, so the default should be ON. */
#ifdef IA64_UNWIND_INFO
flag_unwind_tables = IA64_UNWIND_INFO;
#endif
#ifdef OPTIMIZATION_OPTIONS
/* Allow default optimizations to be specified on a per-machine basis. */
OPTIMIZATION_OPTIONS (optimize, optimize_size);
#endif
handle_options (argc, argv, lang_mask);
if (flag_pie)
flag_pic = flag_pie;
if (flag_pic && !flag_pie)
flag_shlib = 1;
if (flag_no_inline == 2)
flag_no_inline = 0;
else
flag_really_no_inline = flag_no_inline;
/* Set flag_no_inline before the post_options () hook. The C front
ends use it to determine tree inlining defaults. FIXME: such
code should be lang-independent when all front ends use tree
inlining, in which case it, and this condition, should be moved
to the top of process_options() instead. */
if (optimize == 0)
{
/* Inlining does not work if not optimizing,
so force it not to be done. */
flag_no_inline = 1;
warn_inline = 0;
/* The c_decode_option function and decode_option hook set
this to `2' if -Wall is used, so we can avoid giving out
lots of errors for people who don't realize what -Wall does. */
if (warn_uninitialized == 1)
warning ("-Wuninitialized is not supported without -O");
}
if (flag_really_no_inline == 2)
flag_really_no_inline = flag_no_inline;
} }
/* Process the options that have been parsed. */ /* Process the options that have been parsed. */
@ -5169,7 +4986,7 @@ toplev_main (int argc, char **argv)
/* Parse the options and do minimal processing; basically just /* Parse the options and do minimal processing; basically just
enough to default flags appropriately. */ enough to default flags appropriately. */
parse_options_and_default_flags (argc, argv); decode_options (argc, argv);
/* Exit early if we can (e.g. -help). */ /* Exit early if we can (e.g. -help). */
if (!exit_after_options) if (!exit_after_options)

View File

@ -102,6 +102,10 @@ extern const char *asm_file_name;
extern bool exit_after_options; extern bool exit_after_options;
extern bool version_flag; extern bool version_flag;
/* Copy of arguments to toplev_main. */
extern int save_argc;
extern char **save_argv;
extern int target_flags_explicit; extern int target_flags_explicit;
/* See toplev.c. */ /* See toplev.c. */