You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LLVM IR验证报错“指令未支配所有使用”问题排查求助

排查LLVM IR "Instruction does not dominate all uses!" 错误的关键点
  • 跨函数依赖的支配性漏洞:单个函数验证正常但模块级出错,大概率是calc.1引用了其他函数中定义在条件分支后的变量。比如某函数里的指令仅在if块内生成值,但calc.1直接使用这个值,而调用calc.1的路径可能没经过该if块。lli运行时刚好走了有定义的路径所以没崩,但验证器会严格检查所有可能路径的支配性。
  • SSA规则的跨函数违反:LLVM的SSA要求所有值的定义必须覆盖其所有使用场景。如果你的IR手动构造了跨函数的局部值引用——比如calc.1用了另一个函数里仅在特定基本块才会生成的值,就会触发这个错误。
  • 函数克隆后的引用混乱:calc.1这类带后缀的函数名通常是LLVM自动克隆生成的,克隆过程中如果没把原函数内部的引用全部同步到新函数,就会导致calc.1错误引用原函数中未支配的定义,单独看每个函数没问题,合在一起就触发验证错误。
  • PassManager的验证逻辑差异:虽然用的是legacy::FunctionPassManager,但createVerifierPass会做模块级的跨函数检查,不会只局限于单个函数的内部逻辑,所以单个函数验证过不了模块级的关。

具体排查步骤

  • 用opt -verify -debug运行你的IR模块,拿到具体触发错误的指令和对应的被引用值,定位该值的定义位置。
  • 检查calc.1的所有外部引用,确认每个值的定义路径是否覆盖了所有调用calc.1的入口。
  • 核对函数克隆/生成逻辑,确保calc.1的所有内部引用都指向自身函数内的基本块,没有残留对原函数的引用。
  • 逐步删减模块中的函数,找到和calc.1组合后触发错误的函数,缩小问题范围。

内容的提问来源于stack exchange,提问作者user14749247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:24:19