Attribute 'target' can take either features or architectures. This patch accomplishes this in a couple of ways:
1- It adds support to Targets.cpp for "isValidCPUName" and "isValidFeatureName". HOWEVER, the latter is only implemented for X86. I'm hoping to delay implementation of those until later (or get help on that).
2- Cleans up the 'target' entry in Attr.td to use a struct instead of a 'Pair', so that more data can be included.
3- Validates the attribute sufficiently.
Note that we currently do not have multi-versioning support (that is to come in a future patch) and SemaDeclAttr.cpp lacks knowledge of whether this is a multi-version, so this validation doesn't cover the multi-versioning case.
All of these (including the one you didn't have to touch) should be using "ignoring" instead of "Ignoring".