119 lines · javascript
1'use strict';2 3module.exports = {4 affine_dialect : $ => prec.right(choice(5 seq('affine.apply',6 field('operand',7 seq($.attribute, $._dim_and_symbol_use_list)),8 field('attributes', optional($.attribute))),9 10 // operation ::= `affine.delinearize_index` $linear_index11 // `into` ` `12 // `(` $basis `)` attr-dict `:`13 // type($multi_index)14 seq('affine.delinearlize_index',15 field('operand', $.value_use), 'into',16 field('basis', $._value_use_list_parens),17 field('attributes', optional($.attribute)),18 field('return', $._type_annotation)),19 20 // operation ::= `affine.dma_start` ssa-use `[`21 // multi-dim-affine-map-of-ssa-ids `]`,22 // `[` multi-dim-affine-map-of-ssa-ids `]`,23 // `[` multi-dim-affine-map-of-ssa-ids `]`,24 // ssa-use `:` memref-type25 seq(choice('affine.dma_start', 'affine.dma_wait'),26 field('operands',27 seq($.value_use, $._multi_dim_affine_expr_sq,28 repeat(seq(',', $.value_use,29 $._multi_dim_affine_expr_sq)))),30 ',', field('numElements', $._value_use_list),31 field('return', $._type_annotation)),32 33 // operation ::= `affine.for` ssa-id `=` lower-bound `to`34 // upper-bound35 // (`step` integer-literal)? `{` op* `}`36 seq('affine.for', field('iv', $.value_use), '=',37 field('lowerBound',38 seq(optional(token('max')), $._bound)),39 token('to'),40 field('upperBound',41 seq(optional(token('min')), $._bound)),42 field('step',43 optional(seq(token('step'), $.integer_literal))),44 field('iter_args',45 optional(seq(token('iter_args'),46 $._value_assignment_list))),47 field('return', optional($._function_return)),48 field('body', $.region),49 field('attributes', optional($.attribute))),50 51 // operation ::= `affine.if` if-op-cond `{` op* `}`52 // (`else` `{` op* `}`)? if-op-cond ::= integer-set-attr53 // dim-and-symbol-use-list54 seq('affine.if',55 field('condition',56 seq($.attribute, $._dim_and_symbol_use_list)),57 field('return', optional($._function_return)),58 field('trueblk', $.region),59 field('falseblk',60 optional(seq(token('else'), $.region))),61 field('attributes', optional($.attribute))),62 63 // operation ::= `affine.load` ssa-use `[`64 // multi-dim-affine-map-of-ssa-ids `]`65 // `:` memref-type66 seq(choice('affine.load', 'affine.vector_load'),67 field('operand', $.value_use),68 field('multiDimAffineMap',69 $._multi_dim_affine_expr_sq),70 field('return', $._type_annotation)),71 72 // operation ::= `affine.min` affine-map-attribute73 // dim-and-symbol-use-list74 seq(choice('affine.min', 'affine.max'),75 field('operand',76 seq($.attribute, $._dim_and_symbol_use_list))),77 78 seq('affine.parallel',79 field('iv', $._value_use_list_parens), '=',80 field('lowerBound', $._multi_dim_affine_expr_parens),81 token('to'),82 field('upperBound', $._multi_dim_affine_expr_parens),83 field('step',84 optional(seq(token('step'),85 $._multi_dim_affine_expr_parens))),86 field('reduce',87 optional(seq(token('reduce'), '(',88 $.string_literal,89 repeat(seq(',', $.string_literal)),90 ')'))),91 field('return', optional($._function_return)),92 field('body', $.region)),93 94 seq('affine.prefetch', field('source', $.value_use),95 field('indices',96 optional($._multi_dim_affine_expr_sq)),97 ',', field('isWrite', $.isWrite_attr), ',',98 field('localityHint', $.localityHint_attr), ',',99 field('isDataCache', $.isDataCache_attr),100 field('attributes', optional($.attribute)),101 field('return', $._type_annotation)),102 103 // operation ::= `affine.store` ssa-use, ssa-use `[`104 // multi-dim-affine-map-of-ssa-ids `]`105 // `:` memref-type106 seq(choice('affine.store', 'affine.vector_store'),107 field('source', $.value_use), ',',108 field('destination', $.value_use),109 field('multiDimAffineMap',110 $._multi_dim_affine_expr_sq),111 field('return', $._type_annotation)),112 113 // operation ::= `affine.yield` attr-dict ($operands^ `:`114 // type($operands))?115 seq('affine.yield',116 field('attributes', optional($.attribute)),117 field('results', optional($._value_use_type_list)))))118}119