[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 09:06:31 PST 2021


This revision was automatically updated to reflect the committed changes.
Closed by commit rG893efd0d665b: [X86] Honor command line features along with cpu_specific attribute (authored by craig.topper).

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.386536.patch
Type: text/x-patch
Size: 2171 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211111/5dc091bb/attachment-0001.bin>


More information about the cfe-commits mailing list