CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
48 lines
2.1 KiB
Markdown
48 lines
2.1 KiB
Markdown
The EmitC dialect allows to convert operations from other MLIR dialects to EmitC
|
|
ops. Those can be translated to C/C++ via the Cpp emitter.
|
|
|
|
The following convention is followed:
|
|
|
|
* If template arguments are passed to an `emitc.call_opaque` operation, C++ is
|
|
generated.
|
|
* If tensors are used, C++ is generated.
|
|
* If multiple return values are used within in a functions or an
|
|
`emitc.call_opaque` operation, C++11 is required.
|
|
* If floating-point type template arguments are passed to an `emitc.call_opaque`
|
|
operation, C++20 is required.
|
|
* If `ssize_t` is used, then the code requires the POSIX header `sys/types.h`
|
|
or any of the C++ headers in which the type is defined.
|
|
* If `_Float16` is used, the code requires the support of C additional
|
|
floating types.
|
|
* If `__bf16` is used, the code requires a compiler that supports it, such as
|
|
GCC or Clang.
|
|
* If `emitc.array` with a dimension of size zero is used, then the code
|
|
requires [a GCC extension](https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html).
|
|
* If `aligned_alloc` is passed to an `emitc.call_opaque` operation, then C++17
|
|
or C11 is required.
|
|
* Else the generated code is compatible with C99.
|
|
|
|
These restrictions are neither inherent to the EmitC dialect itself nor to the
|
|
Cpp emitter and therefore need to be considered while implementing conversions.
|
|
|
|
Type conversions are provided for the MLIR type `index` into the unsigned `size_t`
|
|
type and its signed counterpart `ptrdiff_t`. Conversions between these two types
|
|
are only valid if the `index`-typed values are within
|
|
`[PTRDIFF_MIN, PTRDIFF_MAX]`.
|
|
|
|
After the conversion, C/C++ code can be emitted with `mlir-translate`. The tool
|
|
supports translating MLIR to C/C++ by passing `-mlir-to-cpp`. Furthermore, code
|
|
with variables declared at top can be generated by passing the additional
|
|
argument `-declare-variables-at-top`.
|
|
|
|
Besides operations part of the EmitC dialect, the Cpp targets supports
|
|
translating the following operations:
|
|
|
|
* 'cf' Dialect
|
|
* `cf.br`
|
|
* `cf.cond_br`
|
|
* 'func' Dialect
|
|
* `func.call`
|
|
* `func.func`
|
|
* `func.return`
|