143 lines
8.8 KiB
JavaScript
143 lines
8.8 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
module.exports = {
|
||
|
arith_dialect : $ => choice(
|
||
|
// operation ::= `arith.constant` attr-dict $value
|
||
|
seq('arith.constant',
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('value', $._literal_and_type)),
|
||
|
|
||
|
// operation ::= `arith.addi` $lhs `,` $rhs attr-dict `:`
|
||
|
// type($result) operation ::= `arith.subi` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($result) operation ::= `arith.divsi`
|
||
|
// $lhs `,` $rhs attr-dict `:` type($result) operation ::=
|
||
|
// `arith.divui` $lhs `,` $rhs attr-dict `:` type($result)
|
||
|
// operation ::= `arith.ceildivsi` $lhs `,` $rhs attr-dict
|
||
|
// `:` type($result) operation ::= `arith.ceildivui` $lhs
|
||
|
// `,` $rhs attr-dict `:` type($result) operation ::=
|
||
|
// `arith.floordivsi` $lhs `,` $rhs attr-dict `:`
|
||
|
// type($result) operation ::= `arith.remsi` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($result) operation ::= `arith.remui`
|
||
|
// $lhs `,` $rhs attr-dict `:` type($result) operation ::=
|
||
|
// `arith.muli` $lhs `,` $rhs attr-dict `:` type($result)
|
||
|
// operation ::= `arith.mulsi_extended` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($lhs) operation ::=
|
||
|
// `arith.mului_extended` $lhs `,` $rhs attr-dict `:`
|
||
|
// type($lhs) operation ::= `arith.andi` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($result) operation ::= `arith.ori`
|
||
|
// $lhs `,` $rhs attr-dict `:` type($result) operation ::=
|
||
|
// `arith.xori` $lhs `,` $rhs attr-dict `:` type($result)
|
||
|
// operation ::= `arith.maxsi` $lhs `,` $rhs attr-dict `:`
|
||
|
// type($result) operation ::= `arith.maxui` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($result) operation ::= `arith.minsi`
|
||
|
// $lhs `,` $rhs attr-dict `:` type($result) operation ::=
|
||
|
// `arith.minui` $lhs `,` $rhs attr-dict `:` type($result)
|
||
|
// operation ::= `arith.shli` $lhs `,` $rhs attr-dict `:`
|
||
|
// type($result) operation ::= `arith.shrsi` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($result) operation ::= `arith.shrui`
|
||
|
// $lhs `,` $rhs attr-dict `:` type($result)
|
||
|
seq(choice('arith.addi', 'arith.subi', 'arith.divsi',
|
||
|
'arith.divui', 'arith.ceildivsi',
|
||
|
'arith.ceildivui', 'arith.floordivsi',
|
||
|
'arith.remsi', 'arith.remui', 'arith.muli',
|
||
|
'arith.mulsi_extended', 'arith.mului_extended',
|
||
|
'arith.andi', 'arith.ori', 'arith.xori',
|
||
|
'arith.maxsi', 'arith.maxui', 'arith.minsi',
|
||
|
'arith.minui', 'arith.shli', 'arith.shrsi',
|
||
|
'arith.shrui'),
|
||
|
field('lhs', $.value_use), ',',
|
||
|
field('rhs', $.value_use),
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('return', $._type_annotation)),
|
||
|
|
||
|
// operation ::= `arith.addui_extended` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($sum)
|
||
|
// `,` type($overflow)
|
||
|
seq('arith.addui_extended', field('lhs', $.value_use), ',',
|
||
|
field('rhs', $.value_use),
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('return', seq(':', $.type, ',', $.type))),
|
||
|
|
||
|
// operation ::= `arith.addf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
// operation ::= `arith.divf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
// operation ::= `arith.maximumf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
// operation ::= `arith.minimumf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
// operation ::= `arith.mulf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
// operation ::= `arith.remf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
// operation ::= `arith.subf` $lhs `,` $rhs (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
seq(choice('arith.addf', 'arith.divf', 'arith.maximumf',
|
||
|
'arith.minimumf', 'arith.mulf', 'arith.remf',
|
||
|
'arith.subf'),
|
||
|
field('lhs', $.value_use), ',',
|
||
|
field('rhs', $.value_use),
|
||
|
field('fastmath', optional($.fastmath_attr)),
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('return', $._type_annotation)),
|
||
|
|
||
|
// operation ::= `arith.negf` $operand (`fastmath` ``
|
||
|
// $fastmath^)?
|
||
|
// attr-dict `:` type($result)
|
||
|
seq(choice('arith.negf'), field('operand', $.value_use),
|
||
|
field('fastmath', optional($.fastmath_attr)),
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('return', $._type_annotation)),
|
||
|
|
||
|
// operation ::= `arith.cmpi` $predicate `,` $lhs `,` $rhs
|
||
|
// attr-dict `:` type($lhs) operation ::= `arith.cmpf`
|
||
|
// $predicate `,` $lhs `,` $rhs attr-dict `:` type($lhs)
|
||
|
seq(choice('arith.cmpi', 'arith.cmpf'),
|
||
|
field('predicate',
|
||
|
choice('eq', 'ne', 'oeq', 'olt', 'ole', 'ogt',
|
||
|
'oge', 'slt', 'sle', 'sgt', 'sge', 'ult',
|
||
|
'ule', 'ugt', 'uge', $.string_literal)),
|
||
|
',', field('lhs', $.value_use), ',',
|
||
|
field('rhs', $.value_use),
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('return', $._type_annotation)),
|
||
|
|
||
|
// operation ::= `arith.extf` $in attr-dict `:` type($in)
|
||
|
// `to` type($out) operation ::= `arith.extsi` $in attr-dict
|
||
|
// `:` type($in) `to` type($out) operation ::= `arith.extui`
|
||
|
// $in attr-dict `:` type($in) `to` type($out) operation ::=
|
||
|
// `arith.fptosi` $in attr-dict `:` type($in) `to`
|
||
|
// type($out) operation ::= `arith.fptoui` $in attr-dict `:`
|
||
|
// type($in) `to` type($out) operation ::=
|
||
|
// `arith.index_cast` $in attr-dict `:` type($in) `to`
|
||
|
// type($out) operation ::= `arith.index_castui` $in
|
||
|
// attr-dict `:` type($in) `to` type($out) operation ::=
|
||
|
// `arith.sitofp` $in attr-dict `:` type($in) `to`
|
||
|
// type($out) operation ::= `arith.uitofp` $in attr-dict `:`
|
||
|
// type($in) `to` type($out) operation ::= `arith.bitcast`
|
||
|
// $in attr-dict `:` type($in) `to` type($out) operation ::=
|
||
|
// `arith.truncf` $in attr-dict `:` type($in) `to`
|
||
|
// type($out) operation ::= `arith.trunci` $in attr-dict `:`
|
||
|
// type($in) `to` type($out)
|
||
|
seq(choice('arith.extf', 'arith.extsi', 'arith.extui',
|
||
|
'arith.fptosi', 'arith.fptoui',
|
||
|
'arith.index_cast', 'arith.index_castui',
|
||
|
'arith.sitofp', 'arith.uitofp', 'arith.bitcast',
|
||
|
'arith.truncf', 'arith.trunci'),
|
||
|
field('in', $.value_use),
|
||
|
field('attributes', optional($.attribute)),
|
||
|
field('return', $._type_annotation)),
|
||
|
|
||
|
seq('arith.select', field('cond', $.value_use), ',',
|
||
|
field('trueblk', $.value_use), ',',
|
||
|
field('falseblk', $.value_use),
|
||
|
field('return', $._type_annotation)))
|
||
|
}
|