Skip to content

Commit 4ada323

Browse files
committed
Remove duplicate features from metadata and update test.
1 parent a93614e commit 4ada323

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
#include "llvm/TargetParser/X86TargetParser.h"
7474
#include "llvm/Transforms/Utils/BuildLibCalls.h"
7575
#include <optional>
76+
#include <set>
7677

7778
using namespace clang;
7879
using namespace CodeGen;
@@ -2763,9 +2764,10 @@ bool CodeGenModule::GetCPUAndFeaturesAttributes(GlobalDecl GD,
27632764
Attrs.addAttribute("fmv-features");
27642765
AddedAttr = true;
27652766
} else if (!Feats.empty()) {
2766-
llvm::sort(Feats);
2767+
// Sort features and remove duplicates.
2768+
std::set<StringRef> OrderedFeats(Feats.begin(), Feats.end());
27672769
std::string FMVFeatures;
2768-
for (StringRef F : Feats)
2770+
for (StringRef F : OrderedFeats)
27692771
FMVFeatures.append("," + F.str());
27702772
Attrs.addAttribute("fmv-features", FMVFeatures.substr(1));
27712773
AddedAttr = true;
@@ -2808,6 +2810,7 @@ void CodeGenModule::setNonAliasAttributes(GlobalDecl GD,
28082810
llvm::AttributeMask RemoveAttrs;
28092811
RemoveAttrs.addAttribute("target-cpu");
28102812
RemoveAttrs.addAttribute("target-features");
2813+
RemoveAttrs.addAttribute("fmv-features");
28112814
RemoveAttrs.addAttribute("tune-cpu");
28122815
F->removeFnAttrs(RemoveAttrs);
28132816
F->addFnAttrs(Attrs);

clang/test/CodeGen/AArch64/fmv-features.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ __attribute__((target_version("sve2-sm4"))) int fmv(void) { return 0; }
139139
// CHECK: define dso_local i32 @fmv._Mwfxt() #[[wfxt:[0-9]+]] {
140140
__attribute__((target_version("wfxt"))) int fmv(void) { return 0; }
141141

142-
// CHECK: define dso_local i32 @fmv._MaesMbf16MbtiMcrc() #[[multiple_features:[0-9]+]] {
143-
__attribute__((target_version("aes+bf16+bti+crc"))) int fmv(void) { return 0; }
142+
// CHECK: define dso_local i32 @fmv._MaesMbf16MbtiMcrc() #[[unordered_features_with_duplicates:[0-9]+]] {
143+
__attribute__((target_version("crc+bti+bti+bti+aes+aes+bf16"))) int fmv(void) { return 0; }
144144

145145
// CHECK-NOT: define dso_local i32 @fmv._M{{.*}}
146146
__attribute__((target_version("non_existent_extension"))) int fmv(void);
@@ -198,5 +198,5 @@ int caller() {
198198
// CHECK: attributes #[[sve2_sha3]] = {{.*}} "fmv-features"="sve2-sha3"
199199
// CHECK: attributes #[[sve2_sm4]] = {{.*}} "fmv-features"="sve2-sm4"
200200
// CHECK: attributes #[[wfxt]] = {{.*}} "fmv-features"="wfxt"
201-
// CHECK: attributes #[[multiple_features]] = {{.*}} "fmv-features"="aes,bf16,bti,crc"
201+
// CHECK: attributes #[[unordered_features_with_duplicates]] = {{.*}} "fmv-features"="aes,bf16,bti,crc"
202202
// CHECK: attributes #[[default]] = {{.*}} "fmv-features"

0 commit comments

Comments
 (0)