mlir 编译器学习笔记之六 -- 经典实现

1、利用 重载方法: val.getDefiningOp<emitc::CallOpaqueOp>() 和 val.getDefiningOp()

复制代码
class Value {
private:
    Operation* definingOp_ = nullptr;
public:
    Operation* getDefiningOp() const {   // 基础版本
        return definingOp_;
    }
    template <typename OpTy>             // 模板版本 - 调用基础版本,增加类型检查
    OpTy getDefiningOp() const {
        return llvm::dyn_cast_or_null<OpTy>(getDefiningOp());
    }
};

2、动态多态 (dyn_cast) 要求具有相同的基类。当没有相同基类时候可以使用requires (C++20)

模版类变量 可以使用 dyn_cast<BAUStructuredOp>(*op) 直接类型转换,也可以Operation* operation = op隐式类型转换

3、利用模版template <typename... OpType>实现多个同类算子处理

template <typename... OpTypes>

static void registerMAUOps(RewritePatternSet &patterns) {

(patterns.add<InsertDataLayoutforBAUByInterface<OpTypes>>(patterns.getContext()), ...);

}

相关推荐
嗯嗯**17 小时前
Neo4j学习4:数据导入
学习·neo4j·图数据库·csv·数据导入
卡布叻_星星17 小时前
清理缓存并重启 IDEA
笔记
代码游侠17 小时前
学习笔记——Linux内核与嵌入式开发2
linux·运维·arm开发·嵌入式硬件·学习·架构
我是黄骨鱼17 小时前
【零基础学数据库|第四篇】SQL通用语法学习
学习
Yaozh、18 小时前
【人工智能中的“智能”是如何实现的】从逻辑回归到神经网络(自用笔记整理)
人工智能·笔记·深度学习·神经网络·机器学习·逻辑回归
lichenyang45318 小时前
Node.js AI 开发入门 - 完整学习笔记
人工智能·学习·node.js
傻小胖18 小时前
18.ETH-GHOST-北大肖臻老师客堂笔记
笔记·区块链
今儿敲了吗18 小时前
11| 子集
c++·笔记·算法
Gain_chance18 小时前
29-学习笔记尚硅谷数仓搭建-DWD层交易域下单事务事实表和交易域支付成功事务事实表
数据仓库·hive·笔记·学习·datagrip
云游云记18 小时前
php 高精度数学扩展 bcmath 知识笔记
笔记·php·bcmath