Skip to content

sexjun/MLIR-Tutorials

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MLIR-TutoRials

MLIR的学习项目,通过该项目来了解MLIR的各个功能组件。

Dialect结构

该图取自:llvm 社区

社区也有比较优秀的方言介绍文档: Codegen Dialect Overview Codegen

7. pattern rewrite (toy-3)

ODS有3种:

  1. 直接在td 文件中实现

  2. td 文件中声明, 然后c++ 函数做具体实现.

  3. op声明 let hasCanonicalizeMethod = 1;属性,然后在

    1. LogicalResult circt::MulOp::canonicalize(MulOp op, PatternRewriter &rewriter) 函数中实现.
  4. 使用RwritePattern

    struct ConvertTFLeakyRelu : public RewritePattern {
      ConvertTFLeakyRelu(MLIRContext *context)
          : RewritePattern("tf.LeakyRelu", 1, context) {}
    
      LogicalResult match(Operation *op) const override {
        return success();
      }
    
      void rewrite(Operation *op, PatternRewriter &rewriter) const override {
        rewriter.replaceOpWithNewOp<TFL::LeakyReluOp>(
            op, op->getResult(0).getType(), op->getOperand(0),
            /*alpha=*/op->getAttrOfType<FloatAttr>("alpha"));
      }
    };

7.3 PDL

https://mlir.llvm.org/docs/PDLL/#

  • 已经有pattern rewrite了,为什么还要PDL呢?

​ PDL 语言 (PDLL) 提供了一种从头开始设计的声明性模式语言,用于表示 MLIR 模式重写。 PDLL 旨在通过直观的界面原生支持在所有 MLIR 构造上编写匹配器,该界面可用于提前 (AOT) 和即时 (JIT) 模式编译。

​ Tablegen DRR (TDRR),即表驱动的声明性重写规则,是一种声明性 DSL,TableGen 语言不像 LLVM 那样适合 MLIR 模式的结构。

​ TDRR 的问题很大程度上源于使用 TableGen 作为 DSL 的宿主语言。这些问题的根源在于 TableGen 的结构与 MLIR 的结构不匹配,以及 TableGen 与 MLIR 的动机目标不同。

8. 如何自定义type

About

MLIR学习笔记&教程

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages