mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-13 11:51:22 +08:00
Keep -m[arch|tune]=native in COLLECT_GCC_OPTIONS.
2011-01-07 H.J. Lu <hongjiu.lu@intel.com> PR driver/42445 * gcc.c (%>S): New. (SWITCH_KEEP_FOR_GCC): Likewise. (set_collect_gcc_options): Check SWITCH_KEEP_FOR_GCC. (do_spec_1): Handle "%>". * config/i386/i386.h (CC1_CPU_SPEC): Replace "%<" with "%>". From-SVN: r168583
This commit is contained in:
parent
c21bbd7a5e
commit
96f5b13771
@ -1,3 +1,13 @@
|
||||
2011-01-07 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR driver/42445
|
||||
* gcc.c (%>S): New.
|
||||
(SWITCH_KEEP_FOR_GCC): Likewise.
|
||||
(set_collect_gcc_options): Check SWITCH_KEEP_FOR_GCC.
|
||||
(do_spec_1): Handle "%>".
|
||||
|
||||
* config/i386/i386.h (CC1_CPU_SPEC): Replace "%<" with "%>".
|
||||
|
||||
2011-01-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/47201
|
||||
|
@ -561,9 +561,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
||||
#define CC1_CPU_SPEC CC1_CPU_SPEC_1
|
||||
#else
|
||||
#define CC1_CPU_SPEC CC1_CPU_SPEC_1 \
|
||||
"%{march=native:%<march=native %:local_cpu_detect(arch) \
|
||||
%{!mtune=*:%<mtune=native %:local_cpu_detect(tune)}} \
|
||||
%{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
|
||||
"%{march=native:%>march=native %:local_cpu_detect(arch) \
|
||||
%{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} \
|
||||
%{mtune=native:%>mtune=native %:local_cpu_detect(tune)}"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
23
gcc/gcc.c
23
gcc/gcc.c
@ -390,6 +390,7 @@ or with constant text in a single argument.
|
||||
Note - this command is position dependent. % commands in the
|
||||
spec string before this one will see -S, % commands in the
|
||||
spec string after this one will not.
|
||||
%>S Similar to "%<S", but keep it in the GCC command line.
|
||||
%<S* remove all occurrences of all switches beginning with -S from the
|
||||
command line.
|
||||
%:function(args)
|
||||
@ -2743,10 +2744,11 @@ execute (void)
|
||||
The `validated' field is nonzero if any spec has looked at this switch;
|
||||
if it remains zero at the end of the run, it must be meaningless. */
|
||||
|
||||
#define SWITCH_LIVE 0x1
|
||||
#define SWITCH_FALSE 0x2
|
||||
#define SWITCH_IGNORE 0x4
|
||||
#define SWITCH_IGNORE_PERMANENTLY 0x8
|
||||
#define SWITCH_LIVE (1 << 0)
|
||||
#define SWITCH_FALSE (1 << 1)
|
||||
#define SWITCH_IGNORE (1 << 2)
|
||||
#define SWITCH_IGNORE_PERMANENTLY (1 << 3)
|
||||
#define SWITCH_KEEP_FOR_GCC (1 << 4)
|
||||
|
||||
struct switchstr
|
||||
{
|
||||
@ -3926,7 +3928,9 @@ set_collect_gcc_options (void)
|
||||
first_time = FALSE;
|
||||
|
||||
/* Ignore elided switches. */
|
||||
if ((switches[i].live_cond & SWITCH_IGNORE) != 0)
|
||||
if ((switches[i].live_cond
|
||||
& (SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC))
|
||||
== SWITCH_IGNORE)
|
||||
continue;
|
||||
|
||||
obstack_grow (&collect_obstack, "'-", 2);
|
||||
@ -5091,10 +5095,17 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
|
||||
/* Henceforth ignore the option(s) matching the pattern
|
||||
after the %<. */
|
||||
case '<':
|
||||
case '>':
|
||||
{
|
||||
unsigned len = 0;
|
||||
int have_wildcard = 0;
|
||||
int i;
|
||||
int switch_option;
|
||||
|
||||
if (c == '>')
|
||||
switch_option = SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC;
|
||||
else
|
||||
switch_option = SWITCH_IGNORE;
|
||||
|
||||
while (p[len] && p[len] != ' ' && p[len] != '\t')
|
||||
len++;
|
||||
@ -5106,7 +5117,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
|
||||
if (!strncmp (switches[i].part1, p, len - have_wildcard)
|
||||
&& (have_wildcard || switches[i].part1[len] == '\0'))
|
||||
{
|
||||
switches[i].live_cond |= SWITCH_IGNORE;
|
||||
switches[i].live_cond |= switch_option;
|
||||
switches[i].validated = 1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user