1 unstable release

0.1.0 Nov 7, 2024

#150 in Profiling

MIT/Apache

5KB

llvm-mca

Macros to generate marker comments for LLVM's Machine Code Analyzer.

The llvm_mca_begin! and llvm_mca_end! macros will emit LLVM-MCA-BEGIN and LLVM-MCA-END markers, respectively.

If you want to automatically add markers to the beginning and end of a function, you can use the llvm-mca-macros crate instead.

Usage

For example, this:

use llvm_mca::{llvm_mca_begin, llvm_mca_end};

fn quadruple(x: u32) -> u32 {
    llvm_mca_begin!();
    let doubled = x + x;
    llvm_mca_end!();
    doubled + doubled
}

will generate the equivalent of:

fn quadruple(x: u32) -> u32 {
    // emit `LLVM-MCA-BEGIN` marker
    let doubled = x + x;
    // emit `LLVM-MCA-END` marker
    doubled + doubled
}

Naming regions

Regions can also be named. This:

use llvm_mca::{llvm_mca_begin, llvm_mca_end};

fn quadruple(x: u32) -> u32 {
    llvm_mca_begin!("double");
    let doubled = x + x;
    llvm_mca_end!("double");
    doubled + doubled
}

will generated the equivalent of:

fn quadruple(x: u32) -> u32 {
    // emit `LLVM-MCA-BEGIN double` marker
    let doubled = x + x;
    // emit `LLVM-MCA-END double` marker
    doubled + doubled
}

See the Using Markers to Analyze Specific Code Blocks section of the LLVM docs for details about naming regions and how to nest them.

Generating assembly

You must set the RUSTFLAGS="--emit asm" option when building your project with cargo. For example:

RUSTFLAGS="--emit asm" cargo build --release

This will output assembly files in target/*/deps.

No runtime deps