# mlir_test **Repository Path**: CloudKnight/mlir_test ## Basic Information - **Project Name**: mlir_test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-11 - **Last Updated**: 2024-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工程简述 本工程是在MLIR Toy例程的基础上完成的,借用了Toy例程中的代码文件。其次,该分支对应于Toy例程的CH3。 # 文件基础结构 include中包括所有目前用到的头文件以及定义Toy操作的td文件。其中,AST.cpp、Lexer.cpp和Parser.cpp完成前端分析工作;Ops.td和Dialect.h完成对Toy方言的定义和Toy操作的定义;MLIRGen.h用于生成以MLIR为目标的IR lib文件夹包括所有目前用到的源文件。其中,parser文件夹中关于antlr的部分是为后续将前端替换为antlr自动生成的前端做准备,目前还未完成,后续有时间会再进行补充。 cmake文件夹中的文件也是在为使用antlr自动生成前端做准备,目前还未完成,后续有时间会再进行补充。 toyc.cpp是本工程的入口,用于读取测试文件,调用各种操作完成编译工作。 # 编译方法 1. 拥有MLIR的环境,这个自行查看[MLIR](#https://mlir.llvm.org/getting_started/)官网安装。 2. 修改源目录下的CMakeLists.txt文件,将其中MLIR的路径该成你的安装路径。 3. 使用'生成'(build)直接进行工程构建,这会在build文件的bin文件夹中生成可执行程序mlir-toy。 4. 执行命令:`$ /build/bin/mlir-toy /test/test.toy -emit=mlir -opt` # CH3中的变化 1. 添加了以下文件: - ToyCombine.td:用于IR生成优化,主要展示如何以ODS格式定义模式匹配和重写,完成了对Reshape的优化 - ToyCombine.cpp:用于IR生成优化,主要展示如何进行C++式的模式匹配和重写,完成了对Transpose的优化并注册这两个优化 2. 改动了以下文件: - Ops.td:在定义Reshape和Transpose操作处,添加了`hasCanonicalizer = 1`来启用新规范化模式 - toyc.cpp:添加了使用到的头文件,以及优化管道来运行优化 **自学笔记,若有不正确处,请见谅** **由于各个分支的文件都或多或少进行了修正,请使用者在使用时自行构建后,再进行测试**