//===- ONNXOps.td -- ONNX operation definitions ---------*- tablegen -*----===// // // Copyright 2019 The IBM Research Authors // // ============================================================================= // // Defines MLIR ONNX operations. // //===----------------------------------------------------------------------===// #ifdef ONNX_OPS #else #define ONNX_OPS #ifdef OP_BASE #else include "mlir/IR/OpBase.td" #endif // OP_BASE #ifdef SHAPE_INFERENCE_INTERFACE #else include "pass/shape_inference_interface.td" #endif // SHAPE_INFERENCE_INTERFACE def ONNX_Dialect : Dialect { let name = "onnx"; let cppNamespace = ""; } // Base class for ONNX dialect operations. This operation inherits from the base // `Op` class in OpBase.td, and provides: // * The parent dialect of the operation. // * The mnemonic for the operation, or the name without the dialect prefix. // * A list of traits for the operation. class ONNX_Op traits = []> : Op; //===----------------------------------------------------------------------===// // ONNX Operations //===----------------------------------------------------------------------===// //the tablegen code onnxop.in is generated with gen_doc.py //clone and install onnx // git clone --recursive https://github.com/onnx/onnx.git // set up env for anaconda3 and for ONNF (BOOSTROOT, cmake, gcc ...) // cd onnx //install onnx // CC=gcc CXX=g++ pip install -e . //run the script // python onnx/defs/gen_doc.py //result is in docs/onnxop.inc //current limitations: // 1. Attributes are not processed // 2. output type inference not implemented except Add // 3. Type Attribute: 'optional' and 'Variadic hetergeneous' are ignored // 4. type of string, complex64 and complex128 for input/output are ignored // 5. unsigned int are treated as signed one include "dialect/onnx/onnxop.inc" def ONNXFullGemmOp: ONNX_Op<"full_gemm", [NoSideEffect, DeclareOpInterfaceMethods]> { let summary = "ONNX general matrix multiply operation"; let description = [{ The "onnx.gemm" generic matrix multiplication with bias. }]; let arguments = (ins AnyTensor:$lhs_in, AnyTensor:$rhs_in, AnyTensor:$bias_in); let results = (outs AnyTensor); } #endif // ONNX_OPS