https://github.com/ecnelises updated https://github.com/llvm/llvm-project/pull/172844
>From 8d5bbd2662e978d2c708d7ab1e57aac80bd3dcc0 Mon Sep 17 00:00:00 2001 From: Qiu Chaofan <[email protected]> Date: Thu, 18 Dec 2025 16:01:58 +0800 Subject: [PATCH 1/2] [X86] Ignore invalid features in FMV priority --- clang/lib/Basic/Targets/X86.cpp | 4 +++- clang/test/Sema/attr-target-clones.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index 8ab39b750dc99..e660d6758e99f 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -1355,7 +1355,7 @@ static llvm::X86::ProcessorFeatures getFeature(StringRef Name) { } llvm::APInt X86TargetInfo::getFMVPriority(ArrayRef<StringRef> Features) const { - auto getPriority = [](StringRef Feature) -> unsigned { + auto getPriority = [this](StringRef Feature) -> unsigned { // Valid CPUs have a 'key feature' that compares just better than its key // feature. using namespace llvm::X86; @@ -1366,6 +1366,8 @@ llvm::APInt X86TargetInfo::getFMVPriority(ArrayRef<StringRef> Features) const { } // Now we know we have a feature, so get its priority and shift it a few so // that we have sufficient room for the CPUs (above). + if (!validateCpuSupports(Feature)) + return 0; return getFeaturePriority(getFeature(Feature)) << 1; }; diff --git a/clang/test/Sema/attr-target-clones.c b/clang/test/Sema/attr-target-clones.c index 7ff8a02bf5332..6902dc65e7276 100644 --- a/clang/test/Sema/attr-target-clones.c +++ b/clang/test/Sema/attr-target-clones.c @@ -4,6 +4,9 @@ void __attribute__((target_clones("sse4.2", "arch=sandybridge"))) no_default(void); +// expected-warning@+1 {{unsupported 'sse4' in the 'target_clones' attribute string; 'target_clones' attribute ignored}} +void __attribute__((target_clones("sse4"))) invalid_target(void); + // expected-error@+2 {{'target_clones' and 'target' attributes are not compatible}} // expected-note@+1 {{conflicting attribute is here}} void __attribute__((target("sse4.2"), target_clones("arch=sandybridge"))) >From fa0159847812bac613dd3ed6402d17e946bbbbd2 Mon Sep 17 00:00:00 2001 From: Qiu Chaofan <[email protected]> Date: Mon, 3 Aug 2026 01:01:03 +0800 Subject: [PATCH 2/2] fixup! [X86] Ignore invalid features in FMV priority --- clang/lib/Basic/Targets/X86.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index e660d6758e99f..d218e299bcc32 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -1355,7 +1355,7 @@ static llvm::X86::ProcessorFeatures getFeature(StringRef Name) { } llvm::APInt X86TargetInfo::getFMVPriority(ArrayRef<StringRef> Features) const { - auto getPriority = [this](StringRef Feature) -> unsigned { + auto getPriority = [](StringRef Feature) -> unsigned { // Valid CPUs have a 'key feature' that compares just better than its key // feature. using namespace llvm::X86; @@ -1366,14 +1366,14 @@ llvm::APInt X86TargetInfo::getFMVPriority(ArrayRef<StringRef> Features) const { } // Now we know we have a feature, so get its priority and shift it a few so // that we have sufficient room for the CPUs (above). - if (!validateCpuSupports(Feature)) - return 0; return getFeaturePriority(getFeature(Feature)) << 1; }; unsigned Priority = 0; for (StringRef Feature : Features) - if (!Feature.empty()) + if (!Feature.empty() && + (llvm::X86::parseArchX86(Feature) != llvm::X86::CK_None || + validateCpuSupports(Feature))) Priority = std::max(Priority, getPriority(Feature)); return llvm::APInt(32, Priority); } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
