Updated documentation, x86 feature detection testing, and removed LLVM 9 exclusive features
Updated the added documentation in llvm_util.rs to note which copies of LLVM need to be inspected. Removed avx512bf16 and avx512vp2intersect because they are unsupported before LLVM 9 with the build with external LLVM 8 being supported Re-introduced detection testing previously removed for un-requestable features tsc and mmx
This commit is contained in:
parent
cd95e939bb
commit
3daa93f555
3 changed files with 14 additions and 2 deletions
|
@ -139,6 +139,11 @@ pub fn time_trace_profiler_finish(file_name: &str) {
|
||||||
// array, leading to crashes.
|
// array, leading to crashes.
|
||||||
// To find a list of LLVM's names, check llvm-project/llvm/include/llvm/Support/*TargetParser.def
|
// To find a list of LLVM's names, check llvm-project/llvm/include/llvm/Support/*TargetParser.def
|
||||||
// where the * matches the architecture's name
|
// where the * matches the architecture's name
|
||||||
|
// Beware to not use the llvm github project for this, but check the git submodule
|
||||||
|
// found in src/llvm-project
|
||||||
|
// Though note that Rust can also be build with an external precompiled version of LLVM
|
||||||
|
// which might lead to failures if the oldest tested / supported LLVM version
|
||||||
|
// doesn't yet support the relevant intrinsics
|
||||||
pub fn to_llvm_feature<'a>(sess: &Session, s: &'a str) -> &'a str {
|
pub fn to_llvm_feature<'a>(sess: &Session, s: &'a str) -> &'a str {
|
||||||
let arch = if sess.target.arch == "x86_64" { "x86" } else { &*sess.target.arch };
|
let arch = if sess.target.arch == "x86_64" { "x86" } else { &*sess.target.arch };
|
||||||
match (arch, s) {
|
match (arch, s) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ const X86_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
|
||||||
("aes", None),
|
("aes", None),
|
||||||
("avx", None),
|
("avx", None),
|
||||||
("avx2", None),
|
("avx2", None),
|
||||||
("avx512bf16", Some(sym::avx512_target_feature)),
|
//("avx512bf16", Some(sym::avx512_target_feature)), // this seems to be unsupported by the supported build with external LLVM 8, LLVM 9 should be sufficient though
|
||||||
("avx512bitalg", Some(sym::avx512_target_feature)),
|
("avx512bitalg", Some(sym::avx512_target_feature)),
|
||||||
("avx512bw", Some(sym::avx512_target_feature)),
|
("avx512bw", Some(sym::avx512_target_feature)),
|
||||||
("avx512cd", Some(sym::avx512_target_feature)),
|
("avx512cd", Some(sym::avx512_target_feature)),
|
||||||
|
@ -70,7 +70,7 @@ const X86_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
|
||||||
("avx512vbmi2", Some(sym::avx512_target_feature)),
|
("avx512vbmi2", Some(sym::avx512_target_feature)),
|
||||||
("avx512vl", Some(sym::avx512_target_feature)),
|
("avx512vl", Some(sym::avx512_target_feature)),
|
||||||
("avx512vnni", Some(sym::avx512_target_feature)),
|
("avx512vnni", Some(sym::avx512_target_feature)),
|
||||||
("avx512vp2intersect", Some(sym::avx512_target_feature)),
|
//("avx512vp2intersect", Some(sym::avx512_target_feature)), // this seems to be unsupported by the supported build with external LLVM 8, LLVM 9 should be sufficient though
|
||||||
("avx512vpclmulqdq", Some(sym::avx512_target_feature)),
|
("avx512vpclmulqdq", Some(sym::avx512_target_feature)),
|
||||||
("avx512vpopcntdq", Some(sym::avx512_target_feature)),
|
("avx512vpopcntdq", Some(sym::avx512_target_feature)),
|
||||||
("bmi1", None),
|
("bmi1", None),
|
||||||
|
|
|
@ -54,6 +54,13 @@ fn powerpc64_linux() {
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
||||||
fn x86_all() {
|
fn x86_all() {
|
||||||
|
// the below is the set of features we can test at runtime, but don't actually
|
||||||
|
// use to gate anything and are thus not part of the X86_ALLOWED_FEATURES list
|
||||||
|
|
||||||
|
println!("abm: {:?}", is_x86_feature_detected!("abm")); // this is a synonym for lzcnt but we test it anyways
|
||||||
|
println!("mmx: {:?}", is_x86_feature_detected!("mmx"));
|
||||||
|
println!("tsc: {:?}", is_x86_feature_detected!("tsc"));
|
||||||
|
|
||||||
// the below is in alphabetical order and matches
|
// the below is in alphabetical order and matches
|
||||||
// the order of X86_ALLOWED_FEATURES in rustc_codegen_ssa's target_features.rs
|
// the order of X86_ALLOWED_FEATURES in rustc_codegen_ssa's target_features.rs
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue