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.
|
||||
// To find a list of LLVM's names, check llvm-project/llvm/include/llvm/Support/*TargetParser.def
|
||||
// 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 {
|
||||
let arch = if sess.target.arch == "x86_64" { "x86" } else { &*sess.target.arch };
|
||||
match (arch, s) {
|
||||
|
|
|
@ -55,7 +55,7 @@ const X86_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
|
|||
("aes", None),
|
||||
("avx", 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)),
|
||||
("avx512bw", 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)),
|
||||
("avx512vl", 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)),
|
||||
("avx512vpopcntdq", Some(sym::avx512_target_feature)),
|
||||
("bmi1", None),
|
||||
|
|
|
@ -54,6 +54,13 @@ fn powerpc64_linux() {
|
|||
#[test]
|
||||
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
||||
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 order of X86_ALLOWED_FEATURES in rustc_codegen_ssa's target_features.rs
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue