From bf801590503447cc5b1ddd520b39d2957d90368b Mon Sep 17 00:00:00 2001 From: Andrew Sun Date: Wed, 6 Jan 2021 03:23:54 -0500 Subject: Make target-cpu=native detect individual features --- compiler/rustc_codegen_llvm/src/llvm_util.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'compiler/rustc_codegen_llvm/src/llvm_util.rs') diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs index a3139ce5a34..2da06e6babe 100644 --- a/compiler/rustc_codegen_llvm/src/llvm_util.rs +++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs @@ -10,6 +10,7 @@ use rustc_span::symbol::Symbol; use rustc_target::spec::{MergeFunctions, PanicStrategy}; use std::ffi::CString; +use std::detect; use std::slice; use std::str; use std::sync::atomic::{AtomicBool, Ordering}; @@ -221,6 +222,25 @@ pub fn target_cpu(sess: &Session) -> &str { handle_native(name) } +pub fn handle_native_features(sess: &Session) -> Vec { + 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() + } + None => vec![], + } +} + pub fn tune_cpu(sess: &Session) -> Option<&str> { match sess.opts.debugging_opts.tune_cpu { Some(ref s) => Some(handle_native(&**s)), -- cgit 1.4.1-3-g733a5