mlir 编译器学习笔记之五 -- 开发避坑

1、范围循环和索引循环的区别,

复制代码
// 假设原始操作数: [A, A, A] (同一个值A被用了三次)

// 范围for循环的问题:
for (auto input : op.getDpsInputs()) {  // 缓存了 [A, A, A]
  // 第一次迭代:input = A,替换为 A_conv → 操作数变为 [A_conv, A, A]
  // 第二次迭代:input = A (仍然是缓存的A),但实际上应该处理 A_conv
  // 这会导致逻辑错误!
}

// 索引循环的正确行为:
for (size_t i = 0; i < op.getDpsInputs().size(); i++) {
  auto input = op.getDpsInputs()[i];  // 每次都重新获取
  // 第一次迭代:input = A,替换为 A_conv → 操作数变为 [A_conv, A, A]
  // 第二次迭代:重新获取 op.getDpsInputs()[1] = A_conv (更新后的值)
  // 正确处理转换后的值!
}

2、replaceAllUsesExcept 处理多输入的input时需要谨慎 (output不涉及)

复制代码
需要显式列出所有要排除的操作,这要求我们知道所有不应该被修改的用户
相关推荐
玄斎9 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
清风一徐10 小时前
禅道从18.3升级到21.7.6版本
笔记
Jack___Xue10 小时前
LangChain实战快速入门笔记(六)--LangChain使用之Agent
笔记·langchain·unix
零度@10 小时前
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
数据库·笔记·sql
im_AMBER11 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
其美杰布-富贵-李11 小时前
HDF5文件学习笔记
数据结构·笔记·学习
d111111111d13 小时前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
静小谢13 小时前
前后台一起部署,vite配置笔记base\build
前端·javascript·笔记
ask_baidu13 小时前
Doris笔记
android·笔记
嗷嗷哦润橘_14 小时前
AI Agent学习:MetaGPT之我的工作
人工智能·学习·flask