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

}

相关推荐
龘龍龙1 天前
Python基础学习(四)
开发语言·python·学习
charlie1145141911 天前
深入解构:MSVC 调试机制与 Visual Studio 调试器原理
c++·ide·windows·学习·visual studio·调试·现代c++
Lv11770081 天前
Visual Studio 中的密封类和静态类
ide·笔记·c#·visual studio
Darken031 天前
基于C语言的学习---if语句
c语言·学习·if语句
LiYingL1 天前
LAMIC:一种无需学习、布局可控的多参考图像生成方法
学习
小严家1 天前
Java基础教程大全完整学习路径
java·开发语言·学习
yesyesyoucan1 天前
在线魔方解谜站:从零入门到精通的智能魔方学习平台
学习·算法
HyperAI超神经1 天前
【vLLM 学习】Prefix Caching
人工智能·深度学习·学习·大语言模型·cpu·gpu·vllm
.小墨迹1 天前
C++学习之std::move 的用法与优缺点分析
linux·开发语言·c++·学习·算法·ubuntu
黑客思维者1 天前
机器学习007:监督学习【回归算法】(线性回归)--股票背后的预测学
学习·机器学习·回归·线性回归·监督学习