121 lines
6.7 KiB
JavaScript
121 lines
6.7 KiB
JavaScript
'use strict';
|
|
|
|
module.exports = {
|
|
vector_dialect : $ => prec.right(choice(
|
|
// operation ::= `vector.bitcast` $source attr-dict `:`
|
|
// type($source) `to` type($result) operation ::=
|
|
// `vector.broadcast` $source attr-dict `:` type($source)
|
|
// `to` type($vector) operation ::= `vector.shape_cast`
|
|
// $source attr-dict `:` type($source) `to` type($result)
|
|
// operation ::= `vector.type_cast` $memref attr-dict `:`
|
|
// type($memref) `to` type($result)
|
|
seq(choice('vector.bitcast', 'vector.broadcast',
|
|
'vector.shape_cast', 'vector.type_cast'),
|
|
field('in', $.value_use),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.constant_mask` $mask_dim_sizes
|
|
// attr-dict `:` type(results)
|
|
seq('vector.constant_mask',
|
|
field('mask', $._dense_idx_list),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.create_mask` $operands attr-dict
|
|
// `:` type(results)
|
|
seq('vector.create_mask',
|
|
field('operands', $._value_use_list),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.extract` $vector `` $position
|
|
// attr-dict `:` type($vector) operation ::= `vector.load`
|
|
// $base `[` $indices `]` attr-dict
|
|
// `:` type($base) `,` type($nresult)
|
|
// operation ::= `vector.scalable.extract` $source `[` $pos
|
|
// `]` attr-dict
|
|
// `:` type($res) `from` type($source)
|
|
seq(choice('vector.extract', 'vector.load',
|
|
'vector.scalable.extract'),
|
|
field('operand', $.value_use),
|
|
field('indices', $._dense_idx_list),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.fma` $lhs `,` $rhs `,` $acc
|
|
// attr-dict `:` type($lhs)
|
|
seq('vector.fma', field('lhs', $.value_use), ',',
|
|
field('rhs', $.value_use), ',',
|
|
field('acc', $.value_use),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.flat_transpose` $matrix attr-dict
|
|
// `:` type($matrix) `->` type($res)
|
|
seq('vector.flat_transpose', field('matrix', $.value_use),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._function_type_annotation)),
|
|
|
|
// operation ::= `vector.insert` $source `,` $dest
|
|
// $position attr-dict
|
|
// `:` type($source) `into` type($dest)
|
|
// operation ::= `vector.scalable.insert` $source `,` $dest
|
|
// `[` $pos `]` attr-dict
|
|
// `:` type($source) `into` type($dest)
|
|
// operation ::= `vector.shuffle` operands $mask attr-dict
|
|
// `:` type(operands) operation ::= `vector.store`
|
|
// $valueToStore `,` $base `[` $indices `]` attr-dict
|
|
// `:` type($base) `,` type($valueToStore)
|
|
seq(choice('vector.insert', 'vector.scalable.insert',
|
|
'vector.shuffle', 'vector.store'),
|
|
field('source', $.value_use), ',',
|
|
field('destination', $.value_use),
|
|
field('position', $._dense_idx_list),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.insert_strided_slice` $source `,`
|
|
// $dest attr-dict
|
|
// `:` type($source) `into` type($dest)
|
|
seq('vector.insert_strided_slice',
|
|
field('source', $.value_use), ',',
|
|
field('destination', $.value_use),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.matrix_multiply` $lhs `,` $rhs
|
|
// attr-dict
|
|
// `:` `(` type($lhs) `,` type($rhs) `)`
|
|
// `->` type($res)
|
|
seq('vector.matrix_multiply', field('lhs', $.value_use),
|
|
',', field('rhs', $.value_use),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._function_type_annotation)),
|
|
|
|
// operation ::= `vector.print` $source attr-dict `:`
|
|
// type($source)
|
|
seq(choice('vector.print', 'vector.splat'),
|
|
field('operand', $.value_use),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
seq('vector.transfer_read',
|
|
field('source', seq($.value_use, $._dense_idx_list)),
|
|
field('paddingMask', repeat(seq(',', $.value_use))),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
seq('vector.transfer_write', field('vector', $.value_use),
|
|
',',
|
|
field('source', seq($.value_use, $._dense_idx_list)),
|
|
field('mask', optional(seq(',', $.value_use))),
|
|
field('attributes', optional($.attribute)),
|
|
field('return', $._type_annotation)),
|
|
|
|
// operation ::= `vector.yield` attr-dict ($operands^ `:`
|
|
// type($operands))?
|
|
seq('vector.yield',
|
|
field('attributes', optional($.attribute)),
|
|
field('results', optional($._value_use_type_list)))))
|
|
}
|