diff options
author | Eric Christopher <echristo@gmail.com> | 2015-03-25 23:14:47 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2015-03-25 23:14:47 +0000 |
commit | 70c1665d83861e35ddd5c3a1b665992e1738b7e2 (patch) | |
tree | 81ae5f5574bde5733ac510322e512e33a72290cc /clang/lib/CodeGen | |
parent | cf07c65be3094e023dfa45e555918782ccdcc1e7 (diff) | |
download | bcm5719-llvm-70c1665d83861e35ddd5c3a1b665992e1738b7e2.tar.gz bcm5719-llvm-70c1665d83861e35ddd5c3a1b665992e1738b7e2.zip |
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.
llvm-svn: 233227
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 3cb72bd1512..d39776191f3 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -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::ConstructAttributeList(const CGFunctionInfo &FI, 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); |