编译器开发过程中,常涉及到的一个工作就是dialect的之间的转换,从一个前端的dialect统一到中间dialect,或者lowering到低层次的dialect,一般涉及到常见工作分为:1)op 转换;2)shape align;3)data shuffle。后面三篇文章,将分别说明这部分工作
以onnx mlir到tensorflow lite(tfl) mlir的转换举例
1)op 转换 (conv2d op)
onnx的算子描述:https://github.com/onnx/onnx-mlir/blob/main/src/Dialect/ONNX/ONNXOps.td.inc
tfl的算子描述:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/compiler/mlir/lite/ir/tfl_ops.td
从ONNXOps.td.inc摘出onnx conv的算子描述,如图所示:
def ONNXConvOp:ONNX_Op<"Conv",
[Pure, DeclareOpInterfaceMethods<ShapeInferenceOpInterface>, DeclareOpInterfaceMethods<ShapeHelperOpInterface>]> {
let summary = "ONNX Conv operation";
let description = [{
The convolution operator consumes an input tensor and a filter, and
computes the output.
}];