# Generate and Inspect IREE Executables

In this doc, we explain the process of generating the IREE executables and
inspecting the excutables with various tools.

## Generate IREE executables

IREE's main codegen tools are
[iree-opt](https://github.com/openxla/iree/blob/main/tools/iree-opt-main.cc)
(generate MLIR representations) and
[iree-compiler](https://github.com/openxla/iree/blob/main/tools/iree-compile-main.cc)
(generate the IREE bytecode modules). IREE codegen flow is based on LLVM and
MLIR, so it utilizes the typical LLVM flags to define the machine targets. For
example, to generate the IREE bytecode module from a vector multiply MLIR:

```bash
${CACHE}/iree_compiler/install/bin/iree-compile \
    --iree-hal-target-backends=llvm-cpu \
    --iree-llvmcpu-target-triple=riscv32-pc-linux-elf \
    --iree-llvmcpu-target-cpu=generic-rv32 \
    --iree-llvmcpu-target-cpu-features="+m,+f" \
    --iree-llvmcpu-target-abi=ilp32 \
    --iree-llvmcpu-embedded-linker-path=${CACHE}/iree_compiler/install/bin/iree-lld \
    ${ROOTDIR}/toolchain/iree/samples/simple_embedding/simple_embedding_test.mlir \
    -o /tmp/simple_mul-llvm_aot.vmfb

```

With the options of:

* iree-hal-target-backends: The HAL device (library + dispatcher) target for
the workload. In Shodan, the supported targets are:
  * llvm-cpu: the library for LLVM ahead-of-time (AOT) compilation.
  * vmvx
* iree-llvmcpu-target-triple: The flag is populated to LLVM target triple.
* iree-llvmcpu-target-cpu: The flag populated to LLVM target cpu. It can be
pre-defined cpu targets or the generic ones
([link](https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/RISCV/RISCVProcessors.td)).
* iree-llvmcpu-target-cpu-features: The flag is populated to LLVM target features for
extra CPU extensions. For RISC-V, it can include the typical ISA extensions,
such as multiplication/division, atomic, floating point, and compression ISA
support.
__For the vector extension, it can be enabled with "+v"__.
* iree-llvmcpu-target-abi: The flag is polulated to LLVM target abi.
* iree-llvmcpu-embedded-linker-path: Linker for the device executable. It is
  recommanded to use iree-lld from the IREE compiler release.

Some extra options:

* iree-llvmcpu-keep-linker-artifacts: Aside from the generated bytecode flatbuffer
(with [schema](https://github.com/openxla/iree/blob/main/runtime/src/iree/schemas/bytecode_module_def.fbs)),
the intermediate linker is generated at `/tmp/<module_name>_linked_<hal_target>-xxxxxx.so`.
(the exact path is printed in the stdout).
* iree-vm-emit-polyglot-zip: Instead of the previous flag, by enabling this flag
you can extract the .so from the .vmfb file with 7z

```bash
7z e -aoa -bb0 <vmfb> -y
```

* riscv-v-fixed-length-vector-lmul-max: If the
vector extension is enabled in `iree-llvmcpu-target-cpu-features`, the RVV VLS
(vector length specific) code will be generated with the vector length specified
by this option.
* iree-llvmcpu-debug-symbols: Add the debug information in the executable. Setting
this to `false` at the production executable can reduce the workload size.

## Inspect IREE executables

To render the bytecode flatbuffer in a text file, the `iree-dump-module` tool
can print out the content based on the descriptors in the schema, including the
weights in the ML model.

```bash
${CACHE}/iree_compiler/install/bin/iree-dump-module <vmfb file>
```

With the linker artifact enabled, The `.so` file contends the dispatch functions
of the workload, and the user can use the objdump in the RISC-V toolchain to
retrieve the assembler content. For example, to render the executable (.text)
segment

```bash
${CACHE}/toolchain_iree_rv32imf/bin/riscv32-unknown-elf-objdump -d <linker artifact>
```

Note:

* If you use llvm-objdump to retrieve the assembler content, the RVV ISAs could
  be rendered as unknown.

## Inspect IREE IR lowering

Use `iree-opt` to check the IR output

```bash
${CACHE}/iree_compiler/install/bin/iree-opt \
  --mlir-print-ir-after-all \
  --iree-transformation-pipeline \
  --iree-hal-target-backends=llvm-cpu \
  --iree-llvmcpu-target-triple=riscv32-pc-linux-elf \
  --iree-llvmcpu-target-cpu=generic-rv32 \
  --iree-llvmcpu-target-cpu-features="+m,+f" \
  --iree-llvmcpu-target-abi=ilp32 \
  <MLIR input>
```
