================
@@ -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

Reply via email to