MLIR 23.0.0git
TosaToSPIRVTosa.h
Go to the documentation of this file.
1//===-- TosaToSPIRVTosa.h - TOSA to SPIR-V Graph/TOSA patterns --*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Provides pass and patterns to lower TOSA IR to SPIR-V Graph/TOSA
10// operations.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MLIR_CONVERSION_TOSATOSPIRVTOSA_TOSATOSPIRVTOSA_H
15#define MLIR_CONVERSION_TOSATOSPIRVTOSA_TOSATOSPIRVTOSA_H
16
18#include "mlir/Pass/Pass.h"
19#include "llvm/ADT/StringMap.h"
20#include "llvm/ADT/StringRef.h"
21
22#include <cstdint>
23
24namespace mlir {
25
26#define GEN_PASS_DECL_TOSATOSPIRVTOSAMARKGRAPHCONSTANTS
27#define GEN_PASS_DECL_TOSATOSPIRVTOSA
28#include "mlir/Conversion/Passes.h.inc"
29
30namespace tosa {
31
32// Allows users to specify descriptor sets and binding ids on the source
33// function inputs and outputs. Use a source-side GraphARM attribute because
34// `spirv.interface_var_abi` is verified by the SPIR-V dialect before this
35// conversion runs, and result attrs are only accepted on `spirv.ARM.Graph`.
36constexpr llvm::StringLiteral graphARMInterfaceVarABIAttrName =
37 "grapharm.interface_var_abi";
38
39// Marks a `tosa.const` or `tosa.const_shape` as a SPIR-V Graph constant.
40// The conversion pass lowers marked constants to `spirv.ARM.GraphConstant`.
41constexpr llvm::StringLiteral graphARMGraphConstantIdAttrName =
42 "grapharm.graph_constant_id";
43
44std::unique_ptr<Pass> createTosaToSPIRVTosaMarkGraphConstants();
45std::unique_ptr<Pass> createTosaToSPIRVTosa();
46
48
50 MLIRContext *context, spirv::ResourceLimitsAttr limits = {},
51 spirv::ClientAPI clientAPI = spirv::ClientAPI::Unknown,
52 spirv::Vendor vendorID = spirv::Vendor::Unknown,
53 spirv::DeviceType deviceType = spirv::DeviceType::Unknown,
54 uint32_t deviceID = spirv::TargetEnvAttr::kUnknownDeviceID);
55
57 SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns,
58 spirv::TargetEnvAttr targetAttr);
60 SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns);
62 SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns,
63 llvm::StringMap<int32_t> domainToOpcode);
64
65} // namespace tosa
66} // namespace mlir
67
68#endif // MLIR_CONVERSION_TOSATOSPIRVTOSA_TOSATOSPIRVTOSA_H
MLIRContext is the top-level object for a collection of MLIR operations.
Definition MLIRContext.h:63
Type conversion from builtin types to SPIR-V types for shader interface.
An attribute that specifies the target version, allowed extensions and capabilities,...
static constexpr uint32_t kUnknownDeviceID
ID for unknown devices.
An attribute that specifies the SPIR-V (version, capabilities, extensions) triple.
std::unique_ptr< Pass > createTosaToSPIRVTosaMarkGraphConstants()
constexpr llvm::StringLiteral graphARMGraphConstantIdAttrName
spirv::TargetEnvAttr constructTargetEnvAttrWithCapExtDefaults(MLIRContext *context, spirv::ResourceLimitsAttr limits={}, spirv::ClientAPI clientAPI=spirv::ClientAPI::Unknown, spirv::Vendor vendorID=spirv::Vendor::Unknown, spirv::DeviceType deviceType=spirv::DeviceType::Unknown, uint32_t deviceID=spirv::TargetEnvAttr::kUnknownDeviceID)
spirv::VerCapExtAttr getDefaultVerCapExtAttr(MLIRContext *context)
void populateTosaToSPIRVTosaConversionPatterns(SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns, spirv::TargetEnvAttr targetAttr)
constexpr llvm::StringLiteral graphARMInterfaceVarABIAttrName
std::unique_ptr< Pass > createTosaToSPIRVTosa()
void populateTosaToSPIRVTosaOpsConversionPatterns(SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns)
void populateTosaToSPIRVTosaCustomConversionPatterns(SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns, llvm::StringMap< int32_t > domainToOpcode)
Include the generated interface declarations.