llvm-mca-macros 0.1.0

Procedural macros for generating `llvm-mca` marker comments
Documentation
# `llvm-mca-macros`

Procedural macros to generate marker comments for [LLVM's Machine Code Analyzer](https://llvm.org/docs/CommandGuide/llvm-mca.html).

These macros generate markers after the function epilogue and before the function prologue. If more granularity is needed, you can use the `llvm-mca` crate instead.

## Usage

By default, `llvm_mca` will disable inlining. For example, this:

```rust
use llvm_mca_macros::llvm_mca;

#[llvm_mca]
fn quadruple(x: u32) -> u32 {
    let doubled = x + x;
    doubled + doubled
}
```

will generate the equivalent of:

```rust
#[inline(never)]
fn quadruple(x: u32) -> u32 {
    // emit `LLVM-MCA-BEGIN` marker
    let ret = {
        let doubled = x + x;
        doubled + doubled
    };
    // emit `LLVM-MCA-END` marker
    ret
}
```

If inlining is desired, the `allow_inline` attribute can be specified:

```rust
use llvm_mca_macros::llvm_mca;

#[llvm_mca(allow_inline)]
fn quadruple(x: u32) -> u32 {
    let doubled = x + x;
    doubled + doubled
}
```

This will generate the equivalent of:

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

# Generating assembly

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

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

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