笔记-LLVM IR中的undef和poison
💡
原文中文,约500字,阅读约需2分钟。
📝
内容提要
undef常量可以取任意值,编译器可以用任意值替代undef。undef的取值可以随时变化。poison表示错误操作的结果。大多数指令的操作数是poison时,结果也是poison。freeze指令用来停止undef和poison的传播。
🎯
关键要点
- undef常量表示可能取任意值,有利于编译器优化。
- undef的取值可以在活跃范围内随时变化,可能导致违反直觉的结果。
- poison表示错误操作的结果,带有nsw/nuw flag的add指令溢出时产生poison。
- 大多数指令中,如果有一个操作数是poison,结果也是poison。
- freeze指令用于停止undef和poison的传播,结果变为固定值。
- freeze的操作数是undef/poison时,结果为固定值;否则相当于nop。
🏷️
标签
➡️