118 lines
6.3 KiB
JavaScript
118 lines
6.3 KiB
JavaScript
'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)))))
|
|
}
|