79 lines · javascript
1'use strict';2 3module.exports = {4 linalg_dialect : $ => prec.right(choice(5 seq(choice(6 'linalg.batch_matmul',7 'linalg.batch_matvec',8 'linalg.batch_reduce_matmul', 'linalg.broadcast',9 'linalg.conv_1d_ncw_fcw', 'linalg.conv_1d_nwc_wcf',10 'linalg.conv_1d', 'linalg.conv_2d_nchw_fchw',11 'linalg.conv_2d_ngchw_fgchw',12 'linalg.conv_2d_nhwc_fhwc',13 'linalg.conv_2d_nhwc_hwcf',14 'linalg.conv_2d_nhwc_hwcf_q', 'linalg.conv_2d',15 'linalg.conv_3d_ndhwc_dhwcf',16 'linalg.conv_3d_ndhwc_dhwcf_q', 'linalg.conv_3d',17 'linalg.copy', 'linalg.depthwise_conv_1d_nwc_wc',18 'linalg.depthwise_conv_1d_nwc_wcm',19 'linalg.depthwise_conv_2d_nchw_chw',20 'linalg.depthwise_conv_2d_nhwc_hwc',21 'linalg.depthwise_conv_2d_nhwc_hwc_q',22 'linalg.depthwise_conv_2d_nhwc_hwcm',23 'linalg.depthwise_conv_2d_nhwc_hwcm_q',24 'linalg.depthwise_conv_3d_ndhwc_dhwc',25 'linalg.depthwise_conv_3d_ndhwc_dhwcm',26 'linalg.dot', 'linalg.elemwise_binary',27 'linalg.elemwise_unary', 'linalg.fill',28 'linalg.fill_rng_2d', 'linalg.matmul',29 'linalg.matmul_unsigned', 'linalg.matvec',30 'linalg.mmt4d', 'linalg.pooling_nchw_max',31 'linalg.pooling_nchw_sum',32 'linalg.pooling_ncw_max', 'linalg.pooling_ncw_sum',33 'linalg.pooling_ndhwc_max',34 'linalg.pooling_ndhwc_min',35 'linalg.pooling_ndhwc_sum',36 'linalg.pooling_nhwc_max',37 'linalg.pooling_nhwc_max_unsigned',38 'linalg.pooling_nhwc_min',39 'linalg.pooling_nhwc_min_unsigned',40 'linalg.pooling_nhwc_sum',41 'linalg.pooling_nwc_max',42 'linalg.pooling_nwc_max_unsigned',43 'linalg.pooling_nwc_min',44 'linalg.pooling_nwc_min_unsigned',45 'linalg.pooling_nwc_sum',46 'linalg.quantized_batch_matmul',47 'linalg.quantized_matmul', 'linalg.vecmat'),48 repeat1($._ins_outs_attributes),49 field('return', optional($._function_return))),50 51 seq('linalg.generic', repeat1($._ins_outs_attributes),52 field('body', $.region),53 field('return', optional($._function_return))),54 55 // operation ::= `linalg.index` $dim attr-dict `:`56 // type($result)57 seq('linalg.index', field('dimension', $.integer_literal),58 field('attributes', optional($.attribute)),59 field('return', $._type_annotation)),60 61 seq(choice('linalg.map', 'linalg.reduce'),62 repeat1($._ins_outs_attributes),63 field('arguments', $.block_arg_list),64 field('body', $.region),65 field('return', optional($._function_return))),66 67 seq('linalg.yield',68 field('attributes', optional($.attribute)),69 field('results', optional($._value_use_type_list))))),70 71 _ins_outs_attributes : $ => choice($._ins, $._outs, $.attribute,72 $._attribute_entry_list),73 _ins : $ => seq(token('ins'), '(', $._value_use_type_list, ')'),74 _outs : $ => seq(token('outs'), '(', $._value_use_type_list, ')'),75 _attribute_entry_list : $ => seq($.bare_attribute_entry,76 repeat(seq(',', $.bare_attribute_entry))),77 bare_attribute_entry : $ => seq($.bare_id, '=', $.attribute_value)78}79