aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2014-09-04 01:57:32 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-09-04 01:57:32 +0000
commit4f20f86320d66c101111a6c302efca765aff5113 (patch)
treee1c29b7372d861f4cabc1a42887081ea481661ac /tools
parent8cb6cc6baed0e2739b1dc23a62626484594b3069 (diff)
parent2d112c0241dfa3093c00912845b3a5f7f1eb2d67 (diff)
downloadlibbcc-4f20f86320d66c101111a6c302efca765aff5113.tar.gz
am 2d112c02: Merge "Set x86 SSE features explicitly in bcc"
* commit '2d112c0241dfa3093c00912845b3a5f7f1eb2d67': Set x86 SSE features explicitly in bcc
Diffstat (limited to 'tools')
-rw-r--r--tools/bcc/Main.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/bcc/Main.cpp b/tools/bcc/Main.cpp
index 959f9e6..6b9b13d 100644
--- a/tools/bcc/Main.cpp
+++ b/tools/bcc/Main.cpp
@@ -125,6 +125,30 @@ bool ConfigCompiler(RSCompilerDriver &pRSCD) {
return false;
}
+ // llvm3.5 has removed the auto-detect feature for x86 subtarget,
+ // so set features explicitly in bcc.
+ if ((config->getTriple().find("i686") != std::string::npos) ||
+ (config->getTriple().find("x86_64") != std::string::npos)) {
+ std::vector<std::string> fv;
+
+#if defined(__SSE3__)
+ fv.push_back("+sse3");
+#endif
+#if defined(__SSSE3__)
+ fv.push_back("+ssse3");
+#endif
+#if defined(__SSE4_1__)
+ fv.push_back("+sse4.1");
+#endif
+#if defined(__SSE4_2__)
+ fv.push_back("+sse4.2");
+#endif
+
+ if (fv.size()) {
+ config->setFeatureString(fv);
+ }
+ }
+
switch (OptOptLevel) {
case '0': config->setOptimizationLevel(llvm::CodeGenOpt::None); break;
case '1': config->setOptimizationLevel(llvm::CodeGenOpt::Less); break;