笔记-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。
🏷️

标签

➡️

继续阅读