Table-driven Declarative Rewrite Rule (DRR)

好处

模式创建者只需要声明性地指定重写模式,而不必担心调用具体的C++方法。
消除样板代码,展示重写的核心:mlir::RewritePattern已经能够很好地隐藏定义重写规则的样板代码。但是我们仍然需要编写C++编程语言所需的类和函数结构,检查操作符以进行匹配,并调用操作符的build()方法进行构建。这些语句通常非常简单且相似,因此可以进一步通过自动生成来简化。由于我们将样板代码减少到最低限度,声明性的重写规则将只包含重写的核心要素。这使得模式非常容易理解。

规则定义

重写规则的核心构造是在[PatternBase.td][PatternBase]中定义的:

class Pattern<
    dag sourcePattern, list<dag> resultPatterns,
    list<dag> additionalConstraints = [],
    list<dag> supplementalPatterns = [],
    dag benefitsAdded = (addBenefit 0)>;

一个声明式的重写规则包含两个主要组件:

  • 源模式,用于匹配操作的DAG。
  • 一个或多个结果模式,用于生成操作的DAG以替换匹配到的DAG。

我们允许多个结果模式以支持多结果操作和辅助操作,但通常我们只是想将一个操作的DAG转换为另一个操作的DAG。有一个方便的Pattern包装器,Pat,它接受一个单一的结果模式:

class Pat<
    dag sourcePattern, dag
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值