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()), ...);

}

相关推荐
yyyyy_abc8 小时前
ceph学习笔记
笔记·ceph·学习
晓梦林8 小时前
ximai靶场学习笔记
android·笔记·学习
nashane8 小时前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
IT19958 小时前
Dify笔记-创建自定义工具连接到自建的OpenAPI Schema服务
笔记
一口吃俩胖子9 小时前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
starvapour10 小时前
SSH笔记
笔记·ssh
@杰克成10 小时前
Java学习30
java·开发语言·学习
三品吉他手会点灯10 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
大G的笔记本11 小时前
synchronized 的原理(简单版)
笔记
Bechamz12 小时前
大数据开发学习Day36
大数据·学习