'use strict';
module.exports = {
memref_dialect : $ => choice(
// operation ::= `memref.assume_alignment` $memref `,`
// $alignment attr-dict `:` type($memref)
seq('memref.assume_alignment',
field('memref', $.value_use), ',',
field('alignment', $.integer_literal),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.alloc` `(`$dynamicSizes`)` (`` `[`
// $symbolOperands^ `]`)? attr-dict
// `:` type($memref)
// operation ::= `memref.alloca` `(`$dynamicSizes`)` (``
// `[` $symbolOperands^ `]`)? attr-dict
// `:` type($memref)
seq(choice('memref.alloc', 'memref.alloca'),
field('dynamicSizes', $._value_use_list_parens),
field('symbolOperands', optional($._dense_idx_list)),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.cast` $source attr-dict `:`
// type($source) `to` type($dest)
seq('memref.cast', field('in', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.copy` $source `,` $target
// attr-dict
// `:` type($source) `to` type($target)
seq('memref.copy', field('source', $.value_use), ',',
field('target', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.collapse_shape` $src
// $reassociation attr-dict
// `:` type($src) `into` type($result)
// operation ::= `memref.expand_shape` $src $reassociation
// attr-dict
// `:` type($src) `into` type($result)
seq(choice('memref.collapse_shape', 'memref.expand_shape'),
field('source', $.value_use),
field('reassociation', $.nested_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.dealloc` $memref attr-dict `:`
// type($memref)
seq('memref.dealloc', field('memref', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.dim` attr-dict $source `,` $index
// `:` type($source)
seq('memref.dim',
field('attributes', optional($.attribute)),
field('source', $.value_use), ',',
field('index', $.value_use),
field('return', $._type_annotation)),
// operation ::= `memref.load` $memref `[` $indices `]`
// attr-dict `:` type($memref)
seq('memref.load',
field('memref', seq($.value_use, $._dense_idx_list)),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
seq('memref.prefetch', field('source', $.value_use),
field('indices', optional($._dense_idx_list)), ',',
field('isWrite', $.isWrite_attr), ',',
field('localityHint', $.localityHint_attr), ',',
field('isDataCache', $.isDataCache_attr),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.rank` $memref attr-dict `:`
// type($memref)
seq('memref.rank', field('memref', $.value_use),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.realloc` $source (`(`
// $dynamicResultSize^ `)`)? attr-dict
// `:` type($source) `to` type(results)
seq('memref.realloc', field('source', $.value_use),
field('dynamicResultSize',
optional($._value_use_list_parens)),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.reinterpret_cast` $source `to`
// `offset` `` `:`
// custom<DynamicIndexList>($offsets,
// $static_offsets)
// `` `,` `sizes` `` `:`
// custom<DynamicIndexList>($sizes,
// $static_sizes)
// `` `,` `strides` `` `:`
// custom<DynamicIndexList>($strides,
// $static_strides) attr-dict `:`
// type($source) `to` type($result)
seq('memref.reinterpret_cast',
field('source', $.value_use), token('to'),
field('offset', seq(token('offset'), ':',
$._dense_idx_list, ',')),
field('sizes', seq(token('sizes'), ':',
$._dense_idx_list, ',')),
field('strides',
seq(token('strides'), ':', $._dense_idx_list)),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.reshape` $source `(` $shape `)`
// attr-dict
// `:` functional-type(operands, results)
seq('memref.reshape', field('source', $.value_use),
field('shape', seq('(', $.value_use, ')')),
field('attributes', optional($.attribute)),
field('return', $._function_type_annotation)),
// operation ::= `memref.store` $value `,` $memref `[`
// $indices `]` attr-dict
// `:` type($memref)
seq('memref.store', field('source', $.value_use), ',',
field('destination', $.value_use),
field('indices', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.subview` $source ``
// custom<DynamicIndexList>($offsets,
// $static_offsets)
// custom<DynamicIndexList>($sizes,
// $static_sizes)
// custom<DynamicIndexList>($strides,
// $static_strides) attr-dict `:`
// type($source) `to` type($result)
seq('memref.subview', field('source', $.value_use),
field('offsets', $._dense_idx_list),
field('sizes', $._dense_idx_list),
field('strides', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)),
// operation ::= `memref.view` $source `[` $byte_shift `]`
// `` `[` $sizes `]` attr-dict
// `:` type($source) `to` type(results)
seq('memref.view', field('source', $.value_use),
field('byte_shift', $._dense_idx_list),
field('sizes', $._dense_idx_list),
field('attributes', optional($.attribute)),
field('return', $._type_annotation)))
}