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}