[mlir][AMDGPU] 8-bit float usage in the AMDGPU dialect
authorKrzysztof Drewniak <Krzysztof.Drewniak@amd.com>
Tue, 20 Dec 2022 15:32:25 +0000 (15:32 +0000)
committerKrzysztof Drewniak <Krzysztof.Drewniak@amd.com>
Wed, 15 Feb 2023 16:46:08 +0000 (16:46 +0000)
commit22f0c7a45149a55e643665c4cb69faa960e3c565
tree68e5d1ece473d4ff5bd6ce37c0ca4db0f0d84b1c
parent50ef8673a378d04fd109e2021a1539486ae732bf
[mlir][AMDGPU] 8-bit float usage in the AMDGPU dialect

Upcoming AMD hardware will include functions that accept 8-bit floats.
Specifically, there are MFMA instructions that accept 8-bit floats,
either using the same or mixed formats. This patch adds MLIR wrappers
for these intrinsics and explicitly adds support for 8-bit floats in
the gpu-to-rocdl conversion by way of amdgpu-to-rocdl.

Since LLVM does not have f8 types, when targeting LLVM for compilation
on an AMD GPU, both f8 types used on AMD hardware (f8E5M2FNUZ and
f8E4M3FNUZ) are rewritten to i8.

This patch also relaxes the restriction that the types of both source
operands to a amdgpu.mfma instructions match exactly, as this is not
necessarily required for the bf8 (f8E5M2FNUZ) and fp8 (f8E4M3FNUZ)
instructions. In addition, since the buffer_{load,store} operations
maintain a whitelist of permitted types, we add the relevant f8 types
to that list.

This patch does not add any implementations of arithmetic operations
for f8 types.

Reviewed By: jakeh-gc

Differential Revision: https://reviews.llvm.org/D143956
mlir/include/mlir/Dialect/AMDGPU/AMDGPU.td
mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp
mlir/lib/Dialect/AMDGPU/IR/AMDGPUDialect.cpp
mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir
mlir/test/Conversion/AMDGPUToROCDL/mfma.mlir
mlir/test/Dialect/AMDGPU/invalid.mlir
mlir/test/Dialect/AMDGPU/ops.mlir
mlir/test/Target/LLVMIR/rocdl.mlir