]> git.lizzy.rs Git - rust.git/blob - src/test/codegen/prefetch.rs
Auto merge of #61735 - eddyb:must-use-life, r=oli-obk
[rust.git] / src / test / codegen / prefetch.rs
1 // compile-flags: -C no-prepopulate-passes
2
3 #![crate_type = "lib"]
4 #![feature(core_intrinsics)]
5
6 use std::intrinsics::{prefetch_read_data, prefetch_write_data,
7                       prefetch_read_instruction, prefetch_write_instruction};
8
9 #[no_mangle]
10 pub fn check_prefetch_read_data(data: &[i8]) {
11     unsafe {
12         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 0, i32 1)
13         prefetch_read_data(data.as_ptr(), 0);
14         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 1, i32 1)
15         prefetch_read_data(data.as_ptr(), 1);
16         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 2, i32 1)
17         prefetch_read_data(data.as_ptr(), 2);
18         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 3, i32 1)
19         prefetch_read_data(data.as_ptr(), 3);
20     }
21 }
22
23 #[no_mangle]
24 pub fn check_prefetch_write_data(data: &[i8]) {
25     unsafe {
26         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 0, i32 1)
27         prefetch_write_data(data.as_ptr(), 0);
28         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 1, i32 1)
29         prefetch_write_data(data.as_ptr(), 1);
30         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 2, i32 1)
31         prefetch_write_data(data.as_ptr(), 2);
32         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 1)
33         prefetch_write_data(data.as_ptr(), 3);
34     }
35 }
36
37 #[no_mangle]
38 pub fn check_prefetch_read_instruction(data: &[i8]) {
39     unsafe {
40         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 0, i32 0)
41         prefetch_read_instruction(data.as_ptr(), 0);
42         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 1, i32 0)
43         prefetch_read_instruction(data.as_ptr(), 1);
44         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 2, i32 0)
45         prefetch_read_instruction(data.as_ptr(), 2);
46         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 0, i32 3, i32 0)
47         prefetch_read_instruction(data.as_ptr(), 3);
48     }
49 }
50
51 #[no_mangle]
52 pub fn check_prefetch_write_instruction(data: &[i8]) {
53     unsafe {
54         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 0, i32 0)
55         prefetch_write_instruction(data.as_ptr(), 0);
56         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 1, i32 0)
57         prefetch_write_instruction(data.as_ptr(), 1);
58         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 2, i32 0)
59         prefetch_write_instruction(data.as_ptr(), 2);
60         // CHECK: call void @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 0)
61         prefetch_write_instruction(data.as_ptr(), 3);
62     }
63 }