aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJian Li <jian.y.li@intel.com>2014-09-03 18:54:26 +0800
committerYong Chen <yong.a.chen@intel.com>2014-09-03 21:46:36 +0800
commit602ce0336c0ff5109923cee9b4426e913e718605 (patch)
tree79be91d882fd840cd52daa996111d073e2556da7 /tools
parentea6b1c5af978698f266f352c8a6f00ec3677e7e5 (diff)
downloadlibbcc-602ce0336c0ff5109923cee9b4426e913e718605.tar.gz
Set x86 SSE features explicitly in bcc
Change-Id: Ia31393f08703f9474fee31fc03de7888fca78413 Signed-off-by: Yong Chen <yong.a.chen@intel.com>
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;