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

}

相关推荐
半壶清水2 小时前
[软考网规考点笔记]-软件开发、项目管理与知识产权核心知识与真题解析
网络·笔记·压力测试
tq10863 小时前
先探索,后设计
笔记
hnult3 小时前
2026 在线培训考试系统选型指南:核心功能拆解与选型逻辑
人工智能·笔记·课程设计
AI视觉网奇3 小时前
ue 角色驱动衣服 绑定衣服
笔记·学习·ue5
三水不滴4 小时前
计网ping原理
经验分享·笔记·计算机网络
prog_61034 小时前
【笔记】思路分享:各种大模型免费当agent后台
笔记·大语言模型·agent·cursor
凯尔萨厮4 小时前
Maven(Windows下载安装)
笔记·maven
wdfk_prog4 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
菩提小狗5 小时前
小迪安全2023-2024|第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载_笔记|web安全|渗透测试|
笔记·安全·web安全
Wentao Sun6 小时前
致敬软件创业者2026
笔记·程序人生