mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ revisions: COMPAT INCOMPAT
 | |
| //@ needs-llvm-components: x86
 | |
| //@ compile-flags: --target=x86_64-unknown-linux-gnu -Copt-level=3
 | |
| //@ [COMPAT] compile-flags: -Ctarget-feature=+avx2
 | |
| //@ [INCOMPAT] compile-flags: -Ctarget-feature=-avx2,-avx
 | |
| 
 | |
| // See also tests/assembly/target-feature-multiple.rs
 | |
| #![feature(no_core, lang_items)]
 | |
| #![crate_type = "lib"]
 | |
| #![no_core]
 | |
| 
 | |
| #[lang = "sized"]
 | |
| trait Sized {}
 | |
| #[lang = "copy"]
 | |
| trait Copy {}
 | |
| 
 | |
| extern "C" {
 | |
|     fn peach() -> u32;
 | |
| }
 | |
| 
 | |
| #[inline]
 | |
| #[target_feature(enable = "avx")]
 | |
| #[no_mangle]
 | |
| pub unsafe fn apple() -> u32 {
 | |
|     // CHECK-LABEL: @apple()
 | |
|     // CHECK-SAME: [[APPLEATTRS:#[0-9]+]] {
 | |
|     // CHECK: {{.*}}call{{.*}}@peach
 | |
|     peach()
 | |
| }
 | |
| 
 | |
| // target features same as global
 | |
| #[no_mangle]
 | |
| pub unsafe fn banana() -> u32 {
 | |
|     // CHECK-LABEL: @banana()
 | |
|     // CHECK-SAME: [[BANANAATTRS:#[0-9]+]] {
 | |
|     // COMPAT: {{.*}}call{{.*}}@peach
 | |
|     // INCOMPAT: {{.*}}call{{.*}}@apple
 | |
|     apple() // Compatible for inline in COMPAT revision and can't be inlined in INCOMPAT
 | |
| }
 | |
| 
 | |
| // CHECK: attributes [[APPLEATTRS]]
 | |
| // COMPAT-SAME: "target-features"="+avx,+avx2,{{.*}}"
 | |
| // INCOMPAT-SAME: "target-features"="-avx2,-avx,+avx,{{.*}}"
 | |
| // CHECK: attributes [[BANANAATTRS]]
 | |
| // COMPAT-SAME: "target-features"="+avx,+avx2,{{.*}}"
 | |
| // INCOMPAT-SAME: "target-features"="-avx2,-avx"
 | 
