[mlir] Use the interface-based translation for LLVM "intrinsic" dialects
authorAlex Zinenko <zinenko@google.com>
Fri, 12 Feb 2021 11:53:27 +0000 (12:53 +0100)
committerAlex Zinenko <zinenko@google.com>
Mon, 15 Feb 2021 13:43:07 +0000 (14:43 +0100)
commit176379e0c8f9dbde2b357fb3b6a6802b83282e71
treeb68a7fd97b563f767f0ea56d7db9875dc9ec21dd
parent2d728bbff5c688284b8b8306ecfd3000b0ab8bb1
[mlir] Use the interface-based translation for LLVM "intrinsic" dialects

Port the translation of five dialects that define LLVM IR intrinsics
(LLVMAVX512, LLVMArmNeon, LLVMArmSVE, NVVM, ROCDL) to the new dialect
interface-based mechanism. This allows us to remove individual translations
that were created for each of these dialects and just use one common
MLIR-to-LLVM-IR translation that potentially supports all dialects instead,
based on what is registered and including any combination of translatable
dialects. This removal was one of the main goals of the refactoring.

To support the addition of GPU-related metadata, the translation interface is
extended with the `amendOperation` function that allows the interface
implementation to post-process any translated operation with dialect attributes
from the dialect for which the interface is implemented regardless of the
operation's dialect. This is currently applied to "kernel" functions, but can
be used to construct other metadata in dialect-specific ways without
necessarily affecting operations.

Depends On D96591, D96504

Reviewed By: nicolasvasilache

Differential Revision: https://reviews.llvm.org/D96592
48 files changed:
mlir/examples/standalone/test/Standalone/standalone-translate.mlir
mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td
mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
mlir/include/mlir/InitAllTranslations.h
mlir/include/mlir/Target/LLVMIR.h
mlir/include/mlir/Target/LLVMIR/Dialect/LLVMAVX512/LLVMAVX512ToLLVMIRTranslation.h [new file with mode: 0644]
mlir/include/mlir/Target/LLVMIR/Dialect/LLVMArmNeon/LLVMArmNeonToLLVMIRTranslation.h [new file with mode: 0644]
mlir/include/mlir/Target/LLVMIR/Dialect/LLVMArmSVE/LLVMArmSVEToLLVMIRTranslation.h [new file with mode: 0644]
mlir/include/mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h
mlir/include/mlir/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.h [new file with mode: 0644]
mlir/include/mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h
mlir/include/mlir/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.h [new file with mode: 0644]
mlir/include/mlir/Target/LLVMIR/LLVMTranslationInterface.h
mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h
mlir/include/mlir/Target/NVVMIR.h [deleted file]
mlir/include/mlir/Target/ROCDLIR.h [deleted file]
mlir/lib/Target/CMakeLists.txt
mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp
mlir/lib/Target/LLVMIR/ConvertToNVVMIR.cpp [deleted file]
mlir/lib/Target/LLVMIR/ConvertToROCDLIR.cpp [deleted file]
mlir/lib/Target/LLVMIR/Dialect/CMakeLists.txt
mlir/lib/Target/LLVMIR/Dialect/LLVMAVX512/CMakeLists.txt [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/LLVMAVX512/LLVMAVX512ToLLVMIRTranslation.cpp [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/LLVMArmNeon/CMakeLists.txt [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/LLVMArmNeon/LLVMArmNeonToLLVMIRTranslation.cpp [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/LLVMArmSVE/CMakeLists.txt [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/LLVMArmSVE/LLVMArmSVEToLLVMIRTranslation.cpp [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
mlir/lib/Target/LLVMIR/Dialect/NVVM/CMakeLists.txt [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/ROCDL/CMakeLists.txt [new file with mode: 0644]
mlir/lib/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.cpp [new file with mode: 0644]
mlir/lib/Target/LLVMIR/LLVMAVX512Intr.cpp [deleted file]
mlir/lib/Target/LLVMIR/LLVMArmNeonIntr.cpp [deleted file]
mlir/lib/Target/LLVMIR/LLVMArmSVEIntr.cpp [deleted file]
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
mlir/test/Target/arm-neon.mlir
mlir/test/Target/arm-sve.mlir
mlir/test/Target/avx512.mlir
mlir/test/Target/nvvmir.mlir
mlir/test/Target/rocdl.mlir
mlir/test/lib/Transforms/CMakeLists.txt
mlir/test/lib/Transforms/TestConvertGPUKernelToCubin.cpp
mlir/test/lib/Transforms/TestConvertGPUKernelToHsaco.cpp
mlir/tools/mlir-cuda-runner/mlir-cuda-runner.cpp
mlir/tools/mlir-rocm-runner/mlir-rocm-runner.cpp
mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp