mirror of
https://github.com/rust-lang/rust.git
synced 2025-09-30 00:03:49 +00:00

Normally LLVM and rustc agree about what features are implied by target-cpu, but for NVPTX, LLVM considers sm_* and ptx* features to be exclusive, which makes sense for codegen purposes. But in Rust, we want to think of them as: sm_{sver} means that the target supports the hardware features of sver ptx{pver} means the driver supports PTX ISA pver Intrinsics usually require a minimum sm_{sver} and ptx{pver}. Prior to this commit, -Ctarget-cpu=sm_70 would activate only sm_70 and ptx60 (the minimum PTX version that supports sm_70, which maximizes driver compatibility). With this commit, it also activates all the implied target features (sm_20, ..., sm_62; ptx32, ..., ptx50).
29 lines
885 B
Rust
29 lines
885 B
Rust
//@ assembly-output: ptx-linker
|
|
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_80 -Z unstable-options -Clinker-flavor=llbc
|
|
//@ only-nvptx64
|
|
//@ build-pass
|
|
#![no_std]
|
|
#![allow(dead_code)]
|
|
|
|
#[panic_handler]
|
|
pub fn panic(_info: &core::panic::PanicInfo) -> ! {
|
|
loop {}
|
|
}
|
|
|
|
// -Ctarget-cpu=sm_80 directly enables sm_80 and ptx70
|
|
#[cfg(not(all(target_feature = "sm_80", target_feature = "ptx70")))]
|
|
compile_error!("direct target features not enabled");
|
|
|
|
// -Ctarget-cpu=sm_80 implies all earlier sm_* and ptx* features.
|
|
#[cfg(not(all(
|
|
target_feature = "sm_60",
|
|
target_feature = "sm_70",
|
|
target_feature = "ptx50",
|
|
target_feature = "ptx60",
|
|
)))]
|
|
compile_error!("implied target features not enabled");
|
|
|
|
// -Ctarget-cpu=sm_80 implies all earlier sm_* and ptx* features.
|
|
#[cfg(target_feature = "ptx71")]
|
|
compile_error!("sm_80 requires only ptx70, but ptx71 enabled");
|