https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80108

--- Comment #7 from kelvin at gcc dot gnu.org ---
I'll pursue the recommendations offered by Michael and Bill.

Aside: as I read the existing implementation, I believe the more "consistent"
behavior would be to behave as suggested in my original "proposal".  I don't
feel strongly about this, and I may have misunderstood some of the existing
code.

Here is my current understanding of how this behaves in general:

1. If someone specifies a particular CPU option (e.g. -mcpu=405), this has the
effect of setting a bunch of target options "implicitly".

2. If someone specifies a particular target option explicitly
(-mpower9-minmax), this has the effect of setting a bunch of additional target
options on which this option depends, and marking all of these dependent target
options as explicit, UNLESS any of the dependent target options have been
"explicitly" disabled, in which case we issue an error message and quit.

Feel free to correct my understanding if I'm still confused about this.  If we
feel that -mcpu=405 -mpower9-minmax should be an error, there are probably a
bunch of other option combinations that we should probably treat as errors as
well, whereas today we may be "fixing up the inconsistencies" silently.

In terms of "fixing this mess", I've been thinking the "right way" to handle
all the target options would be to "auto-generate"
rs6000_option_override_internal from tables that describe in a more manageable
way the lattice of dependencies between all of the different target options. 
That would be the best way to enforce consistent handling of everything.  But
it would require some "effort" and would probably break existing behavior...  
:(

Reply via email to