[cfe-commits] [PATCH] Add vfpv3-d16 and fix vfp2/vfp3 handling in the Clang driver
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Wed Jan 11 03:25:51 PST 2012
Yes, I also prefer the first patch. Committed as r147943 with a test.
On Wed, Jan 11, 2012 at 2:29 PM, Chandler Carruth <chandlerc at google.com> wrote:
> Hmm, I see both Anton's point about the ugliness of this code, and your
> point about there being no good way to do this.
>
> The ideal way to manage this in Clang/LLVM land is something along the lines
> of the following.
>
> Define in some class or interface an enum representing the viable modes to
> be selected here. Then provide a parse routine which converts a string into
> the enum as follows:
>
> class ... {
> enum MyFeatureKind {
> MFK_Foo, // "foo"
> MFK_Bar // "bar"
> };
>
> MyFeatureKind parseFeatureString(StringRef S) {
> return llvm::StringSwitch<MyFeatureKind>(S)
> .Case("foo", MFK_Foo)
> .Case("bar", MFK_Bar);
> }
> }
>
>
> And then in the driver you have your object and write:
>
> // ...
> switch (obj->parseFeatureString(...)) {
> case MFK_Foo:
> ...
> break;
> }
>
>
> If there happens to be a one-to-one mapping you can use a table indexed by
> the enum, or you can directly use StringSwitch to parse the string and
> produce the single value. I think if there are multiple, the switch over the
> enum is pretty clear.
>
> That said, we have a lot of code with if statements in the driver... I'm
> actually OK with your original patch's implementation as the existing code
> was already structured that way, and it's not clear there is a good place
> for this FPU enum to live, get parsed into, etc. If you do see a place, and
> would like to refactor things into a structure such as the above, awesome,
> but I'd actually prefer you apply your first patch, and *then* do the
> refactor.
>
> However, before you apply the first patch, can you add test cases? You
> should be able to add a test case under test/Driver that ensures the proper
> flags get forwarded down the chain.
More information about the cfe-commits
mailing list