/src/test/codegen/intrinsics/prefetch.rs

https://gitlab.com/rust-lang/rust · Rust · 63 lines · 40 code · 6 blank · 17 comment · 0 complexity · 5b321c74dd1693b57ca091c12b813036 MD5 · raw file

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