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

}

相关推荐
xiaoxiaoxiaolll3 小时前
Nat Commun:中国团队演示光纤阵列中的里德堡阻塞,为高保真度两比特门奠定基础
学习·量子计算
zhangxuyu11183 小时前
Vue2 学习记录--语法部分
学习
下午见。4 小时前
深入理解C语言共用体/联合体(union):大小计算与大小端判断实战
c语言·笔记·学习
HalvmånEver4 小时前
Linux的第二章 : 基础的指令(二)
linux·运维·服务器·开发语言·学习
im_AMBER10 小时前
React 17
前端·javascript·笔记·学习·react.js·前端框架
报错小能手10 小时前
C++笔记——STL map
c++·笔记
谷歌开发者11 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (六)
前端·chrome·学习
lkbhua莱克瓦2412 小时前
Java基础——集合进阶3
java·开发语言·笔记
QT 小鲜肉12 小时前
【QT/C++】Qt定时器QTimer类的实现方法详解(超详细)
开发语言·数据库·c++·笔记·qt·学习