llvm_mca/
lib.rs

1#![doc = include_str!("../README.md")]
2
3/// Emit an `LLVM-MCA-BEGIN` marker, with an optional name.
4///
5/// # Examples
6///
7/// ```
8/// use llvm_mca::llvm_mca_begin;
9///
10/// // An unnamed region: "LLVM-MCA-BEGIN"
11/// llvm_mca_begin!();
12/// // A named region: "LLVM-MCA-BEGIN my-region-name"
13/// llvm_mca_begin!("my-region-name");
14/// ```
15#[macro_export]
16macro_rules! llvm_mca_begin {
17    () => {
18        unsafe {
19            std::arch::asm!(";# LLVM-MCA-BEGIN", options(nostack));
20        }
21    };
22    ($name:literal) => {
23        unsafe {
24            std::arch::asm!(concat!(";# LLVM-MCA-BEGIN ", $name), options(nostack));
25        }
26    };
27}
28
29/// Emit an `LLVM-MCA-END` marker, with an optional name.
30///
31/// # Examples
32///
33/// ```
34/// use llvm_mca::llvm_mca_end;
35/// // An unnamed region: "LLVM-MCA-END"
36/// llvm_mca_end!();
37/// // A named region: "LLVM-MCA-END my-region-name"
38/// llvm_mca_end!("my-region-name");
39/// ```
40#[macro_export]
41macro_rules! llvm_mca_end {
42    () => {
43        unsafe {
44            std::arch::asm!(concat!(";# LLVM-MCA-END"), options(nostack));
45        }
46    };
47    ($name:literal) => {
48        unsafe {
49            std::arch::asm!(concat!(";# LLVM-MCA-END ", $name), options(nostack));
50        }
51    };
52}