================
@@ -3053,9 +3008,11 @@ bool
CodeGenModule::GetCPUAndFeaturesAttributes(GlobalDecl GD,
// While we populated the feature map above, we still need to
// get and parse the target attribute so we can get the cpu for
// the function.
- if (TD) {
- ParsedTargetAttr ParsedAttr =
- Target.parseTargetAttr(TD->getFeaturesStr());
+ StringRef FeatureStr =
+ TD ? TD->getFeaturesStr()
+ : (TC ? TC->getFeatureStr(GD.getMultiVersionIndex()) : StringRef());
+ if (!FeatureStr.empty()) {
----------------
w2yehia wrote:
You're correct;
- in Clang, only RISCV [1] and x86 [2] seem to use `parseTargetAttr` on
`target_clones`.
- latest GCC states:
> For the x86 and PowerPC targets, the supported options and restrictions are
the same as for the target attribute.
- official RISCV documentation has slightly different grammar for `target` [3]
and `target_clones`[4].
so I think it should be safe to reuse `parseTargetAttr` for x86 and PPC here,
but not RISCV and others. Ideally, we would have a `parseTargetClonesAttr`
function... but that would be substantial rework if want to use it for parsing
target_clones on all FMV-supporting targets. I've updated the PR to only use
parseTargetAttr on AIX (PowerPC) and x86.
[1]
https://github.com/llvm/llvm-project/blob/main/clang/lib/AST/ASTContext.cpp#L15255
[2]
https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/ABIInfo.cpp#L213
used by x86
[3]
https://github.com/riscv-non-isa/riscv-c-api-doc/blob/main/src/c-api.adoc#__attribute__targetattr-string
[4]
https://github.com/riscv-non-isa/riscv-c-api-doc/blob/main/src/c-api.adoc#__attribute__target_clonestarget-clones-attr-string-
https://github.com/llvm/llvm-project/pull/177428
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits