about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/llvm_util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/llvm_util.rs')
-rw-r--r--compiler/rustc_codegen_llvm/src/llvm_util.rs18
1 files changed, 9 insertions, 9 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs
index 2da06e6babe..e0771313f76 100644
--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs
@@ -8,9 +8,8 @@ use rustc_session::config::PrintRequest;
 use rustc_session::Session;
 use rustc_span::symbol::Symbol;
 use rustc_target::spec::{MergeFunctions, PanicStrategy};
-use std::ffi::CString;
+use std::ffi::{CStr, CString};
 
-use std::detect;
 use std::slice;
 use std::str;
 use std::sync::atomic::{AtomicBool, Ordering};
@@ -223,19 +222,20 @@ pub fn target_cpu(sess: &Session) -> &str {
 }
 
 pub fn handle_native_features(sess: &Session) -> Vec<String> {
-    const LLVM_NOT_RECOGNIZED: &[&str] = &["tsc"];
-
     match sess.opts.cg.target_cpu {
         Some(ref s) => {
             if s != "native" {
                 return vec![];
             }
 
-            detect::features()
-                .map(|(feature, support)| (to_llvm_feature(sess, feature), support))
-                .filter(|(feature, _)| !LLVM_NOT_RECOGNIZED.contains(feature))
-                .map(|(feature, support)| (if support { "+" } else { "-" }).to_owned() + feature)
-                .collect()
+            let ptr = unsafe { llvm::LLVMGetHostCPUFeatures() };
+            let str = unsafe { CStr::from_ptr(ptr).to_string_lossy() };
+
+            let features = str.split(",").map(|s| s.to_owned()).collect();
+
+            unsafe { llvm::LLVMDisposeMessage(ptr) };
+
+            features
         }
         None => vec![],
     }