r233227 - Reapply r232888 after applying a fix for -msse4 code generation.
Eric Christopher
echristo at gmail.com
Wed Mar 25 16:14:47 PDT 2015
Author: echristo
Date: Wed Mar 25 18:14:47 2015
New Revision: 233227
URL: http://llvm.org/viewvc/llvm-project?rev=233227&view=rev
Log:
Reapply r232888 after applying a fix for -msse4 code generation.
As a note, any target that uses fake target features via command
line options will have similar problems.
Added:
cfe/trunk/test/CodeGen/function-target-features.c
Modified:
cfe/trunk/lib/CodeGen/CGCall.cpp
Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=233227&r1=233226&r2=233227&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCall.cpp Wed Mar 25 18:14:47 2015
@@ -31,6 +31,7 @@
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/Transforms/Utils/Local.h"
+#include <sstream>
using namespace clang;
using namespace CodeGen;
@@ -1475,6 +1476,26 @@ void CodeGenModule::ConstructAttributeLi
if (!CodeGenOpts.StackRealignment)
FuncAttrs.addAttribute("no-realign-stack");
+
+ // Add target-cpu and target-features work if they differ from the defaults.
+ std::string &CPU = getTarget().getTargetOpts().CPU;
+ if (CPU != "" && CPU != getTarget().getTriple().getArchName())
+ FuncAttrs.addAttribute("target-cpu", getTarget().getTargetOpts().CPU);
+
+ // TODO: FeaturesAsWritten gets us the features on the command line,
+ // for canonicalization purposes we might want to avoid putting features
+ // in the target-features set if we know it'll be one of the default
+ // features in the backend, e.g. corei7-avx and +avx.
+ std::vector<std::string> &Features =
+ getTarget().getTargetOpts().FeaturesAsWritten;
+ if (!Features.empty()) {
+ std::stringstream S;
+ std::copy(Features.begin(), Features.end(),
+ std::ostream_iterator<std::string>(S, ","));
+ // The drop_back gets rid of the trailing space.
+ FuncAttrs.addAttribute("target-features",
+ StringRef(S.str()).drop_back(1));
+ }
}
ClangToLLVMArgMapping IRFunctionArgs(getContext(), FI);
Added: cfe/trunk/test/CodeGen/function-target-features.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/function-target-features.c?rev=233227&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/function-target-features.c (added)
+++ cfe/trunk/test/CodeGen/function-target-features.c Wed Mar 25 18:14:47 2015
@@ -0,0 +1,21 @@
+// This test verifies that we produce target-cpu and target-features attributes
+// on functions when they're different from the standard cpu and have written
+// features.
+
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-feature +avx | FileCheck %s -check-prefix=AVX-FEATURE
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-feature +avx | FileCheck %s -check-prefix=AVX-NO-CPU
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-feature +avx512f -target-feature +avx512er | FileCheck %s -check-prefix=TWO-AVX
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-cpu corei7 | FileCheck %s -check-prefix=CORE-CPU
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-cpu corei7 -target-feature +avx | FileCheck %s -check-prefix=CORE-CPU-AND-FEATURES
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-cpu x86-64 | FileCheck %s -check-prefix=X86-64-CPU-NOT
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-cpu corei7-avx -target-feature -avx | FileCheck %s -check-prefix=AVX-MINUS-FEATURE
+
+void foo() {}
+
+// AVX-FEATURE: "target-features"="+avx"
+// AVX-NO-CPU-NOT: target-cpu
+// TWO-AVX: "target-features"="+avx512f,+avx512er"
+// CORE-CPU: "target-cpu"="corei7"
+// CORE-CPU-AND-FEATURES: "target-cpu"="corei7" "target-features"="+avx"
+// X86-64-CPU-NOT: "target-cpu"
+// AVX-MINUS-FEATURE: "target-features"="-avx"
More information about the cfe-commits
mailing list