On Wed, Dec 21, 2022 at 2:35 PM Jakub Jelinek <ja...@redhat.com> wrote: > > On Wed, Dec 21, 2022 at 12:20:23PM -0800, H.J. Lu wrote: > > On Mon, Dec 19, 2022 at 8:52 PM Hongtao Liu <crazy...@gmail.com> wrote: > > > > > > On Thu, Dec 15, 2022 at 3:45 PM Hongtao Liu <crazy...@gmail.com> wrote: > > > > > > > > On Thu, Dec 15, 2022 at 3:39 PM Jakub Jelinek <ja...@redhat.com> wrote: > > > > > > > > > > On Thu, Dec 15, 2022 at 02:21:37PM +0800, liuhongt via Gcc-patches > > > > > wrote: > > > > > > --- a/gcc/config/i386/i386.opt > > > > > > +++ b/gcc/config/i386/i386.opt > > > > > > @@ -420,6 +420,10 @@ mpc80 > > > > > > Target RejectNegative > > > > > > Set 80387 floating-point precision to 80-bit. > > > > > > > > > > > > +mdaz-ftz > > > > > > +Target > > > > > > > > > > s/Target/Driver/ > > > > Change to Driver and Got error like:cc1: error: command-line option > > > > ‘-mdaz-ftz’ is valid for the driver but not for C. > > > Hi Jakub: > > > I didn't find a good solution to handle this error after changing > > > *Target* to *Driver*, Could you give some hints how to solve this > > > problem? > > > Or is it ok for you to mark this as *Target*(there won't be any save > > > and restore in cfun since there's no variable defined here.) > > > > Since all -m* options are passed to cc1, -mdaz-ftz can't be marked > > as Driver. We need to give it a different name to mark it as Driver. > > It is ok like that. > > Jakub >
The GCC driver handles -mno-XXX automatically for -mXXX. Use a different name needs to handle the negation. Or we can do something like this to check for CL_DRIVER before passing it to cc1. -- H.J.
diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 2568d541196..87cbea11ae1 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -3851,7 +3851,7 @@ alloc_switch (void) static void save_switch (const char *opt, size_t n_args, const char *const *args, - bool validated, bool known) + bool validated, bool known, bool driver = false) { alloc_switch (); switches[n_switches].part1 = opt + 1; @@ -3868,6 +3868,7 @@ save_switch (const char *opt, size_t n_args, const char *const *args, switches[n_switches].validated = validated; switches[n_switches].known = known; switches[n_switches].ordering = 0; + switches[n_switches].driver = driver; n_switches++; } @@ -4575,7 +4576,8 @@ driver_handle_option (struct gcc_options *opts, if (do_save) save_switch (decoded->canonical_option[0], decoded->canonical_option_num_elements - 1, - &decoded->canonical_option[1], validated, true); + &decoded->canonical_option[1], validated, true, + cl_options[opt_index].flags == CL_DRIVER); return true; } @@ -7465,7 +7467,8 @@ check_live_switch (int switchnum, int prefix_length) static void give_switch (int switchnum, int omit_first_word) { - if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0) + if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0 + || switches[switchnum].driver) return; if (!omit_first_word) diff --git a/gcc/opts.h b/gcc/opts.h index ce4fd5c39b9..2900f0d9168 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -561,6 +561,7 @@ struct switchstr bool known; bool validated; bool ordering; + bool driver; }; #endif