[mlir][spirv] Add basic definitions for supporting availability
authorLei Zhang <antiagainst@google.com>
Fri, 27 Dec 2019 21:24:33 +0000 (16:24 -0500)
committerLei Zhang <antiagainst@google.com>
Fri, 27 Dec 2019 21:25:09 +0000 (16:25 -0500)
commitb30d87a90ba983d76f8a6cd334ac38244bbf9ded
tree1de94d9458e552ff6c90dadb621f66521659ca1d
parentc3dbd782f1e0578c7ebc342f2e92f54d9644cff7
[mlir][spirv] Add basic definitions for supporting availability

SPIR-V has a few mechanisms to control op availability: version,
extension, and capabilities. These mechanisms are considered as
different availability classes.

This commit introduces basic definitions for modelling SPIR-V
availability classes. Specifically, an `Availability` class is
added to SPIRVBase.td, along with two subclasses: MinVersion
and MaxVersion for versioning. SPV_Op is extended to take a
list of `Availability`. Each `Availability` instance carries
information for generating op interfaces for the corresponding
availability class and also the concrete availability
requirements.

With the availability spec on ops, we can now auto-generate the
op interfaces of all SPIR-V availability classes and also
synthesize the op's implementations of these interfaces. The
interface generation is done via new TableGen backends
-gen-avail-interface-{decls|defs}. The op's implementation is
done via -gen-spirv-avail-impls.

Differential Revision: https://reviews.llvm.org/D71930
15 files changed:
mlir/include/mlir/Dialect/SPIRV/CMakeLists.txt
mlir/include/mlir/Dialect/SPIRV/SPIRVAtomicOps.td
mlir/include/mlir/Dialect/SPIRV/SPIRVAvailability.td [new file with mode: 0644]
mlir/include/mlir/Dialect/SPIRV/SPIRVBase.td
mlir/include/mlir/Dialect/SPIRV/SPIRVNonUniformOps.td
mlir/include/mlir/Dialect/SPIRV/SPIRVOps.h
mlir/lib/Dialect/SPIRV/CMakeLists.txt
mlir/lib/Dialect/SPIRV/SPIRVOps.cpp
mlir/test/CMakeLists.txt
mlir/test/Dialect/CMakeLists.txt [new file with mode: 0644]
mlir/test/Dialect/SPIRV/CMakeLists.txt [new file with mode: 0644]
mlir/test/Dialect/SPIRV/TestAvailability.cpp [new file with mode: 0644]
mlir/test/Dialect/SPIRV/availability.mlir [new file with mode: 0644]
mlir/tools/mlir-opt/CMakeLists.txt
mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp