================
@@ -719,17 +719,37 @@ llvm::APInt 
PPCTargetInfo::getFMVPriority(ArrayRef<StringRef> Features) const {
     return llvm::APInt(32, 0);
   assert(Features.size() == 1 && "one feature/cpu per clone on PowerPC");
   ParsedTargetAttr ParsedAttr = parseTargetAttr(Features[0]);
+
+  // Priority scheme: Features requiring POWERXX are higher than cpu=pwrXX
+  // but lower than cpu=pwr(XX+1). This ensures proper version selection.
+  // Example: mma (POWER10 feature) > cpu=pwr10 > power9-vector (POWER9 
feature)
+
   if (!ParsedAttr.CPU.empty()) {
     int Priority = llvm::StringSwitch<int>(ParsedAttr.CPU)
-                       .Case("pwr7", 1)
-                       .Case("pwr8", 2)
-                       .Case("pwr9", 3)
-                       .Case("pwr10", 4)
-                       .Case("pwr11", 5)
+                       .Case("pwr7", 100)
+                       .Case("pwr8", 200)
+                       .Case("pwr9", 300)
+                       .Case("pwr10", 400)
+                       .Case("pwr11", 500)
+                       .Default(0);
+    return llvm::APInt(32, Priority);
+  }
+
+  // Feature strings: priority between cpu=pwrN and cpu=pwr(N+1)
+  if (!ParsedAttr.Features.empty()) {
+    StringRef Feature = ParsedAttr.Features[0];
+    // Remove leading '+' or '-'
+    if (Feature.starts_with("+") || Feature.starts_with("-"))
+      Feature = Feature.drop_front(1);
+
+    int Priority = llvm::StringSwitch<int>(Feature)
+#define PPC_AIX_CLONES_FEATURE(FEATURE_NAME, _, PRIORITY)                      
\
+  .Case(FEATURE_NAME, PRIORITY)
+#include "llvm/TargetParser/PPCTargetParser.def"
                        .Default(0);
     return llvm::APInt(32, Priority);
   }
-  assert(false && "unimplemented");
+
----------------
w2yehia wrote:

you're right, this should be unreachable too.

https://github.com/llvm/llvm-project/pull/206786
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to