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不涉及)

复制代码
需要显式列出所有要排除的操作,这要求我们知道所有不应该被修改的用户
相关推荐
传奇开心果编程1 分钟前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
知产xiao_xin15 分钟前
《伯尔尼公约》—— 版权保护期
经验分享·笔记·知识产权
指针常量18 分钟前
【RL相关笔记】RL 效率综述
人工智能·笔记·大语言模型·后训练
留白_22 分钟前
【tableau入门学习】2、柱状图、折线图、饼图、散点图
学习·tableau
STQY燊桐启元(深圳)电子科技24 分钟前
5G 射频光模块场景,ST‑XDP 微波吸波导热垫片应用优势,对比 DP 导热硅胶片
经验分享·笔记·5g
AI视觉网奇32 分钟前
blende 下载安装学习笔记
笔记·学习
传奇开心果编程32 分钟前
【Rust入门知识点学与练】第9课:Vec 动态数组
开发语言·学习·rust
是翎37 分钟前
Vibe Coding零基础入门:六步工作流拆解
大数据·人工智能·学习·机器学习·数据挖掘
my059240 分钟前
市场学习,不止看资讯,数据查阅与思维练习同样重要
python·学习
斑马1391 小时前
Linux软件编程学习笔记(十一)——HTTP协议
linux·笔记·学习