[PATCH] D113647: [X86] Honor command line features along with cpu_specific attribute
Craig Topper via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 11 08:27:25 PST 2021
craig.topper updated this revision to Diff 386524.
craig.topper added a comment.
Add test file
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113647/new/
https://reviews.llvm.org/D113647
Files:
clang/lib/AST/ASTContext.cpp
clang/test/CodeGen/attr-cpuspecific-avx-abi.c
Index: clang/test/CodeGen/attr-cpuspecific-avx-abi.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/attr-cpuspecific-avx-abi.c
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -target-feature +avx -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK
+
+// Make sure the features from the command line are honored regardless of what
+// CPU is specified in the cpu_specific attribute.
+// In this test, if the 'avx' feature isn't honored, we'll generate an error for
+// the return type having a different ABI without 'avx' being enabled.
+
+typedef double __m256d __attribute__((vector_size(32)));
+
+extern __m256d bar_avx1(void);
+extern __m256d bar_avx2(void);
+
+// AVX1/AVX2 dispatcher
+__attribute__((cpu_dispatch(generic, core_4th_gen_avx)))
+__m256d foo_pd64x4(void);
+
+__attribute__((cpu_specific(generic)))
+__m256d foo(void) { return bar_avx1(); }
+// CHECK: define{{.*}} @foo.A() #[[A:[0-9]+]]
+
+__attribute__((cpu_specific(core_4th_gen_avx)))
+__m256d foo(void) { return bar_avx2(); }
+// CHECK: define{{.*}} @foo.V() #[[V:[0-9]+]]
+
+// CHECK: attributes #[[A]] = {{.*}}"target-features"="+avx,+crc32,+cx8,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave"
+// CHECK: attributes #[[V]] = {{.*}}"target-features"="+avx,+avx2,+bmi,+cmov,+crc32,+cx8,+f16c,+fma,+lzcnt,+mmx,+movbe,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave"
Index: clang/lib/AST/ASTContext.cpp
===================================================================
--- clang/lib/AST/ASTContext.cpp
+++ clang/lib/AST/ASTContext.cpp
@@ -11759,6 +11759,9 @@
Target->getCPUSpecificCPUDispatchFeatures(
SD->getCPUName(GD.getMultiVersionIndex())->getName(), FeaturesTmp);
std::vector<std::string> Features(FeaturesTmp.begin(), FeaturesTmp.end());
+ Features.insert(Features.begin(),
+ Target->getTargetOpts().FeaturesAsWritten.begin(),
+ Target->getTargetOpts().FeaturesAsWritten.end());
Target->initFeatureMap(FeatureMap, getDiagnostics(), TargetCPU, Features);
} else {
FeatureMap = Target->getTargetOpts().FeatureMap;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113647.386524.patch
Type: text/x-patch
Size: 2171 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211111/d0212a84/attachment-0001.bin>
More information about the cfe-commits
mailing list