[PATCH] D105881: [flang][driver] Switch to `BoolFOption` for boolean options

Jan Svoboda via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 26 09:50:28 PDT 2021


jansvoboda11 added a comment.

Sorry, I'm not sure I follow.

In D105881#2890134 <https://reviews.llvm.org/D105881#2890134>, @awarzynski wrote:

> Apologies, it has taken me a bit longer to get back to this. @jansvoboda11 , now I'm realising the key disadvantage of using `OptInFFlag/OptOutFFlag` - it's impossible to express the `opt-in`/`opt-out` semantics in TableGen.

What do you mean exactly? I think the semantics are expressed pretty well from Clang's point of view:

- `OptInFFlag` -> users can opt-in into the behavior by specifying the positive flag in `clang -cc1` (e.g. `-fmodules`),
- `OptOutFFlag` -> users can opt-out of the behavior by specifying the negative flag in `clang -cc1` (e.g. `-fno-rtti`).

> In fact, only the contents of `clang -cc1 --help` are being tweaked by using `OptInFFlag/OptOutFFlag`.

That's incorrect, `OptInFFlag` and `OptOutFFlag` both set `HelpText` for the positive and negative driver flags.

> Basically:
>
> - for `OptInFFlang`, only `-ffoo` is printed with `-clang -cc1 --help` (the help text for `-ffno-foo` becomes irrelevant)
> - for `OptOutFFlang`, only `-fno-foo` is printed with `-clang -cc1 --help` (the help text for `-ffoo` is irrelevant)
>
> IIUC, this is achieved through `flags` (`CC1Option` vs `[]`).

Correct.

> In Flang, we rely on the fact that "no help text? don't include it in `flang-new -fc1 --help`" instead. This behavior is implemented in `clangDriver` and applies to all drivers that use it (so this is nothing specific to Flang).

I see. Is this intentional?

> This way, we can always mark Flang options with the relevant flags (e.g. `FC1Option`). In other words, we can claim them and make it clear that other drivers can ignore them.

I don't understand this. Can you elaborate? Are you relying on the absence/presence of a help text to mark flags with `FC1Option`? When does this happen? (In `Options.td`? The TableGen backend? The consumer of `Options.inc`?)

> In general, I think that Options.td would become a bit cleaner and easier to reason about if all options specified all their flags. That wouldn't be easy to achieve though!

I think that the way we define flags for the Clang driver and `-cc1` in one go is already bit confusing. But it's convenient, so we roll with it. On top of that, we have the marshalling infrastructure, that explicitly only applies to the `-cc1` side of things. If we introduce `EmptyKPM` to the mix and say "Marshalling only applies to `-cc1`, but sometimes not at all", things stop making sense in my opinion. People will copy-paste it and be confused things don't work.

> I'm just about send an updated patch. It takes into account the points that I raised above ^^^. It also fixes the failing tests reported by @PeteSteinfeld. Does this new approach work for Clang (I quickly tested `clang -cc1 --help` and see no difference)?

I'd need to double-check if we particularly care about showing/hiding flags without help text.

> It would be nicer to have the `opt-in`/`opt-out` semantics for Flang in TableGen through something similar to `BoolFOption`. No need for this just now - one step at a time :)

I suggest to find another means of achieving the semantics you want. You always just copy the `BoolFOption` implementation and remove the marshalling stuff, if that's really the semantics you want.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105881/new/

https://reviews.llvm.org/D105881



More information about the cfe-commits mailing list