19#define DEBUG_TYPE "complex-to-spirv-pattern"
29struct ConstantOpPattern final : OpConversionPattern<complex::ConstantOp> {
33 matchAndRewrite(complex::ConstantOp constOp, OpAdaptor adaptor,
34 ConversionPatternRewriter &rewriter)
const override {
36 getTypeConverter()->convertType<ShapedType>(constOp.getType());
38 return rewriter.notifyMatchFailure(constOp,
39 "unable to convert result type");
41 rewriter.replaceOpWithNewOp<spirv::ConstantOp>(
48struct CreateOpPattern final : OpConversionPattern<complex::CreateOp> {
52 matchAndRewrite(complex::CreateOp createOp, OpAdaptor adaptor,
53 ConversionPatternRewriter &rewriter)
const override {
54 Type spirvType = getTypeConverter()->convertType(createOp.getType());
56 return rewriter.notifyMatchFailure(createOp,
57 "unable to convert result type");
59 rewriter.replaceOpWithNewOp<spirv::CompositeConstructOp>(
60 createOp, spirvType, adaptor.getOperands());
65struct ReOpPattern final : OpConversionPattern<complex::ReOp> {
69 matchAndRewrite(complex::ReOp reOp, OpAdaptor adaptor,
70 ConversionPatternRewriter &rewriter)
const override {
71 Type spirvType = getTypeConverter()->convertType(reOp.getType());
73 return rewriter.notifyMatchFailure(reOp,
"unable to convert result type");
75 rewriter.replaceOpWithNewOp<spirv::CompositeExtractOp>(
81struct ImOpPattern final : OpConversionPattern<complex::ImOp> {
85 matchAndRewrite(complex::ImOp imOp, OpAdaptor adaptor,
86 ConversionPatternRewriter &rewriter)
const override {
87 Type spirvType = getTypeConverter()->convertType(imOp.getType());
89 return rewriter.notifyMatchFailure(imOp,
"unable to convert result type");
91 rewriter.replaceOpWithNewOp<spirv::CompositeExtractOp>(
107 patterns.add<ConstantOpPattern, CreateOpPattern, ReOpPattern, ImOpPattern>(
108 typeConverter, context);
static DenseElementsAttr get(ShapedType type, ArrayRef< Attribute > values)
Constructs a dense elements attribute from an array of element values.
MLIRContext is the top-level object for a collection of MLIR operations.
Type conversion from builtin types to SPIR-V types for shader interface.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
Include the generated interface declarations.
const FrozenRewritePatternSet & patterns
void populateComplexToSPIRVPatterns(const SPIRVTypeConverter &typeConverter, RewritePatternSet &patterns)
Appends to a pattern list additional patterns for translating Complex ops to SPIR-V ops.