Set x86 SSE features explicitly in bcc

Change-Id: Ia31393f08703f9474fee31fc03de7888fca78413
Signed-off-by: Yong Chen <yong.a.chen@intel.com>
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 @@
     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;