'use strict'; module.exports = { affine_dialect : $ => prec.right(choice( seq('affine.apply', field('operand', seq($.attribute, $._dim_and_symbol_use_list)), field('attributes', optional($.attribute))), // operation ::= `affine.delinearize_index` $linear_index // `into` ` ` // `(` $basis `)` attr-dict `:` // type($multi_index) seq('affine.delinearlize_index', field('operand', $.value_use), 'into', field('basis', $._value_use_list_parens), field('attributes', optional($.attribute)), field('return', $._type_annotation)), // operation ::= `affine.dma_start` ssa-use `[` // multi-dim-affine-map-of-ssa-ids `]`, // `[` multi-dim-affine-map-of-ssa-ids `]`, // `[` multi-dim-affine-map-of-ssa-ids `]`, // ssa-use `:` memref-type seq(choice('affine.dma_start', 'affine.dma_wait'), field('operands', seq($.value_use, $._multi_dim_affine_expr_sq, repeat(seq(',', $.value_use, $._multi_dim_affine_expr_sq)))), ',', field('numElements', $._value_use_list), field('return', $._type_annotation)), // operation ::= `affine.for` ssa-id `=` lower-bound `to` // upper-bound // (`step` integer-literal)? `{` op* `}` seq('affine.for', field('iv', $.value_use), '=', field('lowerBound', seq(optional(token('max')), $._bound)), token('to'), field('upperBound', seq(optional(token('min')), $._bound)), field('step', optional(seq(token('step'), $.integer_literal))), field('iter_args', optional(seq(token('iter_args'), $._value_assignment_list))), field('return', optional($._function_return)), field('body', $.region), field('attributes', optional($.attribute))), // operation ::= `affine.if` if-op-cond `{` op* `}` // (`else` `{` op* `}`)? if-op-cond ::= integer-set-attr // dim-and-symbol-use-list seq('affine.if', field('condition', seq($.attribute, $._dim_and_symbol_use_list)), field('return', optional($._function_return)), field('trueblk', $.region), field('falseblk', optional(seq(token('else'), $.region))), field('attributes', optional($.attribute))), // operation ::= `affine.load` ssa-use `[` // multi-dim-affine-map-of-ssa-ids `]` // `:` memref-type seq(choice('affine.load', 'affine.vector_load'), field('operand', $.value_use), field('multiDimAffineMap', $._multi_dim_affine_expr_sq), field('return', $._type_annotation)), // operation ::= `affine.min` affine-map-attribute // dim-and-symbol-use-list seq(choice('affine.min', 'affine.max'), field('operand', seq($.attribute, $._dim_and_symbol_use_list))), seq('affine.parallel', field('iv', $._value_use_list_parens), '=', field('lowerBound', $._multi_dim_affine_expr_parens), token('to'), field('upperBound', $._multi_dim_affine_expr_parens), field('step', optional(seq(token('step'), $._multi_dim_affine_expr_parens))), field('reduce', optional(seq(token('reduce'), '(', $.string_literal, repeat(seq(',', $.string_literal)), ')'))), field('return', optional($._function_return)), field('body', $.region)), seq('affine.prefetch', field('source', $.value_use), field('indices', optional($._multi_dim_affine_expr_sq)), ',', field('isWrite', $.isWrite_attr), ',', field('localityHint', $.localityHint_attr), ',', field('isDataCache', $.isDataCache_attr), field('attributes', optional($.attribute)), field('return', $._type_annotation)), // operation ::= `affine.store` ssa-use, ssa-use `[` // multi-dim-affine-map-of-ssa-ids `]` // `:` memref-type seq(choice('affine.store', 'affine.vector_store'), field('source', $.value_use), ',', field('destination', $.value_use), field('multiDimAffineMap', $._multi_dim_affine_expr_sq), field('return', $._type_annotation)), // operation ::= `affine.yield` attr-dict ($operands^ `:` // type($operands))? seq('affine.yield', field('attributes', optional($.attribute)), field('results', optional($._value_use_type_list))))) }